Melhora chat ao vivo com anexos e eventos de timeline

- Reestrutura visual do widget de chat (header branco, status emerald)
- Adiciona sistema de anexos com upload e drag-and-drop
- Substitui select nativo por componente Select do shadcn
- Adiciona eventos LIVE_CHAT_STARTED e LIVE_CHAT_ENDED na timeline
- Traduz labels de chat para portugues (Chat iniciado/finalizado)
- Filtra CHAT_MESSAGE_ADDED da timeline (apenas inicio/fim aparecem)
- Restringe inicio de chat a tickets com responsavel atribuido
- Exibe duracao da sessao ao finalizar chat

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
esdrasrenan 2025-12-07 02:20:11 -03:00
parent 9e676b06f9
commit 3b1cde79df
11 changed files with 782 additions and 77 deletions

View file

@ -133,12 +133,12 @@ export function TicketChatPanel({ ticketId }: TicketChatPanelProps) {
actorId: viewerId as Id<"users">,
})
if (result.isNew) {
toast.success("Chat ao vivo iniciado! O cliente sera notificado.", { id: "live-chat" })
toast.success("Chat ao vivo iniciado! O cliente será notificado.", { id: "live-chat" })
} else {
toast.info("Ja existe uma sessao de chat ativa.", { id: "live-chat" })
toast.info("Já existe uma sessão de chat ativa.", { id: "live-chat" })
}
} catch (error: unknown) {
const message = error instanceof Error ? error.message : "Nao foi possivel iniciar o chat"
const message = error instanceof Error ? error.message : "Não foi possível iniciar o chat"
toast.error(message, { id: "live-chat" })
} finally {
setIsStartingChat(false)
@ -156,7 +156,7 @@ export function TicketChatPanel({ ticketId }: TicketChatPanelProps) {
})
toast.success("Chat ao vivo encerrado.", { id: "live-chat" })
} catch (error: unknown) {
const message = error instanceof Error ? error.message : "Nao foi possivel encerrar o chat"
const message = error instanceof Error ? error.message : "Não foi possível encerrar o chat"
toast.error(message, { id: "live-chat" })
} finally {
setIsEndingChat(false)
@ -180,7 +180,7 @@ export function TicketChatPanel({ ticketId }: TicketChatPanelProps) {
inputRef.current?.focus()
} catch (error) {
console.error(error)
toast.error("Nao foi possivel enviar a mensagem.")
toast.error("Não foi possível enviar a mensagem.")
} finally {
setIsSending(false)
}