// src/layouts/AppLayout.jsx
import { useState } from 'react';
import { Outlet, NavLink, useNavigate } from 'react-router-dom';
// ============================================================================
// COMPOSANT : MODAL DE CONFIRMATION DE DÉCONNEXION
// ============================================================================
const ConfirmLogoutModal = ({ isOpen, onClose, onConfirm }) => {
if (!isOpen) return null;
return (
DÉCONNEXION DU TERMINAL
Êtes-vous sûr de vouloir fermer la session sécurisée et quitter l'environnement cloud ?
);
};
// ============================================================================
// COMPOSANT PRINCIPAL : LAYOUT DU PORTAIL
// ============================================================================
export default function AppLayout() {
const navigate = useNavigate();
const [showLogoutModal, setShowLogoutModal] = useState(false);
// Ouvre simplement le modal
const handleLogoutClick = () => {
setShowLogoutModal(true);
};
// Exécute la vraie déconnexion
const confirmLogout = () => {
// Ici, tu pourras effacer les tokens (ex: localStorage.removeItem('token'))
setShowLogoutModal(false);
navigate('/login');
};
// --- DESIGN SYSTEM DU BUNKER ---
const sidebarStyle = {
width: '260px',
backgroundColor: '#121212', // Gris blindage
borderRight: '1px solid #222222',
height: '100vh',
display: 'flex',
flexDirection: 'column',
position: 'fixed',
top: 0,
left: 0,
fontFamily: 'monospace'
};
const mainContentStyle = {
marginLeft: '260px', // Laisse la place à la sidebar
minHeight: '100vh',
backgroundColor: '#050505', // Fond abyssal
color: '#E0E0E0',
padding: '40px'
};
// Fonction pour styliser le lien actif (en Cyan)
const getNavLinkStyle = ({ isActive }) => ({
display: 'block',
padding: '15px 25px',
color: isActive ? '#00E5FF' : '#888',
backgroundColor: isActive ? 'rgba(0, 229, 255, 0.05)' : 'transparent',
textDecoration: 'none',
borderLeft: isActive ? '4px solid #00E5FF' : '4px solid transparent',
transition: 'all 0.2s',
textTransform: 'uppercase',
letterSpacing: '1px',
fontSize: '0.9rem'
});
return (
{/* ========================================== */}
{/* BARRE LATÉRALE (SIDEBAR) */}
{/* ========================================== */}
{/* ========================================== */}
{/* ZONE DE CONTENU DYNAMIQUE */}
{/* ========================================== */}
{/* Le composant injecte le contenu de la page demandée sans recharger la sidebar */}
{/* MODAL DE DÉCONNEXION */}
setShowLogoutModal(false)}
onConfirm={confirmLogout}
/>
);
}