// ============================================================ // JET LUXE — Quote modal (multi-step) + main app // ============================================================ const { useState: useState_, useEffect: useEffect_, useMemo: useMemo_, Fragment: Fragment_ } = React; // ============================================================ // QUOTE MODAL // ============================================================ function QuoteModal({ t, locale, open, onClose, initialService }) { const Q = t.quote; const STEPS = 5; const [step, setStep] = useState_(1); const [data, setData] = useState_({ service: initialService || 'charter', trip: 0, from: '', to: '', depart: '', ret: '', pax: '4', notes: '', name: '', email: '', phone: '', prefer: 0 }); useEffect_(() => { if (open) { setStep(1); setData(d => ({ ...d, service: initialService || d.service })); document.body.style.overflow = 'hidden'; } else { document.body.style.overflow = ''; } }, [open, initialService]); if (!open) return null; const update = (k, v) => setData(d => ({ ...d, [k]: v })); const next = () => setStep(s => Math.min(STEPS, s + 1)); const back = () => setStep(s => Math.max(1, s - 1)); const canAdvance = () => { if (step === 1) return !!data.service; if (step === 2) return data.from.trim() && data.to.trim(); if (step === 3) return data.depart.trim() && data.pax; if (step === 4) return data.name.trim() && data.email.trim(); return true; }; // build WhatsApp deep-link from current state const waText = useMemo_(() => { const lines = [ locale === 'ar' ? 'مرحباً Jet Luxe، أودّ الاستفسار عن:' : 'Hi Jet Luxe, I’d like to enquire about:', `· ${Q.step1.options.find(o => o.id === data.service)?.name || data.service}`, `· ${Q.step2.from}: ${data.from || '—'}`, `· ${Q.step2.to}: ${data.to || '—'}`, `· ${Q.step3.depart}: ${data.depart || '—'}`, `· ${Q.step3.pax}: ${data.pax || '—'}`, data.notes ? `· ${Q.step3.notes}: ${data.notes}` : null ].filter(Boolean); return encodeURIComponent(lines.join('\n')); }, [data, locale, Q]); const waUrl = `https://wa.me/+17724448268?text=${waText}`; const reference = useMemo_(() => 'JL-' + Math.random().toString(36).slice(2, 8).toUpperCase(), [open]); // ---- Step contents ---- const Step1 = () => (
{locale === 'ar' ? 'الخطوة ١ من ٥' : 'Step 01 / 05'}

{Q.step1.h}

{Q.step1.sub}

{Q.step1.options.map(o => ( ))}
); const Step2 = () => (
{locale === 'ar' ? 'الخطوة ٢ من ٥' : 'Step 02 / 05'}

{Q.step2.h}

{Q.step2.sub}

{Q.step2.trip.map((tt, i) => ( ))}
update('from', e.target.value)} />
update('to', e.target.value)} />
); const Step3 = () => (
{locale === 'ar' ? 'الخطوة ٣ من ٥' : 'Step 03 / 05'}

{Q.step3.h}

{Q.step3.sub}

update('depart', e.target.value)} />
update('ret', e.target.value)} />
update('pax', e.target.value)} />