"use client"; import { useState, type FormEvent } from "react"; import { Button } from "@/components/ui"; import { TurnstileWidget } from "@/components/turnstile-widget"; import { useI18n } from "@/i18n/i18n-provider"; type Status = "idle" | "loading" | "success" | "error"; /** * Der Turnstile-Sitekey kommt als Prop vom Server und NICHT aus * process.env in dieser Datei. * * Grund: NEXT_PUBLIC_-Variablen werden in Client Components zur BUILD-Zeit * ins Bundle eingebacken. Der Wert wird hier aber erst zur Laufzeit gesetzt * (k8s/01-configmap.yaml). Ein Zugriff auf process.env an dieser Stelle * ergibt deshalb dauerhaft undefined — das Widget erschiene nie, waehrend die * Serverseite bei gesetztem TURNSTILE_SECRET_KEY sehr wohl einen Token * verlangt. Das Formular waere damit unabsendbar, ohne dass irgendwo ein * Fehler auftaucht. * * Alle uebrigen Formulare (Login, Registrierung, Passwort-Reset, Zwei-Faktor, * Checkout, Verfuegbarkeits-Benachrichtigung) lesen den Wert bereits im * Server Component und reichen ihn als Prop weiter. Diese Datei folgt jetzt * demselben Muster. */ export function BusinessInquiryForm({ turnstileSiteKey }: { turnstileSiteKey?: string }) { const { t } = useI18n(); const [status, setStatus] = useState("idle"); const [errorMessage, setErrorMessage] = useState(null); const [turnstileToken, setTurnstileToken] = useState(""); async function handleSubmit(event: FormEvent) { event.preventDefault(); setStatus("loading"); setErrorMessage(null); const formData = new FormData(event.currentTarget); const payload = { companyName: String(formData.get("companyName") ?? ""), contactPerson: String(formData.get("contactPerson") ?? ""), email: String(formData.get("email") ?? ""), phone: String(formData.get("phone") ?? "") || undefined, desiredQuantity: String(formData.get("desiredQuantity") ?? ""), desiredDeliveryDate: String(formData.get("desiredDeliveryDate") ?? "") || undefined, package: String(formData.get("package") ?? "KLASSIK"), message: String(formData.get("message") ?? "") || undefined, turnstileToken, }; try { const response = await fetch("/api/business-inquiry", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload), }); if (!response.ok) throw new Error("request failed"); setStatus("success"); event.currentTarget.reset(); } catch { setStatus("error"); setErrorMessage(t.businessInquiryForm.errorMessage); } } if (status === "success") { return (

{t.businessInquiryForm.successMessage}

); } return (