/* Sobha Realty microsite — interactive forms + modals */ const FD = window.SR_DATA; /* ============================================================ Modal scaffolding ============================================================ */ function Modal({ children, onClose, wide }) { React.useEffect(() => { const onKey = (e) => { if (e.key === "Escape") onClose(); }; window.addEventListener("keydown", onKey); document.documentElement.style.overflow = "hidden"; return () => { window.removeEventListener("keydown", onKey); document.documentElement.style.overflow = ""; }; }, [onClose]); return (
e.stopPropagation()}> {children}
); } /* ============================================================ Common form atoms ============================================================ */ function Field({ label, children, full }) { return (
{children}
); } function PhoneField({ value, onChange, dialCode, setDial }) { return (
onChange(e.target.value)} placeholder="50 123 4567" />
); } function RouteChooser({ value, onChange }) { return (
{FD.routes.map(r => ( ))}
); } /* ============================================================ Register interest — multi-step ============================================================ */ function RegisterFlow({ onClose, defaultRoute = "sales" }) { const [step, setStep] = React.useState(0); const [form, setForm] = React.useState({ route: defaultRoute, community: FD.featured.name, residence: "2 Bedroom", budget: "AED 2M – 5M", name: "", email: "", phone: "", dial: "+971", country: "United Arab Emirates", contactPref: "WhatsApp", source: "Campaign · Sobha One", timing: "0–3 months", notes: "", consent: false, marketing: true }); const upd = (k,v) => setForm(prev => ({...prev, [k]:v})); const steps = [ { name:"Route", desc:"Pick your enquiry channel" }, { name:"Interest", desc:"Community & residence" }, { name:"Contact", desc:"How we reach you" }, { name:"Review", desc:"Confirm & send" } ]; const last = step === steps.length - 1; const next = () => setStep(s => Math.min(s+1, steps.length)); const prev = () => setStep(s => Math.max(s-1, 0)); const submit = () => setStep(steps.length); // success const sent = step === steps.length; return (
{!sent && ( <>
Register interest · Sobha One

{steps[step].name}.

{steps[step].desc}.

Step {step+1} / {steps.length} Approx. 60 seconds
{steps.map((_, i) => (
))}
{/* Step 0 — route */} {step === 0 && ( <> upd("route", v)} />

Sales: {FD.phones.sales} · Customer & WhatsApp: {FD.phones.customer}. We never route enquiries to the careers line.

)} {/* Step 1 — interest */} {step === 1 && ( <>