"use client"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { LayoutDashboard, FolderOpen, Clock, Calendar, Brain, BarChart3, Settings, Menu, X, } from "lucide-react"; import { useState, useEffect } from "react"; import { usePermissions } from "@/lib/hooks/usePermissions"; interface NavItem { name: string; href: string; icon: typeof LayoutDashboard; permission?: string; } const allNavigation: NavItem[] = [ { name: "Dashboard", href: "/dashboard", icon: LayoutDashboard }, { name: "Akten", href: "/cases", icon: FolderOpen }, { name: "Fristen", href: "/fristen", icon: Clock }, { name: "Termine", href: "/termine", icon: Calendar }, { name: "Berichte", href: "/berichte", icon: BarChart3 }, { name: "AI Analyse", href: "/ai/extract", icon: Brain, permission: "ai_extraction" }, { name: "Einstellungen", href: "/einstellungen", icon: Settings, permission: "manage_settings" }, ]; export function Sidebar() { const pathname = usePathname(); const [mobileOpen, setMobileOpen] = useState(false); const { can, isLoading: permLoading } = usePermissions(); const navigation = allNavigation.filter( (item) => !item.permission || permLoading || can(item.permission), ); // Close on route change useEffect(() => { setMobileOpen(false); }, [pathname]); // Close on escape useEffect(() => { function onKeyDown(e: KeyboardEvent) { if (e.key === "Escape") setMobileOpen(false); } document.addEventListener("keydown", onKeyDown); return () => document.removeEventListener("keydown", onKeyDown); }, []); const navContent = ( <>
KanzlAI
); return ( <> {/* Mobile hamburger button */} {/* Mobile overlay */} {mobileOpen && (
setMobileOpen(false)} /> )} {/* Mobile sidebar */} {mobileOpen && ( )} {/* Desktop sidebar */} ); }