"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, todayIso } from "@/lib/format"; import type { OpenPositionResolved } from "@/lib/positions"; import { CreatePositionModal } from "./CreatePositionModal"; type OpenPositionWithDays = OpenPositionResolved & { daysOpen: number }; type PositionsPageClientProps = { openPositions: OpenPositionWithDays[]; teams: { id: string; org_number: string; name: string; department_id: string }[]; }; export function PositionsPageClient({ openPositions, teams }: PositionsPageClientProps) { const { showToast } = useToast(); const router = useRouter(); const [createOpen, setCreateOpen] = useState(false); const [deletingId, setDeletingId] = useState(null); const today = todayIso(); async function handleDelete(id: string) { setDeletingId(id); const result = await deletePosition(id); setDeletingId(null); if (result.success) { showToast("Position gelöscht."); router.refresh(); } else { showToast(result.error ?? "Fehler beim Löschen.", "error"); } } return (

Offene Positionen ({openPositions.length})

{openPositions.length === 0 ? (

Derzeit keine offenen Positionen.

) : (
{openPositions.map((p) => { const notYetValid = p.valid_from > today; return (
{p.title}
{p.position_number} · {p.orgLabel}
seit {p.daysOpen} Tagen offen
{notYetValid &&
Gültig ab {fmtDate(p.valid_from)}
}
); })}
)}
setCreateOpen(false)} teams={teams} />
); }