import React, { useState, useEffect } from "react"; import { Link, useNavigate } from "react-router-dom"; import TrocardePerfis from "./TrocardePerfis"; import MobileMenuToggle from "./MobileMenuToggle"; function Sidebar({ menuItems }) { const [isActive, setIsActive] = useState(true); const [openSubmenu, setOpenSubmenu] = useState(null); const [isMobile, setIsMobile] = useState(false); const [showLogoutModal, setShowLogoutModal] = useState(false); const navigate = useNavigate(); // Detecta se é mobile/tablet useEffect(() => { const checkScreenSize = () => { const mobile = window.innerWidth < 992; setIsMobile(mobile); setIsActive(!mobile); }; checkScreenSize(); window.addEventListener("resize", checkScreenSize); return () => window.removeEventListener("resize", checkScreenSize); }, []); const toggleSidebar = () => setIsActive(!isActive); const handleSubmenuClick = (submenuName) => setOpenSubmenu(openSubmenu === submenuName ? null : submenuName); const handleLogoutClick = () => setShowLogoutModal(true); 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 renderLink = (item) => { if (item.url && item.url.startsWith("/")) { return ( {item.icon && } {item.name} ); } return ( {item.icon && } {item.name} ); }; return ( <> {/* Toggle e backdrop para mobile */} {isMobile && } {isMobile && isActive && (
)} {/* Modal de Logout */} {showLogoutModal && (

Confirmar Logout

Tem certeza que deseja encerrar a sessão?

)} {/* Sidebar */} ); } export default Sidebar;