Mapa de Stores Zustand — Completo
Stores do sistema (src/stores/)
Autenticação e Usuário
| Store | Arquivo | Dados principais |
|---|
| auth-store | auth-store.ts | user, token, isAuthenticated, clearAuth(), isRestrictedUser() |
| users-store | users-store.ts | lista de usuarios online |
Atendimento (core)
| Store | Arquivo | Dados principais |
|---|
| ticket-store | ticket-store.ts | PRINCIPAL — tickets, currentTicket, messages, updateTicket() |
| ticket-filter-store | ticket-filter-store.ts | filtros de ticket ativos |
| notification-store | notification-store.ts | notificacoes de tickets |
| urgency-store | urgency-store.ts | tickets urgentes |
| chat-draft-store | chat-draft-store.ts | rascunhos de mensagem por ticket |
Canais e Chamadas
| Store | Arquivo | Dados principais |
|---|
| whatsapp-store | whatsapp-store.ts | canais conectados, updateWhatsapp() |
| waba-call-store | waba-call-store.ts | estado de chamada WABA ativa |
| dialog360-call-store | dialog360-call-store.ts | chamada Dialog360 |
| gupshup-call-store | gupshup-call-store.ts | chamada Gupshup |
| private-call-store | private-call-store.ts | chamada privada WaVoIP |
| webphone-store | webphone-store.ts | visibilidade widget WaVoIP |
Chat e Comunicacao
| Store | Arquivo | Dados principais |
|---|
| chat-store | chat-store.ts | chat privado interno (mensagens, grupos, unread) |
| support-chat-store | support-chat-store.ts | chat de suporte do sistema |
UI e Experiencia
| Store | Arquivo | Dados principais |
|---|
| ui-store | ui-store.ts | preferencias UI (sidebar, modo monitor) |
| live-mode-store | live-mode-store.ts | modo ao vivo (blur de dados) |
| branding-store | branding-store.ts | logo, cores, sons de notificacao |
| audio-player-store | audio-player-store.ts | player de audio de mensagens |
Dados
| Store | Arquivo | Dados principais |
|---|
| contacts-store | contacts-store.ts | cache de contatos |
| activity-store | activity-store.ts | log de atividades |
Utilitário
| Store | Arquivo | Dados principais |
|---|
| reset-all-stores | reset-all-stores.ts | reseta todos os stores (logout) |
Padrão de uso
// Leitura seletiva (preferido — evita re-renders desnecessários)
const currentTicket = useTicketStore((s) => s.currentTicket);
const updateTicket = useTicketStore((s) => s.updateTicket);
// Leitura destrutiva (cuidado — re-render em qualquer mudança)
const { tickets, messages } = useTicketStore();
// Fora de componente React (em handlers/callbacks)
const { updateTicket } = useTicketStore.getState();
Fluxo de atualização de ticket via Socket
Backend emite socket → use-socket-tickets.ts → useTicketStore.updateTicket() → React re-render
Store crítico: ticket-store
O ticket-store é o coração do sistema.
Atualizado por:
- Socket events (mensagens em tempo real)
- Chamadas diretas de API (ao fechar, transferir, etc)
- Otimistic updates (tags, status)
Usar updateTicketInStore de dentro do ChatHeader:
const { updateTicket: updateTicketInStore } = useTicketStore();
// NÃO declarar duas vezes no mesmo componente!