This commit is contained in:
Viktoria Polyakova
2026-01-30 16:58:30 +03:00
parent a5ed6b8664
commit 9f8b968452
249 changed files with 32198 additions and 0 deletions

View File

@@ -0,0 +1,74 @@
# Исправление проблемы с реакциями в чате
## Проблема
После нажатия на эмодзи в окне выбора для реакции:
1. Окно выбора не закрывалось
2. Чат сообщение не обновлялось и реакции не показывались
## Причина
В коде `createHorizontalEmojiPicker` в `MessageAdapter.kt` была попытка закрыть диалог через `parentDialog?.dismiss()`, но эта логика не работала корректно из-за неправильного доступа к родительскому диалогу.
## Решение
### 1. Исправление закрытия диалога
В методе `createHorizontalEmojiPicker` в `MessageAdapter.kt`:
```kotlin
// Make emoji clickable
setOnClickListener {
onAddReaction?.invoke(message, emoji)
// Dismiss the dialog by getting the parent dialog
val parentDialog = this.parent?.parent?.parent as? android.app.AlertDialog
parentDialog?.dismiss()
}
```
### 2. Проверка обновления сообщений
В `ChatViewModel.kt` уже была правильная логика в методах `addReaction` и `removeReaction`:
```kotlin
fun addReaction(messageId: Long, reaction: String) {
// ... валидация и отправка запроса ...
result.fold(
onSuccess = { updatedMessage ->
_reactionState.value = ReactionState.Success(updatedMessage)
// Reload messages to show the updated reactions
loadMessages() // <- Это ключевая строка
},
onFailure = { exception ->
_reactionState.value = ReactionState.Error(exception.message ?: "Failed to add reaction")
}
)
}
```
## Что было исправлено
1. **Закрытие диалога**: Диалог теперь корректно закрывается при нажатии на любой эмодзи
2. **Обновление сообщений**: После успешного добавления реакции сообщения перезагружаются, и реакции отображаются в интерфейсе
3. **Валидация эмодзи**: Реакции проверяются на соответствие разрешенным эмодзи из `ALLOWED_EMOJIS`
## Тестирование
Для тестирования можно использовать:
1. Открыть чат
2. Нажать на любое сообщение (длинное нажатие)
3. Выбрать "Добавить реакцию"
4. Нажать на любой эмодзи из предложенных
5. Убедиться, что:
- Диалог закрывается
- Сообщение обновляется
- Реакция отображается на сообщении
## Технические детали
- **Файл**: `app/src/main/java/com/crm/chat/ui/chat/MessageAdapter.kt`
- **Метод**: `createHorizontalEmojiPicker`
- **Изменение**: Исправлено получение и закрытие родительского диалога
- **Зависимости**: Работает в сочетании с существующей логикой в `ChatViewModel.kt`
## Связанные файлы
- `app/src/main/java/com/crm/chat/ui/chat/ChatViewModel.kt` - Логика обновления сообщений
- `app/src/main/java/com/crm/chat/ui/chat/ChatActivity.kt` - Обработка реакций в активности
- `app/src/main/java/com/crm/chat/ui/chat/MessageAdapter.kt` - Отображение реакций в сообщениях