"use client"; import { useState, useEffect } from "react"; import { useRouter, useParams } from "next/navigation"; import Link from "next/link"; export default function EditBookingPage() { const router = useRouter(); const params = useParams(); const bookingId = params.id as string; const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [error, setError] = useState(""); const [equipmentList, setEquipmentList] = useState([]); const [selectedEquipment, setSelectedEquipment] = useState([]); const [formData, setFormData] = useState({ customerName: "", customerEmail: "", customerPhone: "", customerAddress: "", customerCity: "", customerZip: "", companyName: "", invoiceType: "PRIVATE", model: "", eventDate: "", eventAddress: "", eventCity: "", eventZip: "", eventLocation: "", setupTimeStart: "", setupTimeLatest: "", dismantleTimeEarliest: "", dismantleTimeLatest: "", calculatedPrice: 0, notes: "", withPrintFlat: false, }); const toggleEquipment = (id: string) => { setSelectedEquipment((prev) => prev.includes(id) ? prev.filter((e) => e !== id) : [...prev, id] ); }; useEffect(() => { Promise.all([ fetch(`/api/bookings/${bookingId}`).then((r) => r.json()), fetch("/api/equipment").then((r) => r.json()), ]) .then(([bookingData, eqData]) => { const b = bookingData.booking || bookingData; setFormData({ customerName: b.customerName || "", customerEmail: b.customerEmail || "", customerPhone: b.customerPhone || "", customerAddress: b.customerAddress || "", customerCity: b.customerCity || "", customerZip: b.customerZip || "", companyName: b.companyName || "", invoiceType: b.invoiceType || "PRIVATE", model: b.model || b.photobox?.model || "", eventDate: b.eventDate ? new Date(b.eventDate).toISOString().split("T")[0] : "", eventAddress: b.eventAddress || "", eventCity: b.eventCity || "", eventZip: b.eventZip || "", eventLocation: b.eventLocation || "", setupTimeStart: b.setupTimeStart ? new Date(b.setupTimeStart).toISOString().slice(0, 16) : "", setupTimeLatest: b.setupTimeLatest ? new Date(b.setupTimeLatest).toISOString().slice(0, 16) : "", dismantleTimeEarliest: b.dismantleTimeEarliest ? new Date(b.dismantleTimeEarliest).toISOString().slice(0, 16) : "", dismantleTimeLatest: b.dismantleTimeLatest ? new Date(b.dismantleTimeLatest).toISOString().slice(0, 16) : "", calculatedPrice: b.calculatedPrice || 0, notes: b.notes || "", withPrintFlat: b.withPrintFlat || false, }); setEquipmentList(eqData.equipment || []); if (b.bookingEquipment) { setSelectedEquipment(b.bookingEquipment.map((be: any) => be.equipmentId)); } setLoading(false); }) .catch(() => { setError("Buchung konnte nicht geladen werden"); setLoading(false); }); }, [bookingId]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setSaving(true); setError(""); try { const res = await fetch(`/api/bookings/${bookingId}`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ ...formData, equipmentIds: selectedEquipment }), }); const data = await res.json(); if (!res.ok) { throw new Error(data.error || "Fehler beim Speichern"); } router.push(`/dashboard/bookings/${bookingId}`); } catch (err: any) { setError(err.message); setSaving(false); } }; if (loading) { return (
Laden...
); } const inputClass = "w-full px-4 py-2 bg-gray-700 border border-gray-600 text-white rounded-lg focus:ring-2 focus:ring-red-500 focus:border-transparent"; return (
← Zurück zur Buchung

Buchung bearbeiten

Fotobox & Ausstattung

{equipmentList.length > 0 && (
{equipmentList.map((eq) => ( ))}
)}

Kundendaten

{formData.invoiceType === "BUSINESS" && (
setFormData({ ...formData, companyName: e.target.value })} className={inputClass} />
)}
setFormData({ ...formData, customerName: e.target.value })} required className={inputClass} />
setFormData({ ...formData, customerEmail: e.target.value })} required className={inputClass} />
setFormData({ ...formData, customerPhone: e.target.value })} required className={inputClass} />
setFormData({ ...formData, customerAddress: e.target.value })} placeholder="Straße und Hausnummer" className={inputClass} />
setFormData({ ...formData, customerZip: e.target.value })} className={inputClass} />
setFormData({ ...formData, customerCity: e.target.value })} className={inputClass} />

Event-Details

setFormData({ ...formData, eventDate: e.target.value })} required className={inputClass} />
setFormData({ ...formData, calculatedPrice: parseFloat(e.target.value) })} required className={inputClass} />
setFormData({ ...formData, eventAddress: e.target.value })} required className={inputClass} />
setFormData({ ...formData, eventZip: e.target.value })} required className={inputClass} />
setFormData({ ...formData, eventCity: e.target.value })} required className={inputClass} />
setFormData({ ...formData, eventLocation: e.target.value })} className={inputClass} />
setFormData({ ...formData, setupTimeStart: e.target.value })} className={inputClass} />
setFormData({ ...formData, setupTimeLatest: e.target.value })} className={inputClass} />
setFormData({ ...formData, dismantleTimeEarliest: e.target.value })} className={inputClass} />
setFormData({ ...formData, dismantleTimeLatest: e.target.value })} className={inputClass} />