'use client'; import { useState, useRef, useEffect } from 'react'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; import { Users, Building2, Package, FileText, BarChart3, Settings, type LucideIcon } from 'lucide-react'; interface AdminMenuItem { name: string; href: string; icon: LucideIcon; description: string; } const adminMenuItems: AdminMenuItem[] = [ { name: 'Utilisateurs', href: '/dashboard/admin/users', icon: Users, description: 'Gérer les utilisateurs et les permissions', }, { name: 'Organisations', href: '/dashboard/admin/organizations', icon: Building2, description: 'Gérer les organisations et entreprises', }, { name: 'Réservations', href: '/dashboard/admin/bookings', icon: Package, description: 'Consulter et gérer toutes les réservations', }, { name: 'Documents', href: '/dashboard/admin/documents', icon: FileText, description: 'Gérer les documents des organisations', }, { name: 'Tarifs CSV', href: '/dashboard/admin/csv-rates', icon: BarChart3, description: 'Importer et gérer les tarifs CSV', }, ]; export default function AdminPanelDropdown() { const [isOpen, setIsOpen] = useState(false); const dropdownRef = useRef(null); const pathname = usePathname(); // Close dropdown when clicking outside useEffect(() => { function handleClickOutside(event: MouseEvent) { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setIsOpen(false); } } if (isOpen) { document.addEventListener('mousedown', handleClickOutside); } return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, [isOpen]); // Close dropdown when route changes useEffect(() => { setIsOpen(false); }, [pathname]); const isActiveRoute = adminMenuItems.some(item => pathname.startsWith(item.href)); return (
{/* Trigger Button */} {/* Dropdown Menu */} {isOpen && (
{adminMenuItems.map(item => { const isActive = pathname.startsWith(item.href); const IconComponent = item.icon; return (
{item.name}
{item.description}
); })}
)}
); }