"use client"; import { useState, useTransition } from "react"; import { useRouter } from "next/navigation"; import type { UserRole } from "@prisma/client"; import { ShieldCheck } from "lucide-react"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { availableKitaRoles, kitaRoleLabels } from "@/lib/kita-roles"; import { changeKitaRoleAction } from "./actions"; const descriptions: Record = { ELTERN: "Eigener Haushalt, Verfügbarkeiten, Diensttausch und Kita-Alltag.", KOORDINATOR: "Zusätzlich Notdienstpläne, Alarme und Termine koordinieren.", ADMIN: "Familien, Team, Zugriffsrechte und alle Kita-Verwaltungsbereiche verwalten.", ERZIEHER: "Personalbereich, eigene Arbeitszeit und Anträge sowie Kinder-Abwesenheiten.", }; export type RolePerson = { id: string; name: string; role: UserRole; familyId: string | null; hasStaffProfile: boolean; }; export function RoleChangeButton({ person, ownAccount = false, }: { person: RolePerson; ownAccount?: boolean; }) { const router = useRouter(); const [open, setOpen] = useState(false); const [role, setRole] = useState(person.role); const [error, setError] = useState(""); const [pending, startTransition] = useTransition(); const roles = availableKitaRoles(person); const submit = () => { setError(""); startTransition(async () => { try { const result = await changeKitaRoleAction({ userId: person.id, role, expectedRole: person.role, }); if (result.error) { setError(result.error); return; } toast.success("Zugriffsrolle gespeichert."); setOpen(false); if (result.ownRoleChanged) router.replace("/dashboard"); router.refresh(); } catch { setError( "Die Änderung konnte nicht gespeichert werden. Bitte erneut versuchen.", ); } }); }; return ( <> { if (!pending) setOpen(next); }} > Zugriffsrechte für {person.name} Die Zugriffsrolle bestimmt, welche Bereiche diese Person nutzen und verwalten kann. Ämter wie „Vorstand“ werden separat vergeben.
Zugriffsrolle {roles.map((value) => ( ))}

{person.hasStaffProfile ? "Das Personalprofil mit Arbeitszeiten und Anträgen bleibt erhalten. Mit Kita-Admin-Rechten ist zusätzlich die Personalverwaltung zugänglich." : person.familyId ? "Haushalt, Kinder und eigene Dienste bleiben erhalten." : "Dieses Konto hat keinen eigenen Haushalt. Deshalb steht die Elternrolle nicht zur Auswahl."}

{ownAccount && role !== person.role ? (

Du änderst deine eigenen Rechte. Nach dem Speichern gelangst du zur Übersicht; der Zugang zur Verwaltung richtet sich dann nach der neuen Rolle.

) : null} {error ? (

{error}

) : null}
); }