import React, { useState, useRef, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import './Header.css'; const Header = () => { const [isDropdownOpen, setIsDropdownOpen] = useState(false); const [isSuporteCardOpen, setIsSuporteCardOpen] = useState(false); const [isChatOpen, setIsChatOpen] = useState(false); const [mensagem, setMensagem] = useState(''); const [mensagens, setMensagens] = useState([]); const [showLogoutModal, setShowLogoutModal] = useState(false); const navigate = useNavigate(); const chatInputRef = useRef(null); const mensagensContainerRef = useRef(null); useEffect(() => { if (isChatOpen && chatInputRef.current) { chatInputRef.current.focus(); } }, [isChatOpen]); useEffect(() => { if (mensagensContainerRef.current) { mensagensContainerRef.current.scrollTop = mensagensContainerRef.current.scrollHeight; } }, [mensagens]); // Funções de Logout (do seu código) const handleLogoutClick = () => { setShowLogoutModal(true); setIsDropdownOpen(false); }; const handleLogoutConfirm = async () => { try { const token = localStorage.getItem("token") || localStorage.getItem("authToken") || localStorage.getItem("userToken") || localStorage.getItem("access_token") || sessionStorage.getItem("token") || sessionStorage.getItem("authToken"); if (token) { const response = await fetch( "https://mock.apidog.com/m1/1053378-0-default/auth/v1/logout", { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}`, }, } ); if (response.status === 204) console.log("Logout realizado com sucesso"); else if (response.status === 401) console.log("Token inválido ou expirado"); else { try { const errorData = await response.json(); console.error("Erro no logout:", errorData); } catch { console.error("Erro no logout - status:", response.status); } } } clearAuthData(); navigate("/login"); } catch (error) { console.error("Erro durante logout:", error); clearAuthData(); navigate("/login"); } finally { setShowLogoutModal(false); } }; const clearAuthData = () => { ["token","authToken","userToken","access_token","user","auth","userData"].forEach(key => { localStorage.removeItem(key); sessionStorage.removeItem(key); }); if (window.caches) { caches.keys().then(names => { names.forEach(name => { if (name.includes("auth") || name.includes("api")) caches.delete(name); }); }); } }; const handleLogoutCancel = () => setShowLogoutModal(false); const handleProfileClick = () => { setIsDropdownOpen(!isDropdownOpen); if (isSuporteCardOpen) setIsSuporteCardOpen(false); if (isChatOpen) setIsChatOpen(false); }; const handleViewProfile = () => { navigate('/perfil'); setIsDropdownOpen(false); }; const handleSuporteClick = () => { setIsSuporteCardOpen(!isSuporteCardOpen); if (isDropdownOpen) setIsDropdownOpen(false); if (isChatOpen) setIsChatOpen(false); }; const handleCloseSuporteCard = () => { setIsSuporteCardOpen(false); }; const handleChatClick = () => { setIsChatOpen(true); setIsSuporteCardOpen(false); setMensagens([ { id: 1, texto: 'Olá! Bem-vindo ao suporte Mediconnect. Como podemos ajudar você hoje?', remetente: 'suporte', hora: new Date().toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' }) } ]); }; const handleCloseChat = () => { setIsChatOpen(false); setMensagem(''); }; const handleEnviarMensagem = (e) => { e.preventDefault(); if (mensagem.trim() === '') return; const novaMensagemUsuario = { id: Date.now(), texto: mensagem, remetente: 'usuario', hora: new Date().toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' }) }; setMensagens(prev => [...prev, novaMensagemUsuario]); setMensagem(''); setTimeout(() => { if (chatInputRef.current) { chatInputRef.current.focus(); } }, 0); setTimeout(() => { const respostas = [ 'Entendi sua dúvida. Vou verificar isso para você.', 'Obrigado pela informação. Estou analisando seu caso.', 'Pode me dar mais detalhes sobre o problema?', 'Já encaminhei sua solicitação para nossa equipe técnica.', 'Vou ajudar você a resolver isso!' ]; const respostaSuporte = { id: Date.now() + 1, texto: respostas[Math.floor(Math.random() * respostas.length)], remetente: 'suporte', hora: new Date().toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' }) }; setMensagens(prev => [...prev, respostaSuporte]); }, 1000); }; const SuporteCard = () => (
Entre em contato conosco através dos canais abaixo
Tem certeza que deseja encerrar a sessão?