import { useLocation, useNavigate } from 'react-router-dom'; import { useSelector } from 'react-redux'; import { Drawer, List, ListItemButton, ListItemIcon, ListItemText, Toolbar, Box, Typography, } from '@mui/material'; import DashboardIcon from '@mui/icons-material/Dashboard'; import DescriptionIcon from '@mui/icons-material/Description'; import AddCircleIcon from '@mui/icons-material/AddCircle'; import AdminPanelSettingsIcon from '@mui/icons-material/AdminPanelSettings'; import AssignmentIcon from '@mui/icons-material/Assignment'; import PeopleIcon from '@mui/icons-material/People'; import { selectSidebarOpen } from '../app/slices/uiSlice'; import { selectUser } from '../app/slices/authSlice'; import type { RootState } from '../app/store'; import { DRAWER_WIDTH } from '../constants'; const dispatcherNav = [ { label: 'Dashboard', path: '/', icon: }, { label: 'My Proposals', path: '/proposals', icon: }, { label: 'New Proposal', path: '/proposals/new', icon: }, ]; const adminNav = [ { label: 'Admin Queue', path: '/admin', icon: }, { label: 'All Proposals', path: '/admin/proposals', icon: }, ]; const sysadminNav = [ { label: 'Users', path: '/admin/users', icon: }, ]; const ALL_NAV_PATHS = new Set( [...dispatcherNav, ...adminNav, ...sysadminNav].map(n => n.path) ); function isNavActive(pathname: string, itemPath: string): boolean { if (pathname === itemPath) return true; if (ALL_NAV_PATHS.has(pathname)) return false; if (itemPath === '/' || itemPath === '/admin') return false; return pathname.startsWith(itemPath + '/'); } export default function Sidebar() { const navigate = useNavigate(); const location = useLocation(); const open = useSelector((state: RootState) => selectSidebarOpen(state)); const user = useSelector((state: RootState) => selectUser(state)); const isAdmin = user?.role === 'Admin' || user?.role === 'SysAdmin'; const isSysAdmin = user?.role === 'SysAdmin'; const navItems = dispatcherNav; return ( Proposals {navItems.map((item) => ( navigate(item.path)} sx={{ py: 1 }} > {item.icon} ))} {isAdmin && ( <> Admin {adminNav.map((item) => ( navigate(item.path)} sx={{ py: 1 }} > {item.icon} ))} {isSysAdmin && sysadminNav.map((item) => ( navigate(item.path)} sx={{ py: 1 }} > {item.icon} ))} )} {user && ( {user.displayName} {user.role} )} ); }