"use client"; import { useState, useTransition } from "react"; import { Plus, X, Shield, Trash2 } from "lucide-react"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { createDuty, assignDuty, removeDutyAssignment, deleteDuty } from "./duty-actions"; type DutyWithAssignments = { id: string; name: string; assignments: { id: string; }[]; }; type DutyUser = { id: string; firstName: string; lastName: string; }; type UserDutyAssignment = { id: string; dutyId: string; duty: { name: string; }; }; export function DutyManager({ user, allDuties, userAssignments, }: { user: DutyUser; allDuties: DutyWithAssignments[]; userAssignments: UserDutyAssignment[]; }) { const [open, setOpen] = useState(false); const [isPending, startTransition] = useTransition(); const handleCreateDuty = (formData: FormData) => { const name = formData.get("name") as string; if (!name) return; startTransition(async () => { const res = await createDuty({ name }); if (res.error) { toast.error(res.error); } else { toast.success("Amt erstellt."); } }); }; const handleAssign = (dutyId: string) => { startTransition(async () => { const res = await assignDuty(user.id, dutyId); if (res.error) { toast.error(res.error); } else { toast.success("Amt zugewiesen."); } }); }; const handleRemove = (assignmentId: string) => { startTransition(async () => { const res = await removeDutyAssignment(assignmentId); if (res.error) { toast.error(res.error); } else { toast.success("Zuweisung entfernt."); } }); }; const handleDeleteDuty = (dutyId: string) => { startTransition(async () => { const res = await deleteDuty(dutyId); if (res.error) { toast.error(res.error); } else { toast.success("Amt komplett gelöscht."); } }); }; const unassignedDuties = allDuties.filter( (d) => !userAssignments.some((a) => a.dutyId === d.id) ); return ( Ämter verwalten Ämter und Dienste für {user.firstName} {user.lastName}.
{/* Current Assignments */}

Aktuelle Ämter

{userAssignments.length === 0 ? (

Keine Ämter zugewiesen.

) : (
{userAssignments.map((assignment) => ( {assignment.duty.name} ))}
)}
{/* Assign new duty */}

Vorhandenes Amt zuweisen

{unassignedDuties.length === 0 ? (

Keine weiteren Ämter verfügbar.

) : (
{unassignedDuties.map((duty) => ( handleAssign(duty.id)} > {duty.name} {/* Only show delete if no one is assigned to it across the entire DB */} {duty.assignments.length === 0 && ( )} ))}
)}
{/* Create new duty */}

Neues Amt anlegen

); }