"use client"; import { useState } from "react"; interface OeffnungsZeit { tag: string; von: string; bis: string } interface ContactProps { telefon?: string; email?: string; adresseZeile1?: string; adresseZeile2?: string; oeffnungszeiten?: OeffnungsZeit[]; } type Status = "idle" | "loading" | "success" | "error"; export default function Contact({ telefon = "+49 171 9345193", email = "kontakt@mbo-tech-it.de", adresseZeile1 = "Mörikestr. 2", adresseZeile2 = "74564 Crailsheim", oeffnungszeiten, }: ContactProps = {}) { const contactItems = [ { icon: ( ), label: "Telefon", value: telefon, href: `tel:${telefon.replace(/\s/g, "")}`, }, { icon: ( ), label: "E-Mail", value: email, href: `mailto:${email}`, }, { icon: ( ), label: "Standort", value: `${adresseZeile1}, ${adresseZeile2}`, href: `https://maps.google.com/?q=${encodeURIComponent(adresseZeile1 + " " + adresseZeile2)}`, }, ]; const [name, setName] = useState(""); const [emailInput, setEmailInput] = useState(""); const [betreff, setBetreff] = useState(""); const [nachricht, setNachricht] = useState(""); const [status, setStatus] = useState("idle"); const [errorMsg, setErrorMsg] = useState(""); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setStatus("loading"); setErrorMsg(""); try { const res = await fetch("/api/contact", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ name, email: emailInput, betreff, nachricht }), }); const data = await res.json(); if (!res.ok || !data.ok) { setErrorMsg(data.error ?? "Unbekannter Fehler"); setStatus("error"); } else { setStatus("success"); } } catch { setErrorMsg("Netzwerkfehler – bitte versuchen Sie es erneut."); setStatus("error"); } } return (
{/* Header */}
Kontakt

Projekt anfragen

Sie haben ein IT-Projekt oder eine Frage? Schreiben Sie uns — wir melden uns schnellstmöglich bei Ihnen.

{status === "success" ? (

Anfrage gesendet!

Wir haben Ihre Nachricht erhalten und melden uns schnellstmöglich bei Ihnen.

) : (
setName(e.target.value)} placeholder="Max Mustermann" className="w-full px-4 py-3 rounded-xl bg-slate-50 dark:bg-[#111925] border border-slate-300 dark:border-gray-700 text-slate-900 dark:text-white placeholder-slate-400 dark:placeholder-slate-600 focus:outline-none focus:border-orange-500/60 focus:ring-1 focus:ring-orange-500/20 transition-colors" />
setEmailInput(e.target.value)} placeholder="max@beispiel.de" className="w-full px-4 py-3 rounded-xl bg-slate-50 dark:bg-[#111925] border border-slate-300 dark:border-gray-700 text-slate-900 dark:text-white placeholder-slate-400 dark:placeholder-slate-600 focus:outline-none focus:border-orange-500/60 focus:ring-1 focus:ring-orange-500/20 transition-colors" />