"use client"; import Link from 'next/link'; import { usePathname } from 'next/navigation'; import { LayoutDashboard, Users, MessageSquare, BookOpen, LogOut, ShieldCheck, ShieldAlert, BarChart3, Flag, CreditCard, Settings, Globe, FileText, Tags, Image as ImageIcon } from 'lucide-react'; import { useState, useEffect } from 'react'; import { getPendingVerificationCount } from '@/app/actions/business'; import { getCurrentAdminAction, logoutAdminAction } from '@/app/actions/auth'; import type { AdminSessionPayload } from '@/lib/session'; import { hasTabPermission, ADMIN_ROLES, type AdminRoleType } from '@/lib/permissions'; const ALL_MENU_ITEMS = [ { id: 'dashboard', name: 'Dashboard', icon: LayoutDashboard, href: '/dashboard' }, { id: 'team', name: 'Équipe & Rôles', icon: ShieldAlert, href: '/team' }, { id: 'users', name: 'Utilisateurs', icon: Users, href: '/users' }, { id: 'metrics', name: 'Metrics & Analytics', icon: BarChart3, href: '/metrics' }, { id: 'comments', name: 'Commentaires', icon: MessageSquare, href: '/comments' }, { id: 'moderation', name: 'Modération', icon: Flag, href: '/moderation' }, { id: 'actualites', name: 'Actualités & Interviews', icon: BookOpen, href: '/actualites' }, { id: 'plans', name: 'Forfaits & Services', icon: CreditCard, href: '/plans' }, { id: 'taxonomies', name: 'Taxonomies', icon: Tags, href: '/taxonomies' }, { id: 'countries', name: 'Pays', icon: Globe, href: '/countries' }, { id: 'slides', name: 'Bannière', icon: ImageIcon, href: '/slides' }, { id: 'legal', name: 'Documents Légaux', icon: FileText, href: '/legal' }, { id: 'settings', name: 'Configuration', icon: Settings, href: '/settings' }, ]; export default function Sidebar() { const pathname = usePathname(); const [pendingCount, setPendingCount] = useState(0); const [adminUser, setAdminUser] = useState(null); const [isLoggingOut, setIsLoggingOut] = useState(false); useEffect(() => { getPendingVerificationCount().then(setPendingCount); }, [pathname]); // Refresh on navigation useEffect(() => { getCurrentAdminAction().then(setAdminUser); }, []); const handleLogout = async () => { try { setIsLoggingOut(true); await logoutAdminAction(); window.location.href = '/login'; } catch (err) { console.error('Logout error:', err); setIsLoggingOut(false); } }; const visibleMenuItems = ALL_MENU_ITEMS.filter((item) => { if (!adminUser) return true; return hasTabPermission(adminUser.adminRole, adminUser.permissions, item.id); }); const roleMeta = adminUser ? ADMIN_ROLES[adminUser.adminRole as AdminRoleType] : null; return (

AfroAdmin

Backoffice
{adminUser && (
{adminUser.name ? adminUser.name.charAt(0).toUpperCase() : 'A'}

{adminUser.name || 'Admin'}

{adminUser.email}

{roleMeta?.badgeLabel || adminUser.adminRole}
)}
); }