"use client"; import { useState } from "react"; import { apiFetch } from "@/app/lib/api-client"; interface NewsletterSubscribeProps { locale: string; citySlug?: string; list?: "city" | "meetup" | "general"; className?: string; } const copy = { zh: { title: "订阅城市与活动通讯", hint: "通过 Listmonk 接收新活动、城市更新(可随时退订)", email: "邮箱地址", name: "称呼(可选)", submit: "订阅", success: "订阅成功,请查收确认邮件", error: "订阅失败,请稍后再试", }, en: { title: "Subscribe to city & event updates", hint: "Get meetup and city news via Listmonk (unsubscribe anytime)", email: "Email", name: "Name (optional)", submit: "Subscribe", success: "Subscribed — check your inbox to confirm", error: "Subscription failed, please try again", }, }; export default function NewsletterSubscribe({ locale, citySlug = "", list = "general", className = "", }: NewsletterSubscribeProps) { const c = locale === "zh" ? copy.zh : copy.en; const [email, setEmail] = useState(""); const [name, setName] = useState(""); const [status, setStatus] = useState<"idle" | "loading" | "success" | "error">("idle"); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (!email.trim()) return; setStatus("loading"); try { await apiFetch("/api/newsletter/subscribe", { method: "POST", body: JSON.stringify({ email, name, citySlug, list }), }); setStatus("success"); setEmail(""); setName(""); } catch { setStatus("error"); } } return (

{c.title}

{c.hint}

setEmail(e.target.value)} placeholder={c.email} className="rounded-xl border border-gray-200 px-4 py-2.5 text-sm dark:border-gray-700 dark:bg-gray-800 dark:text-gray-100" /> setName(e.target.value)} placeholder={c.name} className="rounded-xl border border-gray-200 px-4 py-2.5 text-sm dark:border-gray-700 dark:bg-gray-800 dark:text-gray-100" />
{status === "success" ?

{c.success}

: null} {status === "error" ?

{c.error}

: null}
); }