feat: Update reply message handling in ChatViewModel and ChatDetailScreen to improve user experience during reply animations
This commit is contained in:
@@ -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() }
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user