"use client"; import { ArrowRight, X } from "lucide-react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useEffect, useRef, useState } from "react"; import { EintragAktionen } from "@/components/ausrollen/EintragAktionen"; import { PublicZuweisenFormular } from "@/components/ausrollen/PublicZuweisenFormular"; import { VerwendungsZustand } from "@/components/ausrollen/VerwendungsZustand"; import { Button } from "@/components/ui/Button"; import { InnereBox } from "@/components/ui/Karte"; import { KENNUNG_TEXT, type MatrixHost, type MatrixSchluessel, type Zelle } from "@/lib/zuweisungsmatrix"; import type { ZielAuswahl } from "@/server/queries/ziele"; export type ZellenAuswahl = { readonly schluesselId: string; readonly hostId: string | null }; /** * Detail einer Matrixzelle (#025): was dort verwaltet ist, Entfernen und Zuweisen mit den * vorhandenen Aktionen. Ausgerollt wird weiter nur ueber den Dry-Run der Schluesselseite – * die Matrix plant, sie schreibt nichts auf Hosts. * * Die Zelle kommt aus den Props: nach `router.refresh()` zeigt der offene Dialog sofort den * neuen Stand, ohne eigenen Zustand nachzufuehren. */ export function ZellenDialog({ schluessel, host, zelle, darfZuweisen, darfPrivatEntfernen, auswahl, schliessen, }: { schluessel: MatrixSchluessel; host: MatrixHost | undefined; zelle: Zelle | undefined; darfZuweisen: boolean; darfPrivatEntfernen: boolean; auswahl?: ZielAuswahl; schliessen: () => void; }) { const dialog = useRef(null); const router = useRouter(); // Nach erfolgreichem Zuweisen ein frisches Formular – sonst schickt ein zweiter Klick // dieselbe Zuweisung noch einmal und erntet „bereits zugewiesen“. const [formularNr, setFormularNr] = useState(0); useEffect(() => { const element = dialog.current; if (element && !element.open) element.showModal(); }, []); const titel = host ? `${schluessel.name} auf ${host.name}` : schluessel.name; const vorauswahl = host && auswahl?.hosts.some((h) => h.id === host.id) ? `host:${host.id}` : undefined; const eintraege = zelle?.eintraege ?? []; return (

{schluessel.name}

{host ? ( <> auf {host.name} ) : ( "Einem Host oder einer Hostgruppe zuweisen" )}

Zum Schlüssel {host && ( Zum Host )}
{host && (
{eintraege.length === 0 ? (

Auf diesem Host ist der Schlüssel nicht zugewiesen.

) : ( eintraege.map((e) => (

{KENNUNG_TEXT[e.kennung]} {e.gruppe && <> „{e.gruppe.name}“}

Zielbenutzer {e.zielbenutzer}

{e.art === "public" ? (

Optionen {e.optionen ?? "–"}

) : (

Pfad {e.pfad}

)} {e.gruppe && darfZuweisen && (

Entfernen gilt für alle Hosts der Gruppe „{e.gruppe.name}“.

)}
)) )}
)} {darfZuweisen && auswahl && (

Public Key zuweisen

{ setFormularNr((n) => n + 1); router.refresh(); }} />
)} {darfZuweisen && (

Zuweisen und Entfernen ändern auf dem Host noch nichts – erst der Dry-Run auf der Schlüsselseite zeigt und schreibt die Änderung.

)}
); }