/* ============================================================ STREAM WITH LIEN — Contact & Webshop ============================================================ */ /* ---------------- CONTACT ---------------- */ function ContactPage({ d, ui, social }) { const ref = useReveal(); const [form, setForm] = useState({ name: "", email: "", subject: d.subjects[0], message: "" }); const [sent, setSent] = useState(false); const [err, setErr] = useState({}); const set = (k) => (e) => setForm(f => ({ ...f, [k]: e.target.value })); const submit = (e) => { e.preventDefault(); const next = {}; if (!form.name.trim()) next.name = true; if (!/^\S+@\S+\.\S+$/.test(form.email)) next.email = true; if (!form.message.trim()) next.message = true; setErr(next); if (Object.keys(next).length === 0) setSent(true); }; return ( <> {sent ? ( {d.sent} { setSent(false); setForm({ name: "", email: "", subject: d.subjects[0], message: "" }); }}>↺ ) : ( {d.formH} {d.fields.name} {d.fields.email} {d.fields.subject} {d.subjects.map((s, i) => {s})} {d.fields.message} {d.send} )} > ); } /* ---------------- WEBSHOP ---------------- */ function WebshopPage({ d, ui, social }) { const ref = useReveal(); const [email, setEmail] = useState(""); const [done, setDone] = useState(false); const notify = (e) => { e.preventDefault(); if (/^\S+@\S+\.\S+$/.test(email)) setDone(true); }; return ( <> {d.badge} ✦ {d.products.map((p, i) => ( {d.badge} {p.t} {p.price} {p.d} ))} {ui.soon} {d.notifyH} {d.notifyP} {done ? ( {d.notifyDone} ) : ( setEmail(e.target.value)} placeholder={d.notifyPlaceholder} inputMode="email" /> {d.notifyCta} )} {d.visitShop} > ); } Object.assign(window, { ContactPage, WebshopPage });
{d.sent}
{p.d}
{d.notifyP}