"use client"; import { useRouter } from "next/navigation"; import { useState } from "react"; import { createPosition, searchSuperiors, type SuperiorSearchResult } from "@/actions/positions"; import { Lookup } from "@/components/ui/Lookup"; import { Modal } from "@/components/ui/Modal"; import { useToast } from "@/components/ui/Toast"; import { todayIso } from "@/lib/format"; import type { Database } from "@/lib/supabase/types"; type Team = Database["public"]["Tables"]["teams"]["Row"]; export function CreatePositionModal({ open, onClose, teams }: { open: boolean; onClose: () => void; teams: Team[] }) { const { showToast } = useToast(); const router = useRouter(); const [title, setTitle] = useState(""); const [isLead, setIsLead] = useState(false); const [superior, setSuperior] = useState(null); const [teamId, setTeamId] = useState(""); const [validFrom, setValidFrom] = useState(todayIso); const [pending, setPending] = useState(false); function reset() { setTitle(""); setIsLead(false); setSuperior(null); setTeamId(""); setValidFrom(todayIso()); } async function handleSubmit() { if (!title || !superior || !validFrom || (isLead && !teamId)) { showToast("Bitte alle Pflichtfelder ausfüllen.", "error"); return; } setPending(true); const result = await createPosition({ title, superior_employee_id: superior.id, is_lead: isLead, team_id: isLead ? teamId : undefined, valid_from: validFrom, }); setPending(false); if (result.success) { showToast("Position ausgeschrieben."); router.refresh(); onClose(); reset(); } else { showToast(result.error ?? "Fehler beim Anlegen.", "error"); } } return ( } >
setTitle(e.target.value)} className="w-full rounded border border-border px-3 py-2 text-sm" />
{!superior ? ( placeholder="Name oder Titel…" onSearch={(q) => searchSuperiors(q, isLead)} onSelect={setSuperior} renderResult={(p) => (
{p.first_name} {p.last_name}
{p.job_title}
)} /> ) : (
{superior.first_name} {superior.last_name}
{superior.job_title}
)}
{isLead && (
)}
setValidFrom(e.target.value)} className="w-full rounded border border-border px-3 py-2 text-sm" />
); }