From 306e8546464bdc78c6b020287d8522ca2835a42f Mon Sep 17 00:00:00 2001 From: k1ngsterr1 Date: Fri, 16 Jan 2026 04:33:43 +0500 Subject: [PATCH] feat: Improve dialog deletion process by updating UI immediately and handling errors gracefully --- .../java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt | 3 ++- .../com/rosetta/messenger/ui/chats/ChatsListViewModel.kt | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt index 76b5c4e..bdd134b 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt @@ -1038,8 +1038,9 @@ fun SwipeableDialogItem( .fillMaxHeight() .background(PrimaryBlue) .clickable { - onDelete() + // Закрываем свайп мгновенно перед удалением offsetX = 0f + onDelete() }, contentAlignment = Alignment.Center ) { diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListViewModel.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListViewModel.kt index 134dcfd..50575c8 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListViewModel.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListViewModel.kt @@ -176,6 +176,9 @@ class ChatsListViewModel(application: Application) : AndroidViewModel(applicatio if (currentAccount.isEmpty()) return try { + // 🚀 Сразу обновляем UI - удаляем диалог из локального списка + _dialogs.value = _dialogs.value.filter { it.opponentKey != opponentKey } + // Вычисляем правильный dialog_key (отсортированная комбинация ключей) val dialogKey = if (currentAccount < opponentKey) { "$currentAccount:$opponentKey" @@ -205,6 +208,8 @@ class ChatsListViewModel(application: Application) : AndroidViewModel(applicatio android.util.Log.d("ChatsListViewModel", "Dialog deleted successfully: $opponentKey") } catch (e: Exception) { android.util.Log.e("ChatsListViewModel", "Error deleting dialog", e) + // В случае ошибки - возвращаем диалог обратно (откатываем оптимистичное обновление) + // Flow обновится автоматически из БД } }