import React, { useState, useEffect } from 'react'; import { Link, useLocation, useNavigate } from 'react-router-dom'; import { useAuth } from '../context/AuthContext'; import api from '../utils/api'; import { Badge } from './ui/badge'; import { LayoutDashboard, UserCog, Users, CheckCircle, CreditCard, Calendar, Shield, Settings, ChevronLeft, ChevronRight, LogOut, Menu } from 'lucide-react'; const AdminSidebar = ({ isOpen, onToggle, isMobile }) => { const location = useLocation(); const navigate = useNavigate(); const { user, logout } = useAuth(); const [pendingCount, setPendingCount] = useState(0); // Fetch pending approvals count useEffect(() => { const fetchPendingCount = async () => { try { const response = await api.get('/admin/users'); const pending = response.data.filter(u => ['pending_approval', 'pre_approved'].includes(u.status) ); setPendingCount(pending.length); } catch (error) { console.error('Failed to fetch pending count:', error); } }; fetchPendingCount(); // Refresh count every 30 seconds const interval = setInterval(fetchPendingCount, 30000); return () => clearInterval(interval); }, []); const handleLogout = () => { logout(); navigate('/login'); }; const navItems = [ { name: 'Dashboard', icon: LayoutDashboard, path: '/admin', disabled: false }, { name: 'Staff', icon: UserCog, path: '/admin/staff', disabled: false }, { name: 'Members', icon: Users, path: '/admin/members', disabled: false }, { name: 'Approvals', icon: CheckCircle, path: '/admin/approvals', disabled: false, badge: pendingCount }, { name: 'Plans', icon: CreditCard, path: '/admin/plans', disabled: false }, { name: 'Events', icon: Calendar, path: '/admin/events', disabled: true }, { name: 'Roles', icon: Shield, path: '/admin/roles', disabled: false, superadminOnly: true } ]; // Filter nav items based on user role const filteredNavItems = navItems.filter(item => { if (item.superadminOnly && user?.role !== 'superadmin') { return false; } return true; }); const isActive = (path) => { if (path === '/admin') { return location.pathname === '/admin'; } return location.pathname.startsWith(path); }; return ( <> {/* Sidebar */} ); }; export default AdminSidebar;