feat: Update reply message handling in ChatViewModel and ChatDetailScreen to improve user experience during reply animations

This commit is contained in:
k1ngsterr1
2026-01-16 04:23:20 +05:00
parent 6c4bffb93e
commit c605148fa4
2 changed files with 11 additions and 6 deletions

View File

@@ -292,9 +292,15 @@ fun ChatDetailScreen(
val hasReply = replyMessages.isNotEmpty()
// 🔥 Snapshot последнего непустого состояния для отображения во время анимации закрытия
val displayReplyMessages = remember(replyMessages) {
if (replyMessages.isNotEmpty()) replyMessages else emptyList()
}.let { if (hasReply) replyMessages else it }
// Используем rememberSaveable с mutableStateOf чтобы сохранять данные пока панель закрывается
var displayReplyMessages by remember { mutableStateOf(replyMessages) }
// Обновляем snapshot только когда появляются новые данные (не пустые)
LaunchedEffect(replyMessages) {
if (replyMessages.isNotEmpty()) {
displayReplyMessages = replyMessages
}
}
// 🔥 FocusRequester для автофокуса на инпут при reply
val inputFocusRequester = remember { FocusRequester() }

View File

@@ -1032,9 +1032,8 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) {
_messages.value = _messages.value + optimisticMessage
_inputText.value = ""
// 🔥 НЕ очищаем reply автоматически - пользователь должен закрыть панель вручную
// Это позволяет сохранить текст в reply инпуте после отправки
// clearReplyMessages() - вызывается только при клике на крестик
// 🔥 Очищаем reply после отправки - данные сохраняются в displayReplyMessages для анимации
clearReplyMessages()
// Кэшируем текст
decryptionCache[messageId] = text