'use client'; import React, { useState, useEffect } from 'react'; import Sidebar from '@/components/Sidebar'; import { usePathname } from 'next/navigation'; import { useTranslations } from 'next-intl'; import Image from 'next/image'; import { LayoutDashboard, FileText, School, Users, Award, Calendar, Settings, LogOut, Menu, X, } from 'lucide-react'; import DropdownMenu from '@/components/DropdownMenu'; import Popup from '@/components/Popup'; import { FE_ADMIN_HOME_URL, FE_ADMIN_SUBSCRIPTIONS_URL, FE_ADMIN_STRUCTURE_URL, FE_ADMIN_DIRECTORY_URL, FE_ADMIN_GRADES_URL, FE_ADMIN_PLANNING_URL, FE_ADMIN_SETTINGS_URL, } from '@/utils/Url'; import { disconnect } from '@/app/actions/authAction'; import ProtectedRoute from '@/components/ProtectedRoute'; import { getGravatarUrl } from '@/utils/gravatar'; import Footer from '@/components/Footer'; import { getRightStr, RIGHTS } from '@/utils/rights'; import { useEstablishment } from '@/context/EstablishmentContext'; export default function Layout({ children }) { const t = useTranslations('sidebar'); const [isSidebarOpen, setIsSidebarOpen] = useState(false); const { profileRole, establishments, user, clearContext } = useEstablishment(); const sidebarItems = { admin: { id: 'admin', name: t('dashboard'), url: FE_ADMIN_HOME_URL, icon: LayoutDashboard, }, subscriptions: { id: 'subscriptions', name: t('subscriptions'), url: FE_ADMIN_SUBSCRIPTIONS_URL, icon: FileText, }, structure: { id: 'structure', name: t('structure'), url: FE_ADMIN_STRUCTURE_URL, icon: School, }, directory: { id: 'directory', name: t('directory'), url: FE_ADMIN_DIRECTORY_URL, icon: Users, }, grades: { id: 'grades', name: t('educational_monitoring'), url: FE_ADMIN_GRADES_URL, icon: Award, }, planning: { id: 'planning', name: t('events'), url: FE_ADMIN_PLANNING_URL, icon: Calendar, }, settings: { id: 'settings', name: t('settings'), url: FE_ADMIN_SETTINGS_URL, icon: Settings, }, }; const [isPopupVisible, setIsPopupVisible] = useState(false); const pathname = usePathname(); const currentPage = pathname.split('/').pop(); const headerTitle = sidebarItems[currentPage]?.name || t('dashboard'); const softwareName = 'N3WT School'; const softwareVersion = `${process.env.NEXT_PUBLIC_APP_VERSION}`; const handleDisconnect = () => { setIsPopupVisible(true); }; const confirmDisconnect = () => { setIsPopupVisible(false); disconnect(); clearContext(); }; const dropdownItems = [ { type: 'info', content: (
{user?.email || 'Utilisateur'}
{getRightStr(profileRole) || ''}
), }, { type: 'separator', content:
, }, { type: 'item', label: 'Déconnexion', onClick: handleDisconnect, icon: LogOut, }, ]; const toggleSidebar = () => { setIsSidebarOpen(!isSidebarOpen); }; useEffect(() => { // Fermer la sidebar quand on change de page sur mobile setIsSidebarOpen(false); }, [pathname]); return ( {/* Topbar */}
{headerTitle}
} items={dropdownItems} buttonClassName="" menuClassName="absolute right-0 mt-2 w-64 bg-white border border-gray-200 rounded shadow-lg" />
{/* Sidebar */}
{/* Overlay for mobile */} {isSidebarOpen && (
)} {/* Main container */}
{children}
{/* Footer */}