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()
|
val hasReply = replyMessages.isNotEmpty()
|
||||||
|
|
||||||
// 🔥 Snapshot последнего непустого состояния для отображения во время анимации закрытия
|
// 🔥 Snapshot последнего непустого состояния для отображения во время анимации закрытия
|
||||||
val displayReplyMessages = remember(replyMessages) {
|
// Используем rememberSaveable с mutableStateOf чтобы сохранять данные пока панель закрывается
|
||||||
if (replyMessages.isNotEmpty()) replyMessages else emptyList()
|
var displayReplyMessages by remember { mutableStateOf(replyMessages) }
|
||||||
}.let { if (hasReply) replyMessages else it }
|
|
||||||
|
// Обновляем snapshot только когда появляются новые данные (не пустые)
|
||||||
|
LaunchedEffect(replyMessages) {
|
||||||
|
if (replyMessages.isNotEmpty()) {
|
||||||
|
displayReplyMessages = replyMessages
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 🔥 FocusRequester для автофокуса на инпут при reply
|
// 🔥 FocusRequester для автофокуса на инпут при reply
|
||||||
val inputFocusRequester = remember { FocusRequester() }
|
val inputFocusRequester = remember { FocusRequester() }
|
||||||
|
|||||||
@@ -1032,9 +1032,8 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
_messages.value = _messages.value + optimisticMessage
|
_messages.value = _messages.value + optimisticMessage
|
||||||
_inputText.value = ""
|
_inputText.value = ""
|
||||||
|
|
||||||
// 🔥 НЕ очищаем reply автоматически - пользователь должен закрыть панель вручную
|
// 🔥 Очищаем reply после отправки - данные сохраняются в displayReplyMessages для анимации
|
||||||
// Это позволяет сохранить текст в reply инпуте после отправки
|
clearReplyMessages()
|
||||||
// clearReplyMessages() - вызывается только при клике на крестик
|
|
||||||
|
|
||||||
// Кэшируем текст
|
// Кэшируем текст
|
||||||
decryptionCache[messageId] = text
|
decryptionCache[messageId] = text
|
||||||
|
|||||||
Reference in New Issue
Block a user