fix: corrige chat abrindo automaticamente e zerando contador

O bug era causado pelo useEffect de auto-open que executava
na montagem inicial do componente, sobrescrevendo o estado
do localStorage (isMinimized) e fazendo o chat abrir expandido.

Isso causava o useEffect de markChatRead executar e zerar
o contador de mensagens nao lidas.

Correcao:
- prevSessionCountRef agora inicia como -1 (nao inicializado)
- Primeira execucao apenas inicializa o ref, sem abrir o chat
- Auto-open so acontece para sessoes NOVAS criadas APOS montagem
- Estado do localStorage (minimizado/expandido) e preservado

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
rever-tecnologia 2025-12-11 15:39:03 -03:00
parent f4880f32d2
commit 9a13e9c6fb

View file

@ -292,7 +292,8 @@ export function ChatWidget() {
const inputRef = useRef<HTMLTextAreaElement | null>(null)
const fileInputRef = useRef<HTMLInputElement | null>(null)
const dropAreaRef = useRef<HTMLDivElement | null>(null)
const prevSessionCountRef = useRef<number>(0)
const prevSessionCountRef = useRef<number>(-1) // -1 indica "ainda nao inicializado"
const hasRestoredStateRef = useRef<boolean>(false) // Flag para evitar sobrescrever estado do localStorage
// Buscar sessões de chat ativas do agente
const activeSessions = useQuery(
@ -371,14 +372,22 @@ export function ChatWidget() {
}
}, [activeTicketId, activeSessions])
// Auto-abrir widget quando uma nova sessão é iniciada
// Auto-abrir widget quando uma nova sessão é iniciada (apenas para sessoes NOVAS, nao na montagem inicial)
useEffect(() => {
if (!activeSessions) return
const currentCount = activeSessions.length
const prevCount = prevSessionCountRef.current
// Se aumentou o número de sessões, é uma nova sessão - abrir o widget expandido
if (currentCount > prevCount && prevCount >= 0) {
// Primeira execucao: apenas inicializar o ref, nao abrir automaticamente
// Isso preserva o estado do localStorage (se usuario tinha minimizado, mantem minimizado)
if (prevCount === -1) {
prevSessionCountRef.current = currentCount
hasRestoredStateRef.current = true
return
}
// Se aumentou o número de sessões APOS a montagem inicial, é uma nova sessão - abrir o widget expandido
if (currentCount > prevCount && hasRestoredStateRef.current) {
setIsOpen(true)
setIsMinimized(false)
// Selecionar a sessão mais recente (última da lista ou primeira se única)