"use client"; import { Button } from "@/components/ui/button"; import { normalizeEmail, validateEmail } from "@/lib/email"; import { Send } from "lucide-react"; import { useTranslations } from "next-intl"; import { useState } from "react"; export function Newsletter() { const [email, setEmail] = useState(""); const [subscribeStatus, setSubscribeStatus] = useState< "idle" | "loading" | "success" | "error" >("idle"); const [errorMessage, setErrorMessage] = useState(""); const t = useTranslations("Footer.Newsletter"); const handleSubscribe = async (e: React.FormEvent) => { e.preventDefault(); if (!email) return; const normalizedEmailAddress = normalizeEmail(email); const { isValid, error } = validateEmail(normalizedEmailAddress); if (!isValid) { setSubscribeStatus("error"); setErrorMessage(error || t("defaultErrorMessage")); setTimeout(() => setSubscribeStatus("idle"), 5000); return; } try { setSubscribeStatus("loading"); const response = await fetch("/api/newsletter", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ email: normalizedEmailAddress }), }); const data = await response.json(); if (!response.ok) { throw new Error(data.error || t("errorMessage")); } setSubscribeStatus("success"); setEmail(""); setErrorMessage(""); setTimeout(() => setSubscribeStatus("idle"), 5000); } catch (error) { setSubscribeStatus("error"); setErrorMessage( error instanceof Error ? error.message : t("errorMessage2") ); setTimeout(() => setSubscribeStatus("idle"), 5000); } }; return (
{t("description")}