"use client"; import { UserPlus, UserMinus, Mail, CircleSlash, Pencil } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Pill } from "@/components/mockup-ui"; import { assignFunction, unassignFunction, markFunctionUnfilled, inviteFunctionHolder, } from "@/server/actions/onboarding-team"; import { Popup } from "./popup"; export interface HolderView { id: string; userName: string | null; userEmail: string | null; invitedEmail: string | null; } export interface FunctionCardData { key: string; label: string; desc: string; domain: string | null; multi: boolean; soll: string | null; holders: HolderView[]; } /** * Bearbeiten einer ISMS-Funktion im Popup — Logik wie beim Risiken-Popup, nutzt die * bestehenden M1-Server-Actions (`assignFunction`, `unassignFunction`, * `markFunctionUnfilled`, `inviteFunctionHolder`). Auslöser ist der „Bearbeiten“-Button * auf der Funktionskarte (siehe step.tsx). */ export function FunctionEditDialog({ fn, users, canUse, canInvite, }: { fn: FunctionCardData; users: { id: string; name: string; email: string }[]; canUse: boolean; canInvite: boolean; }) { const filled = fn.holders.length > 0; const canAssignMore = canUse && (fn.multi || !filled); return ( } triggerVariant="outline" triggerSize="sm" title={fn.label} sub={fn.domain ? `Bereich: ${fn.domain}` : undefined} > {() => (

{fn.desc}

{fn.soll && (

Soll (zentral): {fn.soll}

)}
{filled ? ( besetzt{fn.multi ? ` (${fn.holders.length})` : ""} ) : ( unbesetzt )}
{/* Aktuelle Halter */}

Aktuelle Besetzung

{filled ? (
    {fn.holders.map((h) => (
  • {h.userName ?? h.invitedEmail ?? "—"} {h.userEmail && ( {h.userEmail} )} {h.invitedEmail && !h.userName && ( eingeladen )} {canUse && (
    )}
  • ))}
) : (

Noch niemand zugewiesen.

)}
{/* Zuweisen / Einladen / unbesetzt lassen */} {canAssignMore && (
{!canInvite && (

Einladen neuer Accounts erfordert das Recht „Benutzerverwaltung“.

)} {!filled && (
)}
)} {!canUse && (

Nur Lesezugriff — Änderungen erfordern das Recht „Onboarding nutzen“.

)}
)}
); }