iachat/app/javascript/dashboard/components
Rodribm10 4b0e8c314e feat(aggressive-alert): escalada amarelo/laranja/vermelho + toggles
Banner agressivo passa de uma notificação só ("status→open") pra
um sistema de escalada baseado em inatividade quando o cliente é
o último a falar.

Níveis:
- 5 min sem resposta  → AMARELO, sem som
- 15 min sem resposta → LARANJA, beep 1x + notificação do SO
- 28 min sem resposta → VERMELHO pulsante + som em loop infinito
- status→open (reabertura) → VERMELHO imediato

Por conversa, o banner mostra um item com nome do contato, inbox
e contexto ("reabriu agora" / "15 min sem resposta"). Headline
grande e explicação clara sobre como limpa.

Comportamento do × dismiss:
- Antes: apagava o alerta de vez. Agente podia "fingir que viu".
- Agora: esconde temporariamente. Volta quando escalar (próximo
  threshold) ou nova mensagem. A única forma de LIMPAR de vez é
  responder o cliente (tracker detecta msg outgoing do User ou
  AgentBot e chama dismissForReply).

Permissões:
- account.settings.aggressive_alert_enabled (master switch admin)
- user.ui_settings.aggressive_alert_enabled (toggle do próprio agente)
- Default true pros dois; um false em qualquer bloqueia alertas.

Settings UI:
- Conta → General: novo card "Alerta agressivo (master switch)"
- Perfil do usuário: novo card "Receber alertas agressivos"

Arquivos:
- helper/aggressiveAlert.js: multi-level state, hide vs dismiss-for-reply
- helper/inactivityAlertTracker.js: timer único, thresholds declarativos
- helper/actionCable.js: hook em onMessageCreated (feed tracker) +
  isAggressiveAlertEnabled() + limpa tracker em status_changed != open
- components/app/AggressiveConversationBanner.vue: variantes de cor,
  headline grande, explanation, × temp-hide
- account.rb + accounts_controller.rb: store_accessor + permitted
- settings UI components (account + profile): switches auto-persist

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 20:49:24 -03:00
..
Accordion chore: Update theme colors and add new Inter variable fonts (#13347) 2026-01-28 14:36:04 -08:00
app feat(aggressive-alert): escalada amarelo/laranja/vermelho + toggles 2026-04-23 20:49:24 -03:00
auth feat: Add the frontend support for MFA (#12372) 2025-09-18 21:16:06 +05:30
base feat: Eslint rules (#9839) 2024-08-05 14:02:16 +05:30
buttons feat: Conversation workflows(EE) (#13040) 2026-01-27 11:36:20 +04:00
copilot fix: remove enterprise-only restriction from Captain in self-hosted 2026-02-25 18:58:57 -03:00
table chore: Remove older UI (#11720) 2025-07-01 09:43:44 +05:30
ui feat: Refactor reports filters (#13443) 2026-02-06 18:22:30 +05:30
widgets feat(retention): UI layer — badge, filters, cohort matrix, KPI dashboard 2026-04-22 10:30:19 -03:00
ChannelSelector.vue feat: Update Inbox/Team creation UI (#12305) 2025-09-02 14:11:38 +05:30
ChatList.vue feat: Allow removing labels via conversation context menu (#13525) 2026-02-17 13:30:55 +05:30
ChatListHeader.vue chore: Update theme colors and add new Inter variable fonts (#13347) 2026-01-28 14:36:04 -08:00
Code.vue feat(zapi): Z-API integration (#115) 2025-10-15 16:23:04 -03:00
ConversationItem.vue feat: Allow removing labels via conversation context menu (#13525) 2026-02-17 13:30:55 +05:30
CustomAttribute.vue fix: Issues with custom attributes in conversation sidebar (#11476) 2025-05-16 15:22:18 +05:30
CustomBrandPolicyWrapper.vue style: apply fixes for eslint issues [cw-3590] (#10210) 2024-10-03 15:02:12 +05:30
CustomSnoozeModal.vue chore: Update buttons in conversation screens(#11132) 2025-03-21 14:47:28 +05:30
FormSection.vue chore: Remove older UI (#11720) 2025-07-01 09:43:44 +05:30
index.js chore: Replace Thumbnail with Avatar (#12119) 2025-08-11 15:47:17 +05:30
IntersectionObserver.vue feat: Vite + vue 3 💚 (#10047) 2024-10-02 00:36:30 -07:00
Modal.vue chore: Update buttons in conversation screens(#11132) 2025-03-21 14:47:28 +05:30
ModalHeader.vue chore: Remove older UI (#11720) 2025-07-01 09:43:44 +05:30
NetworkNotification.vue chore: Update buttons in conversation screens - 2 (#11134) 2025-03-21 21:54:54 +05:30
policy.vue feat: Add visibility checks for installation types (#10773) 2025-02-21 14:48:31 -08:00
SettingsSection.vue chore: Remove older UI (#11720) 2025-07-01 09:43:44 +05:30
Snackbar.vue fix: Snackbar notifications hidden behind modal dialogs (#11616) 2025-05-29 12:49:38 +05:30
SnackbarContainer.vue fix: Snackbar notifications hidden behind modal dialogs (#11616) 2025-05-29 12:49:38 +05:30