"use client"; import { useRouter } from "next/navigation"; import { useMemo, useState } from "react"; import { transferEmployee } from "@/actions/employees"; import { SlideOver } from "@/components/ui/SlideOver"; import { useToast } from "@/components/ui/Toast"; import type { Database } from "@/lib/supabase/types"; type EmployeeRow = Database["public"]["Tables"]["employees"]["Row"]; type Division = Database["public"]["Tables"]["divisions"]["Row"]; type Department = Database["public"]["Tables"]["departments"]["Row"]; type Team = Database["public"]["Tables"]["teams"]["Row"]; type TransferPanelProps = { open: boolean; onClose: () => void; employee: EmployeeRow; divisions: Division[]; departments: Department[]; teams: Team[]; currentTeamId: string | null; }; export function TransferPanel({ open, onClose, employee, divisions, departments, teams, currentTeamId }: TransferPanelProps) { const { showToast } = useToast(); const router = useRouter(); const [effectiveDate, setEffectiveDate] = useState(""); const [divisionId, setDivisionId] = useState(employee.division_id); const [teamId, setTeamId] = useState(currentTeamId ?? ""); const [newTitle, setNewTitle] = useState(""); const [pending, setPending] = useState(false); const teamsInDivision = useMemo(() => { const deptIds = new Set(departments.filter((d) => d.division_id === divisionId).map((d) => d.id)); return teams.filter((t) => deptIds.has(t.department_id)); }, [departments, teams, divisionId]); async function handleSubmit() { if (!effectiveDate || !teamId) { showToast("Bitte Datum und Zielteam angeben.", "error"); return; } setPending(true); const result = await transferEmployee({ employee_id: employee.id, effective_date: effectiveDate, new_team_id: teamId, new_title: newTitle || undefined, }); setPending(false); if (result.success) { showToast(`${employee.first_name} ${employee.last_name} wurde versetzt.`); 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" />
setNewTitle(e.target.value)} placeholder={employee.job_title} className="w-full rounded border border-border px-3 py-2 text-sm" />

Die neue Führungskraft wird automatisch anhand des Zielteams bestimmt.

); }