From 9a13e9c6fb054ff4e167c9c362f6619e122584d7 Mon Sep 17 00:00:00 2001 From: rever-tecnologia Date: Thu, 11 Dec 2025 15:39:03 -0300 Subject: [PATCH] fix: corrige chat abrindo automaticamente e zerando contador MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/components/chat/chat-widget.tsx | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/components/chat/chat-widget.tsx b/src/components/chat/chat-widget.tsx index ac80b5f..f7922b4 100644 --- a/src/components/chat/chat-widget.tsx +++ b/src/components/chat/chat-widget.tsx @@ -292,7 +292,8 @@ export function ChatWidget() { const inputRef = useRef(null) const fileInputRef = useRef(null) const dropAreaRef = useRef(null) - const prevSessionCountRef = useRef(0) + const prevSessionCountRef = useRef(-1) // -1 indica "ainda nao inicializado" + const hasRestoredStateRef = useRef(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)