import { Plus, Search, Users } from "lucide-react"; import type { Metadata } from "next"; import Link from "next/link"; import { Badge } from "@/components/ui/Badge"; import { Button } from "@/components/ui/Button"; import { Feld } from "@/components/ui/Feld"; import { Karte } from "@/components/ui/Karte"; import { Leerzustand } from "@/components/ui/Leerzustand"; import { Seitenkopf } from "@/components/ui/Seitenkopf"; import { Tabelle, TabellenZeile, TabellenZelle } from "@/components/ui/Tabelle"; import { darf } from "@/server/auth/rechte"; import { sitzungErforderlich } from "@/server/auth/sitzungspflicht"; import { personenListe } from "@/server/queries/personen"; export const metadata: Metadata = { title: "Personen" }; type Suchparameter = Promise>; function einzeln(wert: string | string[] | undefined): string { return (Array.isArray(wert) ? wert[0] : wert)?.trim() ?? ""; } function Anzahl({ n }: { n: number }) { return n === 0 ? keine : <>{n}; } /** Personenliste (#013): wem welche Schlüssel gehören. */ export default async function Personen({ searchParams }: { searchParams: Suchparameter }) { // Jede Seite prueft selbst; die Huelle ist nur das zweite Netz (CLAUDE.md). const { benutzer } = await sitzungErforderlich("lesen", "/personen"); const q = einzeln((await searchParams)["q"]); const personen = await personenListe({ q }); const verwalten = darf(benutzer.rolle, "schluesselVerwalten"); const anlegen = verwalten && ( ); return (
{q && ( )}
{personen.length === 0 ? ( } titel={q ? "Keine Treffer" : "Noch keine Personen"} text={ q ? "Keine Person passt zur Suche." : "Personen entstehen hier oder von selbst, wenn jemand unter „Meine Schlüssel“ einen Key hinterlegt." } aktion={q ? : anlegen} /> ) : (
    {personen.map((p) => (
  • {p.name} {p.email && {p.email}} {p.organisation && {p.organisation}} {p.benutzer && Konto verknüpft} Aktive Schlüssel:
  • ))}
{personen.map((p) => ( {p.name} {p.email ?? "–"} {p.organisation ?? –} {p.benutzer ? p.benutzer.name : –} ))}
)}
); }