"use client"; import { useRouter } from "next/navigation"; import { useState } from "react"; import { createPosition } from "@/actions/positions"; import { Button } from "@/components/ui/Button"; import { SelectField, TextField } from "@/components/ui/Field"; import { Modal } from "@/components/ui/Modal"; import { useToast } from "@/components/ui/Toast"; import { todayIso } from "@/lib/format"; export type UnitOption = { id: string; name: string; unit_type: string; depth: number; hasChief: boolean }; // Eine Planstelle gehört zu genau einer Organisationseinheit — mehr braucht // es nicht. Vorher musste hier eine vorgesetzte Person gesucht werden; die // ergibt sich jetzt aus der Einheit, und die Frage kann gar nicht mehr falsch // beantwortet werden. export function CreatePositionModal({ open, onClose, units, }: { open: boolean; onClose: () => void; units: UnitOption[]; }) { const { showToast } = useToast(); const router = useRouter(); const [jobTitle, setJobTitle] = useState(""); const [orgUnitId, setOrgUnitId] = useState(""); const [isChief, setIsChief] = useState(false); const [validFrom, setValidFrom] = useState(todayIso); const [pending, setPending] = useState(false); const unit = units.find((u) => u.id === orgUnitId); // Der Unique-Index lässt nur eine gültige Leitung je Einheit zu. Das hier // vorwegzunehmen erspart eine Fehlermeldung, die in der Oberfläche nichts // erklärt. const chiefTaken = Boolean(unit?.hasChief); function reset() { setJobTitle(""); setOrgUnitId(""); setIsChief(false); setValidFrom(todayIso()); } async function handleSubmit() { if (!jobTitle || !orgUnitId || !validFrom) { showToast("Bitte alle Pflichtfelder ausfüllen.", "error"); return; } setPending(true); const result = await createPosition({ org_unit_id: orgUnitId, job_title: jobTitle, is_chief: isChief && !chiefTaken, valid_from: validFrom, }); setPending(false); if (result.success) { showToast("Planstelle angelegt."); router.refresh(); onClose(); reset(); } else { showToast(result.error ?? "Fehler beim Anlegen.", "error"); } } return ( } >
{ setOrgUnitId(v); setIsChief(false); }} placeholder="Bitte wählen…" options={units.map((u) => ({ value: u.id, label: `${" ".repeat(u.depth * 3)}${u.name} (${u.unit_type})`, }))} /> {chiefTaken && (

Für {unit?.name} besteht bereits eine Leitungsplanstelle.

)}
); }