'use client' import Link from 'next/link' import { usePathname } from 'next/navigation' import { useTheme } from 'next-themes' import { LogOut, Moon, Shield, Sun } from 'lucide-react' import { signOut } from 'next-auth/react' import type { Rolle } from '@/generated/prisma/enums' import { ROLLEN_NAME, istAdmin } from '@/lib/rollen' import { cn } from '@/lib/utils' import { Button } from '@/components/ui/button' type Eintrag = { pfad: string; name: string; nurAdmin?: boolean; zaehler?: number } export function Kopfleiste({ name, email, rolle, instanzName, inbox = 0, }: { name: string email: string rolle: Rolle instanzName: string /** Anzahl noch nicht einsortierter Aufgaben. */ inbox?: number }) { const EINTRAEGE: Eintrag[] = [ { pfad: '/', name: 'Start' }, { pfad: '/inbox', name: 'Inbox', zaehler: inbox }, { pfad: '/aufgaben', name: 'Aufgaben' }, { pfad: '/projekte', name: 'Projekte' }, { pfad: '/ideen', name: 'Ideen' }, { pfad: '/bereiche', name: 'Bereiche' }, { pfad: '/kalenderkonten', name: 'Kalender' }, { pfad: '/einstellungen', name: 'Einstellungen' }, { pfad: '/verwaltung/protokoll', name: 'Protokoll', nurAdmin: true }, ] const pfad = usePathname() const sichtbar = EINTRAEGE.filter((e) => !e.nurAdmin || istAdmin(rolle)) return (
{/* Bewusst eine einzige Zeile auf allen Breiten: Wird es eng, scrollt die Navigation waagerecht, statt umzubrechen und den Namen der Anwendung in die zweite Zeile zu drängen. */}
Planer
{name}
) } function FarbschemaKnopf() { const { resolvedTheme, setTheme } = useTheme() // Welches Symbol gilt, entscheidet die dark-Klasse und damit CSS. next-themes // setzt sie schon vor der Hydratation, deshalb braucht es hier weder einen // Effekt noch einen Zustand – und es blitzt nichts auf. return ( ) }