diff --git a/components/FlyerDownloadForm.tsx b/components/FlyerDownloadForm.tsx new file mode 100644 index 0000000..7b9a8c0 --- /dev/null +++ b/components/FlyerDownloadForm.tsx @@ -0,0 +1,113 @@ +"use client"; + +import { useState } from "react"; + +type Status = "idle" | "loading" | "success" | "error"; + +export default function FlyerDownloadForm() { + const [email, setEmail] = useState(""); + const [dsgvo, setDsgvo] = useState(false); + const [status, setStatus] = useState("idle"); + const [errorMsg, setErrorMsg] = useState(""); + const [downloadUrl, setDownloadUrl] = useState(""); + + async function handleSubmit(e: React.FormEvent) { + e.preventDefault(); + setStatus("loading"); + setErrorMsg(""); + + try { + const res = await fetch("/api/familyguard-flyer", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ email, dsgvoEinwilligung: dsgvo }), + }); + const data = await res.json(); + + if (!res.ok || !data.ok) { + setErrorMsg(data.error ?? "Unbekannter Fehler"); + setStatus("error"); + } else { + setDownloadUrl(data.downloadUrl); + setStatus("success"); + } + } catch { + setErrorMsg("Netzwerkfehler – bitte versuchen Sie es erneut."); + setStatus("error"); + } + } + + return ( +
+
+ + Flyer + +

+ FamilyGuard-Flyer herunterladen +

+

+ Alle Infos zu MBO FamilyGuard kompakt als PDF – tragen Sie Ihre E-Mail-Adresse + ein und laden Sie den Flyer direkt herunter. +

+
+ + {status === "success" ? ( +
+

+ Fertig! Der Flyer wurde Ihnen außerdem per E-Mail zugeschickt. +

+ + Flyer jetzt herunterladen + +
+ ) : ( +
+ setEmail(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" + /> + + + + {status === "error" && ( +
+ {errorMsg || "Anfrage fehlgeschlagen. Bitte versuchen Sie es erneut."} +
+ )} + + +
+ )} +
+ ); +}