import { useEffect, useRef } from 'react'; import { useAuth } from '../contexts/AuthContext.jsx'; import './NavDrawer.css'; const NAV_ICON = { messages: , schedules: , users: , groups: , branding: , settings: , }; export default function NavDrawer({ open, onClose, onMessages, onGroupManager, onBranding, onSettings, onUsers, features = {} }) { const { user } = useAuth(); const drawerRef = useRef(null); const isAdmin = user?.role === 'admin'; // Close on outside click useEffect(() => { if (!open) return; const handler = (e) => { if (drawerRef.current && !drawerRef.current.contains(e.target)) onClose(); }; document.addEventListener('mousedown', handler); return () => document.removeEventListener('mousedown', handler); }, [open, onClose]); // Close on Escape useEffect(() => { if (!open) return; const handler = (e) => { if (e.key === 'Escape') onClose(); }; window.addEventListener('keydown', handler); return () => window.removeEventListener('keydown', handler); }, [open, onClose]); const item = (icon, label, onClick, disabled = false) => ( ); return ( <> {/* Backdrop */}
{/* Drawer */}
Menu
{item(NAV_ICON.messages, 'Messages', onMessages)} {item(NAV_ICON.schedules, 'Schedules', () => {}, true)} {isAdmin && ( <>
Admin
{item(NAV_ICON.users, 'User Manager', onUsers)} {features.groupManager && item(NAV_ICON.groups, 'Group Manager', onGroupManager)} {features.branding && item(NAV_ICON.branding, 'Branding', onBranding)} {item(NAV_ICON.settings, 'Settings', onSettings)} )}
); }