'use client'; import React, { useState, useRef, useEffect } from 'react'; import { Sidebar } from 'primereact/sidebar'; import { Button } from 'primereact/button'; import { Menubar } from 'primereact/menubar'; import { Menu } from 'primereact/menu'; import { Avatar } from 'primereact/avatar'; import { Badge } from 'primereact/badge'; import { Ripple } from 'primereact/ripple'; import { StyleClass } from 'primereact/styleclass'; import { useRouter } from 'next/navigation'; import { useDevAuth } from '../auth/DevAuthProvider'; import Link from 'next/link'; import { redirectToLogin } from '@/lib/auth'; interface AppLayoutProps { children: React.ReactNode; } export const AppLayout: React.FC = ({ children }) => { const [sidebarVisible, setSidebarVisible] = useState(false); const [profileMenuVisible, setProfileMenuVisible] = useState(false); const { user, logout, isAuthenticated } = useDevAuth(); const router = useRouter(); const profileMenuRef = useRef(null); // Menu items pour la sidebar const sidebarItems = [ { label: 'Tableau de Bord', icon: 'pi pi-home', command: () => router.push('/dashboard') }, { label: 'Chantiers', icon: 'pi pi-building', items: [ { label: 'Tous les chantiers', icon: 'pi pi-list', command: () => router.push('/chantiers') }, { label: 'Nouveau chantier', icon: 'pi pi-plus', command: () => router.push('/chantiers/nouveau') }, { label: 'Planning', icon: 'pi pi-calendar', command: () => router.push('/chantiers/planning') } ] }, { label: 'Clients', icon: 'pi pi-users', items: [ { label: 'Tous les clients', icon: 'pi pi-list', command: () => router.push('/clients') }, { label: 'Nouveau client', icon: 'pi pi-plus', command: () => router.push('/clients/nouveau') } ] }, { label: 'Devis & Factures', icon: 'pi pi-file-edit', items: [ { label: 'Devis', icon: 'pi pi-file', command: () => router.push('/devis') }, { label: 'Factures', icon: 'pi pi-receipt', command: () => router.push('/factures') }, { label: 'Nouveau devis', icon: 'pi pi-plus', command: () => router.push('/devis/nouveau') } ] }, { label: 'Matériel', icon: 'pi pi-cog', items: [ { label: 'Inventaire', icon: 'pi pi-list', command: () => router.push('/materiel') }, { label: 'Maintenance', icon: 'pi pi-wrench', command: () => router.push('/materiel/maintenance') }, { label: 'Réservations', icon: 'pi pi-calendar-plus', command: () => router.push('/materiel/reservations') } ] }, { label: 'Équipes', icon: 'pi pi-users', items: [ { label: 'Employés', icon: 'pi pi-user', command: () => router.push('/employes') }, { label: 'Équipes', icon: 'pi pi-users', command: () => router.push('/equipes') }, { label: 'Planning', icon: 'pi pi-calendar', command: () => router.push('/employes/planning') } ] }, { label: 'Fournisseurs', icon: 'pi pi-truck', items: [ { label: 'Tous les fournisseurs', icon: 'pi pi-list', command: () => router.push('/fournisseurs') }, { label: 'Nouveau fournisseur', icon: 'pi pi-plus', command: () => router.push('/fournisseurs/nouveau') } ] }, { label: 'Rapports', icon: 'pi pi-chart-bar', items: [ { label: 'Statistiques', icon: 'pi pi-chart-line', command: () => router.push('/rapports/statistiques') }, { label: 'Finances', icon: 'pi pi-euro', command: () => router.push('/rapports/finances') }, { label: 'Performance', icon: 'pi pi-chart-pie', command: () => router.push('/rapports/performance') } ] } ]; // Menu items pour le profil const profileItems = [ { label: 'Mon Profil', icon: 'pi pi-user', command: () => router.push('/profil') }, { label: 'Paramètres', icon: 'pi pi-cog', command: () => router.push('/parametres') }, { separator: true }, { label: 'Déconnexion', icon: 'pi pi-sign-out', command: () => { logout(); redirectToLogin(); } } ]; // Menu items pour la barre de navigation const navItems = [ { label: 'Accueil', icon: 'pi pi-home', command: () => router.push('/dashboard') }, { label: 'Chantiers', icon: 'pi pi-building', command: () => router.push('/chantiers') }, { label: 'Clients', icon: 'pi pi-users', command: () => router.push('/clients') }, { label: 'Matériel', icon: 'pi pi-cog', command: () => router.push('/materiel') } ]; const start = (
); const end = (
); if (!isAuthenticated) { return <>{children}; } return (
{/* Navigation principale */} {/* Sidebar */} setSidebarVisible(false)} className="layout-sidebar" modal={false} >
{sidebarItems.map((item, index) => (
{item.items ? (
{item.label}
{item.items.map((subItem, subIndex) => (
{subItem.label}
))}
) : (
{item.label}
)}
))}
{/* Contenu principal */}
{children}
); };