"use client"; import Link from "next/link"; import { usePathname, useRouter } from "next/navigation"; import { useState } from "react"; import { LogoMitSchriftzug } from "@/components/Logo"; interface MenuEintrag { href: string; titel: string; icon: string; badge?: { text: string; klasse: string }; } export function Sidebar({ hostsAnzahl, offeneRechnungspunkte, offeneWarnungen, benutzer, }: { hostsAnzahl: number; offeneRechnungspunkte: number; offeneWarnungen: number; benutzer: string; }) { const pathname = usePathname(); const router = useRouter(); const [suche, setSuche] = useState(""); const haupt: MenuEintrag[] = [ { href: "/", titel: "Dashboard", icon: "bi-speedometer2" }, { href: "/hosts", titel: "Hosts", icon: "bi-hdd-stack", badge: { text: String(hostsAnzahl), klasse: "pl-bg-info" }, }, { href: "/kunden", titel: "Kunden", icon: "bi-people" }, { href: "/rechnungen", titel: "Rechnungen", icon: "bi-receipt", badge: offeneRechnungspunkte > 0 ? { text: String(offeneRechnungspunkte), klasse: "pl-bg-danger" } : undefined, }, { href: "/jahresbahn", titel: "Jahresbahn", icon: "bi-calendar3-range" }, { href: "/warnungen", titel: "Warnungen", icon: "bi-bell", badge: offeneWarnungen > 0 ? { text: String(offeneWarnungen), klasse: "pl-bg-warning" } : undefined, }, ]; const einstellungen: MenuEintrag[] = [ { href: "/einstellungen/tokens", titel: "Agent-Tokens", icon: "bi-key" }, { href: "/einstellungen/warnregeln", titel: "Warnregeln", icon: "bi-shield-exclamation" }, { href: "/einstellungen/benachrichtigungen", titel: "Benachrichtigungen", icon: "bi-bell" }, { href: "/einstellungen/audit", titel: "Protokoll", icon: "bi-list-check" }, { href: "/einstellungen/system", titel: "System", icon: "bi-sliders" }, ]; function istAktiv(href: string) { if (href === "/") return pathname === "/"; return pathname === href || pathname.startsWith(`${href}/`); } function sucheAbsenden(event: React.FormEvent) { event.preventDefault(); if (suche.trim().length > 0) { router.push(`/hosts?q=${encodeURIComponent(suche.trim())}`); } } function eintrag(item: MenuEintrag) { return (
{item.titel}
{item.badge ? ( {item.badge.text} ) : null}