"use client"; import { useCallback, useEffect, useState } from "react"; import Link from "next/link"; import { FileText, LayoutDashboard, Package, Settings, Shield, ShoppingCart, Users, Wrench, } from "lucide-react"; import { api } from "@/lib/api"; import { hasPermission } from "@/lib/permissions"; import type { CurrentUser, PermissionName } from "@/types/rbac"; const menu = [ { icon: LayoutDashboard, name: "Dashboard", href: "/dashboard", permission: "dashboard.read", }, { icon: Users, name: "Benutzer", href: "/users", permission: "users.read", }, { icon: Shield, name: "Rollen & Rechte", href: "/roles", permission: "roles.read", }, { icon: Users, name: "Kunden", href: "/customers", permission: "customers.read", }, { icon: Wrench, name: "Reparaturen", href: "/repairs", }, { icon: Package, name: "Lager", href: "/inventory", }, { icon: ShoppingCart, name: "eBay", href: "/ebay", }, { icon: FileText, name: "Dokumente", href: "/documents", }, { icon: Settings, name: "Einstellungen", href: "/settings", }, ] satisfies Array<{ icon: typeof LayoutDashboard; name: string; href: string; permission?: PermissionName; }>; export default function Sidebar() { const [currentUser, setCurrentUser] = useState(null); const loadCurrentUser = useCallback(async () => { try { const response = await api.get("/me"); setCurrentUser(response.data); } catch { setCurrentUser(null); } }, []); useEffect(() => { queueMicrotask(() => { void loadCurrentUser(); }); }, [loadCurrentUser]); const visibleMenu = menu.filter((item) => ( !item.permission || hasPermission(currentUser, item.permission) )); return ( ); }