android, desktop: making list items unique (#4812)

This commit is contained in:
Stanislav Dmitrenko
2024-09-03 13:38:42 +00:00
committed by GitHub
parent 9cba96082d
commit 6407d5de63
4 changed files with 6 additions and 3 deletions
@@ -411,7 +411,9 @@ object ChatModel {
// remove from current chat
if (chatId.value == cInfo.id) {
chatItems.removeAll {
val remove = it.id == cItem.id
// We delete taking into account meta.createdAt to make sure we will not be in situation when two items with the same id will be deleted
// (it can happen if already deleted chat item in backend still in the list and new one came with the same (re-used) chat item id)
val remove = it.id == cItem.id && it.meta.createdAt == cItem.meta.createdAt
if (remove) { AudioPlayer.stop(it) }
remove
}
@@ -5316,6 +5316,7 @@ abstract class TerminalItem {
val date: Instant = Clock.System.now()
abstract val label: String
abstract val details: String
val createdAtNanos: Long = System.nanoTime()
class Cmd(override val id: Long, override val remoteHostId: Long?, val cmd: CC): TerminalItem() {
override val label get() = "> ${cmd.cmdString}"
@@ -132,7 +132,7 @@ fun TerminalLog() {
}
val clipboard = LocalClipboardManager.current
LazyColumnWithScrollBar(reverseLayout = true) {
items(reversedTerminalItems) { item ->
items(reversedTerminalItems, key = { item -> item.id to item.createdAtNanos }) { item ->
val rhId = item.remoteHostId
val rhIdStr = if (rhId == null) "" else "$rhId "
Text(
@@ -998,7 +998,7 @@ fun BoxWithConstraintsScope.ChatItemsList(
}
)
LazyColumnWithScrollBar(Modifier.align(Alignment.BottomCenter), state = listState, reverseLayout = true) {
itemsIndexed(reversedChatItems, key = { _, item -> item.id }) { i, cItem ->
itemsIndexed(reversedChatItems, key = { _, item -> item.id to item.meta.createdAt.toEpochMilliseconds() }) { i, cItem ->
CompositionLocalProvider(
// Makes horizontal and vertical scrolling to coexist nicely.
// With default touchSlop when you scroll LazyColumn, you can unintentionally open reply view