import { useNavigate, useLocation, Outlet, Link as RouterLink } from 'react-router-dom';
import {
Box, Drawer, List, ListItem, ListItemButton, ListItemIcon, ListItemText,
AppBar, Toolbar, Typography, Divider, Avatar, Tooltip, IconButton, Link
} from '@mui/material';
import PeopleIcon from '@mui/icons-material/People';
import ArticleIcon from '@mui/icons-material/Article';
import NotificationsActiveIcon from '@mui/icons-material/NotificationsActive';
import CorporateFareIcon from '@mui/icons-material/CorporateFare';
import LogoutIcon from '@mui/icons-material/Logout';
import DashboardIcon from '@mui/icons-material/Dashboard';
import LocationOnIcon from '@mui/icons-material/LocationOn';
import CalendarMonthIcon from '@mui/icons-material/CalendarMonth';
import HomeIcon from '@mui/icons-material/Home';
import StoreIcon from '@mui/icons-material/Store';
import { useAuth } from '../context/AuthContext';
import ErrorBoundary from './ErrorBoundary';
const DRAWER_WIDTH = 240;
const navCategories = [
{
label: null,
items: [
{ label: 'Home', path: '/', icon: , roles: null },
],
},
{
label: 'Administration',
items: [
{ label: 'Users', path: '/users', icon: , roles: ['ADMIN'] },
{ label: 'Push', path: '/push', icon: , roles: ['ADMIN'] },
],
},
{
label: 'Reporter',
items: [
{ label: 'Neuigkeiten', path: '/posts', icon: , roles: ['ADMIN', 'REPORTER'] },
{ label: 'Kalendereinträge', path: '/calenderPosts', icon: , roles: ['ADMIN', 'REPORTER'] },
{ label: 'Sehenswürdigkeiten', path: '/attractions', icon: , roles: ['ADMIN', 'REPORTER'] },
],
},
{
label: 'Seiten',
items: [
{ label: 'Unternehmen', path: '/companies', icon: , roles: ['ADMIN', 'SITE_OWNER'] },
{ label: 'Organization', path: '/organizations', icon: , roles: ['ADMIN', 'SITE_OWNER'] },
],
},
];
const allNavItems = navCategories.flatMap((c) => c.items);
function getActiveLabel(pathname) {
const exact = allNavItems.find((i) => i.path === pathname);
if (exact) return exact.label;
const partial = allNavItems.find((i) => i.path !== '/' && pathname.startsWith(i.path));
return partial?.label ?? 'Admin';
}
export default function Layout() {
const navigate = useNavigate();
const location = useLocation();
const { logout, role } = useAuth();
const visibleCategories = navCategories
.map((cat) => ({
...cat,
items: cat.items.filter((item) => !item.roles || item.roles.includes(role)),
}))
.filter((cat) => cat.items.length > 0);
return (
{/* Logo */}
Admin Panel
{/* Navigation */}
{visibleCategories.map((cat, catIdx) => (
{cat.label && (
{cat.label}
)}
{cat.items.map((item) => (
navigate(item.path)}
sx={{ borderRadius: 2 }}
>
{item.icon}
))}
))}
{/* Logout */}
Impressum
Datenschutz
{/* Main content */}
{getActiveLabel(location.pathname)}
navigate('/profile')} sx={{ p: 0 }}>
A
);
}