From efa723dbe3235f4e5b72ee8c175d6094112e592a Mon Sep 17 00:00:00 2001 From: Caio Miguel Lima Nunes Date: Tue, 7 Oct 2025 22:22:18 -0300 Subject: [PATCH] implementacao do sistema de logout com modal e API --- src/components/Sidebar.jsx | 373 +++++++++++++++++++++++++------------ 1 file changed, 253 insertions(+), 120 deletions(-) diff --git a/src/components/Sidebar.jsx b/src/components/Sidebar.jsx index e1cc85a..b211975 100644 --- a/src/components/Sidebar.jsx +++ b/src/components/Sidebar.jsx @@ -1,138 +1,271 @@ import React, { useState } from "react"; -import { Link } from "react-router-dom"; -import menuItems from "../data/sidebar-items-medico.json"; // Use "sidebar-items-secretaria.json" para secretaria e "sidebar-items-adm.json" para ADM -import TrocardePerfis from "./TrocardePerfis"; +import { Link, useNavigate } from "react-router-dom"; +import menuItems from "../data/sidebar-items-medico.json"; +import TrocardePerfis from "./TrocardePerfis"; +function Sidebar({ menuItems }) { + const [isActive, setIsActive] = useState(true); + const [openSubmenu, setOpenSubmenu] = useState(null); + const [showLogoutModal, setShowLogoutModal] = useState(false); + const navigate = useNavigate(); -// 1. Recebe 'menuItems' e 'onLogout' como props -function Sidebar({ menuItems, onLogout }) { - const [isActive, setIsActive] = useState(true); - const [openSubmenu, setOpenSubmenu] = useState(null); + const toggleSidebar = () => { + setIsActive(!isActive); + }; - const toggleSidebar = () => { - setIsActive(!isActive); - }; + const handleSubmenuClick = (submenuName) => { + setOpenSubmenu(openSubmenu === submenuName ? null : submenuName); + }; - const handleSubmenuClick = (submenuName) => { - setOpenSubmenu(openSubmenu === submenuName ? null : submenuName); - }; + const handleLogoutClick = () => { + setShowLogoutModal(true); + }; - const renderLink = (item) => { - // Links internos (rotas do React Router) - if (item.url && item.url.startsWith("/")) { - return ( - - {item.icon && } - {item.name} - - ); - } + 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'); - // Links externos - return ( - - {item.icon && } - {item.name} - - ); - }; + 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}` + } + }); - return ( - + + ); } export default Sidebar; \ No newline at end of file