import { useState } from "react"; import { cn } from "@/lib/utils"; import { Typography } from "@/components/Typography"; export type NewsletterCtaProps = { tagline: string; heading: string; subheading: string; buttonLabel: string; endpoint: string; imageUrl: string; layout: "split" | "stacked"; }; export function NewsletterCta({ tagline, heading, subheading, buttonLabel, endpoint, imageUrl, layout, }: NewsletterCtaProps) { const [email, setEmail] = useState(""); const [submitted, setSubmitted] = useState(false); const [submitting, setSubmitting] = useState(false); const submit = async (e: React.FormEvent) => { e.preventDefault(); if (!email) return; setSubmitting(true); try { if (endpoint) { await fetch(endpoint, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ email }), }); } setSubmitted(true); } catch { setSubmitted(true); } finally { setSubmitting(false); } }; const Form = (
setEmail(e.target.value)} placeholder="you@example.com" className="flex-1 bg-transparent py-3 text-sm placeholder:text-muted-foreground focus:outline-none" />
); if (layout === "split") { return (
{imageUrl ? ( ) : null}
{tagline ? (

{tagline}

) : null} {heading} {subheading ? ( {subheading} ) : null}
{submitted ? (

Thanks — we'll be in touch.

) : ( Form )}
); } return (
{tagline ? (

{tagline}

) : null} {heading} {subheading ? ( {subheading} ) : null}
{submitted ? (

Thanks — we'll be in touch.

) : ( Form )}
); }