import React, { useState, useEffect } from "react"; import { Link, useNavigate } from "react-router-dom"; import MobileMenuToggle from "./MobileMenuToggle"; import ToggleSidebar from "./ToggleSidebar"; import { useAuth } from "./utils/AuthProvider"; import PacienteItems from "../data/sidebar-items-paciente.json" import DoctorItems from "../data/sidebar-items-medico.json" import admItems from "../data/sidebar-items-adm.json" import SecretariaItems from "../data/sidebar-items-secretaria.json" import FinanceiroItems from "../data/sidebar-items-financeiro.json" import { UserInfos } from "./utils/Functions-Endpoints/General"; 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(); const [roleUser, setRoleUser] = useState([]) const {getAuthorizationHeader} = useAuth(); const authHeader = getAuthorizationHeader(); // Detecta se é mobile/tablet useEffect(() => { const checkScreenSize = () => { const mobile = window.innerWidth < 992; setIsMobile(mobile); setIsActive(!mobile); }; const fetchInfoUser = async () => { const InfoUser = await UserInfos(authHeader); console.log(InfoUser.roles, "dados") setRoleUser(InfoUser.roles) } fetchInfoUser() 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); }); }); } }; useEffect(() => { if(roleUser.includes("admin")){ console.log("tem") } console.log(roleUser) }, [roleUser]) 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;