"use client"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { useRouter } from "next/navigation"; import { api } from "@/lib/api"; import type { Case, Appointment } from "@/lib/types"; import { Breadcrumb } from "@/components/layout/Breadcrumb"; import { useState } from "react"; import { toast } from "sonner"; const APPOINTMENT_TYPES = [ { value: "hearing", label: "Verhandlung" }, { value: "meeting", label: "Besprechung" }, { value: "consultation", label: "Beratung" }, { value: "deadline_hearing", label: "Fristanhoerung" }, { value: "other", label: "Sonstiges" }, ]; const inputClass = "w-full rounded-md border border-neutral-200 px-3 py-1.5 text-sm outline-none focus:border-neutral-400 focus:ring-1 focus:ring-neutral-400"; const labelClass = "mb-1 block text-xs font-medium text-neutral-600"; export default function NewAppointmentPage() { const router = useRouter(); const queryClient = useQueryClient(); const [caseId, setCaseId] = useState(""); const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [startAt, setStartAt] = useState(""); const [endAt, setEndAt] = useState(""); const [location, setLocation] = useState(""); const [appointmentType, setAppointmentType] = useState(""); const { data: casesData } = useQuery({ queryKey: ["cases"], queryFn: () => api.get<{ cases: Case[]; total: number } | Case[]>("/cases"), }); const cases = Array.isArray(casesData) ? casesData : Array.isArray(casesData?.cases) ? casesData.cases : []; const createMutation = useMutation({ mutationFn: (body: Record) => api.post("/appointments", body), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ["appointments"] }); queryClient.invalidateQueries({ queryKey: ["dashboard"] }); toast.success("Termin erstellt"); router.push(`/termine/${data.id}`); }, onError: () => toast.error("Fehler beim Erstellen des Termins"), }); function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (!title.trim() || !startAt) return; const body: Record = { title: title.trim(), start_at: new Date(startAt).toISOString(), }; if (description.trim()) body.description = description.trim(); if (endAt) body.end_at = new Date(endAt).toISOString(); if (location.trim()) body.location = location.trim(); if (appointmentType) body.appointment_type = appointmentType; if (caseId) body.case_id = caseId; createMutation.mutate(body); } return (

Neuer Termin

Erstellen Sie einen neuen Termin.

setTitle(e.target.value)} required className={inputClass} placeholder="z.B. Muendliche Verhandlung" />
setStartAt(e.target.value)} required className={inputClass} />
setEndAt(e.target.value)} className={inputClass} />
setLocation(e.target.value)} className={inputClass} placeholder="z.B. UPC Muenchen, Saal 3" />