'use client'; import React, { useState } from "react"; import { motion } from "framer-motion"; import { useThemeColors } from "@/utils/useThemeColors"; import HCaptcha from "@hcaptcha/react-hcaptcha"; const ContactFormSection = () => { const colors = useThemeColors(); const [form, setForm] = useState({ name: "", email: "", company: "", phone: "", website: "", message: "", }); const [captchaToken, setCaptchaToken] = useState(""); const [submitted, setSubmitted] = useState(false); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const isDev = process.env.NODE_ENV === "development"; const hCaptchaSiteKey = isDev ? "10000000-ffff-ffff-ffff-000000000001" // hCaptcha test sitekey : "ES_ff59a664dc764f92870bf2c7b4eab7c5"; const handleChange = (e: React.ChangeEvent) => { setForm({ ...form, [e.target.name]: e.target.value }); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setError(""); if (!captchaToken) { setError("Bitte löse das CAPTCHA, um fortzufahren."); setLoading(false); return; } try { const res = await fetch("/api/contact", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ ...form, captcha: captchaToken }), }); if (res.ok) { setSubmitted(true); setForm({ name: "", email: "", company: "", phone: "", website: "", message: "" }); } else { const resJson = await res.json(); setError(resJson?.error || "Ein Fehler ist aufgetreten. Bitte versuche es später erneut."); } } catch (_err) { setError("Serverfehler. Bitte versuche es später erneut."); } setLoading(false); }; return (
Schreib uns eine Nachricht Wir freuen uns über dein Interesse und melden uns schnellstmöglich bei dir zurück. {submitted ? (
✅ Deine Nachricht wurde erfolgreich gesendet!
) : (
{[ { label: "Dein Name *", name: "name", type: "text", required: true, placeholder: "Max Mustermann" }, { label: "Deine E-Mail *", name: "email", type: "email", required: true, placeholder: "max@example.com" }, { label: "Firmenname (optional)", name: "company", type: "text", required: false, placeholder: "Mustermann GmbH" }, { label: "Telefonnummer (optional)", name: "phone", type: "tel", required: false, placeholder: "+49 123 456789" }, { label: "Webseite (optional)", name: "website", type: "url", required: false, placeholder: "https://..." }, ].map((field, index) => ( ))}