fix: Simplify message selection logic by using only message ID; improve performance and reduce potential errors

This commit is contained in:
k1ngsterr1
2026-01-17 03:38:41 +05:00
parent 3eb841c145
commit 2a16d39e02

View File

@@ -625,7 +625,7 @@ fun ChatDetailScreen(
IconButton(
onClick = {
val textToCopy = messages
.filter { selectedMessages.contains("${it.id}_${it.timestamp.time}") }
.filter { selectedMessages.contains(it.id) }
.sortedBy { it.timestamp }
.joinToString("\n\n") { msg ->
val time = SimpleDateFormat("HH:mm", Locale.getDefault())
@@ -648,7 +648,7 @@ fun ChatDetailScreen(
IconButton(
onClick = {
messages
.filter { selectedMessages.contains("${it.id}_${it.timestamp.time}") }
.filter { selectedMessages.contains(it.id) }
.forEach { msg -> viewModel.deleteMessage(msg.id) }
selectedMessages = emptySet()
}
@@ -939,7 +939,7 @@ fun ChatDetailScreen(
.background(PrimaryBlue.copy(alpha = 0.1f))
.clickable {
val selectedMsgs = messages
.filter { selectedMessages.contains("${it.id}_${it.timestamp.time}") }
.filter { selectedMessages.contains(it.id) }
.sortedBy { it.timestamp }
viewModel.setReplyMessages(selectedMsgs)
selectedMessages = emptySet()
@@ -976,7 +976,7 @@ fun ChatDetailScreen(
.clickable {
// 📨 Сохраняем сообщения в ForwardManager и показываем выбор чата
val selectedMsgs = messages
.filter { selectedMessages.contains("${it.id}_${it.timestamp.time}") }
.filter { selectedMessages.contains(it.id) }
.sortedBy { it.timestamp }
val forwardMessages = selectedMsgs.map { msg ->
@@ -1167,9 +1167,9 @@ fun ChatDetailScreen(
) {
// Reversed layout: item 0 = самое новое сообщение (внизу экрана)
// messagesWithDates уже отсортирован новые->старые
// 🔥 Используем уникальный ключ: id + timestamp + index для гарантии уникальности
itemsIndexed(messagesWithDates, key = { index, item ->
"${item.first.id}_${item.first.timestamp.time}_$index"
// 🔥 Используем только id как ключ - без index, чтобы избежать прыгания при добавлении новых сообщений
itemsIndexed(messagesWithDates, key = { _, item ->
item.first.id
}) {
index,
(message, showDate) ->
@@ -1188,8 +1188,8 @@ fun ChatDetailScreen(
secondaryTextColor = secondaryTextColor
)
}
// 🔥 Уникальный ключ для выделения: id + timestamp
val selectionKey = "${message.id}_${message.timestamp.time}"
// 🔥 Ключ для выделения - используем только ID (как и в key списка)
val selectionKey = message.id
MessageBubble(
message = message,
isDarkTheme = isDarkTheme,