"use client"; import { useRouter } from "next/navigation"; import { useState } from "react"; import { changeEmployeeData } from "@/actions/employees"; import { CountryPicker } from "@/components/ui/CountryPicker"; import { SlideOver } from "@/components/ui/SlideOver"; import { useToast } from "@/components/ui/Toast"; import { UN_COUNTRIES } from "@/lib/countries"; import type { ContractType, Database, EmploymentType, GenderType } from "@/lib/supabase/types"; type EmployeeRow = Database["public"]["Tables"]["employees"]["Row"]; export function DatenAendernPanel({ open, onClose, employee }: { open: boolean; onClose: () => void; employee: EmployeeRow }) { const { showToast } = useToast(); const router = useRouter(); const [pending, setPending] = useState(false); const [effectiveDate, setEffectiveDate] = useState(new Date().toISOString().slice(0, 10)); const [firstName, setFirstName] = useState(employee.first_name); const [lastName, setLastName] = useState(employee.last_name); const [gender, setGender] = useState(employee.gender); const [birthDate, setBirthDate] = useState(employee.birth_date); const [svNummer, setSvNummer] = useState(employee.sv_nummer ?? ""); const [nationality, setNationality] = useState(employee.nationality); const [address, setAddress] = useState(employee.address ?? ""); const [addressCountry, setAddressCountry] = useState(employee.address_country ?? "Österreich"); const [email, setEmail] = useState(employee.email); const [phone, setPhone] = useState(employee.phone ?? ""); const [employmentType, setEmploymentType] = useState(employee.employment_type); const [weeklyHours, setWeeklyHours] = useState(String(employee.weekly_hours)); const [contractType, setContractType] = useState(employee.contract_type); const [contractEndDate, setContractEndDate] = useState(employee.contract_end_date ?? ""); function handleEmploymentTypeChange(value: EmploymentType) { setEmploymentType(value); if (value === "Vollzeit") setWeeklyHours("38.5"); } async function handleSubmit() { if (employmentType === "Teilzeit" && (Number(weeklyHours) <= 0 || Number(weeklyHours) >= 38.5)) { showToast("Wochenstunden bei Teilzeit müssen zwischen 0 und 38,5 liegen.", "error"); return; } if (contractType === "befristet" && !contractEndDate) { showToast("Bei befristetem Vertrag ist ein Enddatum erforderlich.", "error"); return; } if (!effectiveDate) { showToast("Bitte ein Wirksam-ab-Datum angeben.", "error"); return; } setPending(true); const result = await changeEmployeeData({ employee_id: employee.id, effective_date: effectiveDate, person: { first_name: firstName, last_name: lastName, gender, birth_date: birthDate, sv_nummer: svNummer, nationality, address, address_country: addressCountry, email, phone, }, contract: { employment_type: employmentType, weekly_hours: Number(weeklyHours), contract_type: contractType, contract_end_date: contractType === "befristet" ? contractEndDate : "", }, }); setPending(false); if (result.success) { showToast("Daten aktualisiert."); router.refresh(); onClose(); } else { showToast(result.error ?? "Fehler beim Speichern.", "error"); } } return ( } >
setEffectiveDate(e.target.value)} className="w-full rounded border border-border px-3 py-2 text-sm" />

Person

setFirstName(e.target.value)} className="w-full rounded border border-border px-3 py-2 text-sm" />
setLastName(e.target.value)} className="w-full rounded border border-border px-3 py-2 text-sm" />
setBirthDate(e.target.value)} className="w-full rounded border border-border px-3 py-2 text-sm" />
setSvNummer(e.target.value)} className="w-full rounded border border-border px-3 py-2 text-sm" />
setAddress(e.target.value)} className="w-full rounded border border-border px-3 py-2 text-sm" />
setEmail(e.target.value)} className="w-full rounded border border-border px-3 py-2 text-sm" />
setPhone(e.target.value)} className="w-full rounded border border-border px-3 py-2 text-sm" />

Vertrag

setWeeklyHours(e.target.value)} className="w-full rounded border border-border px-3 py-2 text-sm disabled:bg-surface disabled:text-ink-muted" />
{contractType === "befristet" && (
setContractEndDate(e.target.value)} className="w-full rounded border border-border px-3 py-2 text-sm" />
)}
); }