fix: Simplify message selection logic by using only message ID; improve performance and reduce potential errors
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user