// Demo modal — opens via custom event "open-demo" const { useState: useStateModal, useEffect: useEffectModal } = React; const DemoModal = () => { const [open, setOpen] = useStateModal(false); const [submitted, setSubmitted] = useStateModal(false); const [form, setForm] = useStateModal({ nume: "", email: "", magazin: "", mesaj: "" }); const [errors, setErrors] = useStateModal({}); useEffectModal(() => { const handler = () => { setOpen(true); setSubmitted(false); }; window.addEventListener("open-demo", handler); return () => window.removeEventListener("open-demo", handler); }, []); useEffectModal(() => { document.body.style.overflow = open ? "hidden" : ""; const onEsc = (e) => { if (e.key === "Escape") setOpen(false); }; window.addEventListener("keydown", onEsc); return () => window.removeEventListener("keydown", onEsc); }, [open]); const validate = () => { const e = {}; if (!form.nume.trim()) e.nume = "Numele este obligatoriu"; if (!/^\S+@\S+\.\S+$/.test(form.email)) e.email = "Email invalid"; if (!form.magazin.trim()) e.magazin = "URL magazin obligatoriu"; setErrors(e); return Object.keys(e).length === 0; }; const submit = (e) => { e.preventDefault(); if (!validate()) return; setSubmitted(true); }; return (
setOpen(false)}>
e.stopPropagation()}> {!submitted ? ( <> DEMO GRATUIT 30 MIN

Programează demo

Te sunăm în 4 ore lucrătoare. Fără card, fără obligații.

setForm({ ...form, nume: e.target.value })} placeholder="Ion Popescu" /> {errors.nume &&
{errors.nume}
}
setForm({ ...form, email: e.target.value })} placeholder="ion@magazin.ro" /> {errors.email &&
{errors.email}
}
setForm({ ...form, magazin: e.target.value })} placeholder="magazinultau.ro" /> {errors.magazin &&
{errors.magazin}
}