/**
* Dashboard Layout
*
* Layout with sidebar navigation for dashboard pages
*/
'use client';
import { useAuth } from '@/lib/context/auth-context';
import Link from 'next/link';
import { usePathname, useRouter } from 'next/navigation';
import { useState, useEffect } from 'react';
import NotificationDropdown from '@/components/NotificationDropdown';
import AdminPanelDropdown from '@/components/admin/AdminPanelDropdown';
import Image from 'next/image';
import {
BarChart3,
Package,
FileText,
Search,
BookOpen,
Building2,
Users,
LogOut,
} from 'lucide-react';
export default function DashboardLayout({ children }: { children: React.ReactNode }) {
const { user, logout, loading, isAuthenticated } = useAuth();
const pathname = usePathname();
const router = useRouter();
const [sidebarOpen, setSidebarOpen] = useState(false);
useEffect(() => {
if (!loading && !isAuthenticated) {
router.replace(`/login?redirect=${encodeURIComponent(pathname)}`);
}
}, [loading, isAuthenticated, router, pathname]);
if (loading) {
return (
);
}
if (!isAuthenticated) {
return null;
}
const navigation = [
{ name: 'Tableau de bord', href: '/dashboard', icon: BarChart3 },
{ name: 'Réservations', href: '/dashboard/bookings', icon: Package },
{ name: 'Documents', href: '/dashboard/documents', icon: FileText },
{ name: 'Suivi', href: '/dashboard/track-trace', icon: Search },
{ name: 'Wiki Maritime', href: '/dashboard/wiki', icon: BookOpen },
{ name: 'Organisation', href: '/dashboard/settings/organization', icon: Building2 },
// ADMIN and MANAGER only navigation items
...(user?.role === 'ADMIN' || user?.role === 'MANAGER' ? [
{ name: 'Utilisateurs', href: '/dashboard/settings/users', icon: Users },
] : []),
];
const isActive = (href: string) => {
if (href === '/dashboard') {
return pathname === href;
}
return pathname.startsWith(href);
};
return (
{/* Mobile sidebar backdrop */}
{sidebarOpen && (
setSidebarOpen(false)}
/>
)}
{/* Sidebar */}
{/* Logo */}
{/* Navigation */}
{/* User section */}
{user?.firstName?.[0]}
{user?.lastName?.[0]}
{user?.firstName} {user?.lastName}
{user?.email}
{/* Main content */}
{/* Top bar */}
{navigation.find(item => isActive(item.href))?.name || 'Tableau de bord'}
{/* Notifications */}
{/* User Initials */}
{user?.firstName?.[0]}{user?.lastName?.[0]}
{/* Page content */}
{children}
);
}