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:
parent
f4880f32d2
commit
9a13e9c6fb
1 changed files with 13 additions and 4 deletions
|
|
@ -292,7 +292,8 @@ export function ChatWidget() {
|
||||||
const inputRef = useRef<HTMLTextAreaElement | null>(null)
|
const inputRef = useRef<HTMLTextAreaElement | null>(null)
|
||||||
const fileInputRef = useRef<HTMLInputElement | null>(null)
|
const fileInputRef = useRef<HTMLInputElement | null>(null)
|
||||||
const dropAreaRef = useRef<HTMLDivElement | 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
|
// Buscar sessões de chat ativas do agente
|
||||||
const activeSessions = useQuery(
|
const activeSessions = useQuery(
|
||||||
|
|
@ -371,14 +372,22 @@ export function ChatWidget() {
|
||||||
}
|
}
|
||||||
}, [activeTicketId, activeSessions])
|
}, [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(() => {
|
useEffect(() => {
|
||||||
if (!activeSessions) return
|
if (!activeSessions) return
|
||||||
const currentCount = activeSessions.length
|
const currentCount = activeSessions.length
|
||||||
const prevCount = prevSessionCountRef.current
|
const prevCount = prevSessionCountRef.current
|
||||||
|
|
||||||
// Se aumentou o número de sessões, é uma nova sessão - abrir o widget expandido
|
// Primeira execucao: apenas inicializar o ref, nao abrir automaticamente
|
||||||
if (currentCount > prevCount && prevCount >= 0) {
|
// 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)
|
setIsOpen(true)
|
||||||
setIsMinimized(false)
|
setIsMinimized(false)
|
||||||
// Selecionar a sessão mais recente (última da lista ou primeira se única)
|
// Selecionar a sessão mais recente (última da lista ou primeira se única)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue