Описание проблемы
На странице чатов (/chats) обнаружено три UX-проблемы:
1. Кнопка "Взять диалог" не работает 🔴 Critical
Ожидаемое поведение: При клике на кнопку "Взять диалог" чат переходит в режим менеджера.
Фактическое поведение: Ничего не происходит, кнопка остаётся без изменений.
Причина: Контроллер Tenants::Chats::ManagerController#takeover всегда рендерит JSON ответ (строки 69-77), игнорируя turbo_stream запросы:
# app/controllers/tenants/chats/manager_controller.rb:60-78
def takeover
result = Manager::TakeoverService.call(...)
if result.success?
render json: { ... } # <-- всегда JSON!
else
render json: { ... }
end
end
При этом turbo_stream шаблон app/views/tenants/chats/takeover.turbo_stream.slim существует, но не используется!
Решение: Добавить respond_to блок:
def takeover
result = Manager::TakeoverService.call(...)
respond_to do |format|
format.turbo_stream if result.success?
format.json do
if result.success?
render json: { success: true, chat: chat_json(result.chat), ... }
else
render json: { success: false, error: result.error }, status: :unprocessable_entity
end
end
end
end
2. Курсор над кнопкой не pointer 🟡 Minor
Ожидаемое поведение: При наведении на кнопку "Взять диалог" курсор должен меняться на pointer.
Фактическое поведение: Курсор остаётся стандартным.
Файл: app/views/tenants/chats/_chat_controls.html.slim:8
Решение: Добавить класс cursor-pointer к кнопке.
3. URL не обновляется при клике на чат 🟡 Medium
Ожидаемое поведение: При клике на чат в списке URL должен меняться на /chats/123.
Фактическое поведение: URL остаётся /chats или /chats?page=2, пользователь не может поделиться ссылкой на конкретный чат.
Причина: В link_to отсутствует data-turbo-action="advance":
# app/views/tenants/chats/_chat_list.html.slim:4
= link_to tenant_chat_path(chat), class: "...", id: "chat_list_item_#{chat.id}"
Решение: Добавить data: { turbo_action: "advance" }:
= link_to tenant_chat_path(chat), class: "...", id: "chat_list_item_#{chat.id}", data: { turbo_action: "advance" }
Файлы для изменения
Шаги для воспроизведения
- Авторизоваться в tenant dashboard
- Перейти на
/chats
- Кликнуть на чат в списке — URL не меняется
- Навести курсор на кнопку "Взять диалог" — курсор не pointer
- Кликнуть на кнопку "Взять диалог" — ничего не происходит
Среда
Связанные документы
- US-010: Tenant Chat Takeover
- TSD-011: Tenant Chat Takeover Technical Specification
Описание проблемы
На странице чатов (
/chats) обнаружено три UX-проблемы:1. Кнопка "Взять диалог" не работает 🔴 Critical
Ожидаемое поведение: При клике на кнопку "Взять диалог" чат переходит в режим менеджера.
Фактическое поведение: Ничего не происходит, кнопка остаётся без изменений.
Причина: Контроллер
Tenants::Chats::ManagerController#takeoverвсегда рендерит JSON ответ (строки 69-77), игнорируя turbo_stream запросы:При этом turbo_stream шаблон
app/views/tenants/chats/takeover.turbo_stream.slimсуществует, но не используется!Решение: Добавить
respond_toблок:2. Курсор над кнопкой не pointer 🟡 Minor
Ожидаемое поведение: При наведении на кнопку "Взять диалог" курсор должен меняться на pointer.
Фактическое поведение: Курсор остаётся стандартным.
Файл:
app/views/tenants/chats/_chat_controls.html.slim:8Решение: Добавить класс
cursor-pointerк кнопке.3. URL не обновляется при клике на чат 🟡 Medium
Ожидаемое поведение: При клике на чат в списке URL должен меняться на
/chats/123.Фактическое поведение: URL остаётся
/chatsили/chats?page=2, пользователь не может поделиться ссылкой на конкретный чат.Причина: В
link_toотсутствуетdata-turbo-action="advance":Решение: Добавить
data: { turbo_action: "advance" }:Файлы для изменения
app/controllers/tenants/chats/manager_controller.rb— добавитьrespond_toв takeover, release, create_messageapp/views/tenants/chats/_chat_controls.html.slim— добавитьcursor-pointerapp/views/tenants/chats/_chat_list.html.slim— добавитьdata-turbo-action="advance"Шаги для воспроизведения
/chatsСреда
Связанные документы