"use client"; import { Plus, Trash2 } from "lucide-react"; import { useRouter } from "next/navigation"; import { useState } from "react"; import { deletePosition } from "@/actions/positions"; import { Button } from "@/components/ui/Button"; import { useToast } from "@/components/ui/Toast"; import { fmtDate } from "@/lib/format"; import type { OpenPositionResolved } from "@/lib/positions"; import { CreatePositionModal, type UnitOption } from "./CreatePositionModal"; import { EditPositionModal } from "./EditPositionModal"; type OpenPositionWithDays = OpenPositionResolved & { daysOpen: number }; type PositionsPageClientProps = { openPositions: OpenPositionWithDays[]; units: UnitOption[]; }; export function PositionsPageClient({ openPositions, units }: PositionsPageClientProps) { const { showToast } = useToast(); const router = useRouter(); const [createOpen, setCreateOpen] = useState(false); const [editing, setEditing] = useState(null); const [deletingId, setDeletingId] = useState(null); // Getrennt, weil es zwei verschiedene Aussagen sind: „hier fehlt jemand" // und „das entsteht erst". In einer Liste vermischt liest sich eine // Planstelle zum 01.10. wie eine Vakanz, um die sich niemand kümmert. const offen = openPositions.filter((p) => !p.future); const kuenftig = openPositions.filter((p) => p.future); async function handleDelete(id: string) { setDeletingId(id); const result = await deletePosition(id); setDeletingId(null); if (result.success) { showToast("Planstelle entfernt."); router.refresh(); } else { showToast(result.error ?? "Fehler beim Löschen.", "error"); } } function Karte({ p }: { p: OpenPositionWithDays }) { return (
{/* Die ganze Karte öffnet den Änderungsdialog; der Papierkorb liegt absolut darüber. Ein Knopf im Knopf wäre ungültiges HTML und mit der Tastatur nicht erreichbar. */}
); } return (

Unbesetzte Planstellen ({offen.length})

{offen.length === 0 ? (

Derzeit ist jede geltende Planstelle besetzt oder vergeben.

) : (
{offen.map((p) => ( ))}
)}
{kuenftig.length > 0 && (

Künftige Planstellen ({kuenftig.length})

Beschlossen, aber noch nicht gültig. Sie zählen nicht als Vakanz und lassen sich bis zum Beginn ändern.

{kuenftig.map((p) => ( ))}
)} setCreateOpen(false)} units={units} /> {/* `key` sorgt dafür, dass React je Planstelle einen frischen Dialog baut — sonst blieben beim zweiten Öffnen die Werte des ersten stehen. */} {editing && ( setEditing(null)} /> )}
); }