"use client"; import { useState, type FormEvent } from "react"; type ErrorField = "name" | "email" | "manufacturer" | "model" | "deviceType" | "description" | "privacy"; type Errors = Partial>; export default function RepairForm() { const [errors, setErrors] = useState({}); const [status, setStatus] = useState(""); const [pending, setPending] = useState(false); async function submit(event: FormEvent) { event.preventDefault(); setStatus(""); const form = new FormData(event.currentTarget); const nextErrors: Errors = {}; if (!String(form.get("name") ?? "").trim()) nextErrors.name = "Bitte geben Sie Ihren Namen ein."; if (!String(form.get("email") ?? "").includes("@")) nextErrors.email = "Bitte geben Sie eine gültige E-Mail-Adresse ein."; if (!String(form.get("manufacturer") ?? "").trim()) nextErrors.manufacturer = "Bitte nennen Sie den Hersteller."; if (!String(form.get("model") ?? "").trim()) nextErrors.model = "Bitte nennen Sie das Modell."; if (!String(form.get("deviceType") ?? "").trim()) nextErrors.deviceType = "Bitte wählen Sie die Geräteart aus."; if (String(form.get("description") ?? "").trim().length < 20) nextErrors.description = "Bitte beschreiben Sie den Fehler mit mindestens 20 Zeichen."; if (form.get("privacy") !== "on") nextErrors.privacy = "Bitte stimmen Sie der Verarbeitung Ihrer Angaben zu."; setErrors(nextErrors); if (Object.keys(nextErrors).length > 0) return; setPending(true); try { const response = await fetch("/api/repair", { method: "POST", body: form, }); const result = await response.json() as { message?: string }; if (!response.ok) throw new Error(result.message ?? "Anfrage konnte nicht gesendet werden."); event.currentTarget.reset(); setStatus(result.message ?? "Ihre Reparaturanfrage wurde vorbereitet."); } catch (error) { setStatus(error instanceof Error ? error.message : "Anfrage konnte nicht gesendet werden."); } finally { setPending(false); } } return (
{errors.deviceType && {errors.deviceType}}