// Multi-step Pre-arrival request form
const { useState: useStateF, useMemo: useMemoF } = React;
function PreArrivalForm({ t }) {
const [step, setStep] = useStateF(0);
const [data, setData] = useStateF({
facility: "",
tail: "",
aircraftType: "",
regCountry: "",
eta: "",
etd: "",
pax: "",
crew: "",
services: [],
notes: "",
name: "",
org: "",
email: "",
phone: "",
contactPref: t.prearrival.contactOptions[2],
});
const [errors, setErrors] = useStateF({});
const [submitted, setSubmitted] = useStateF(false);
const update = (k, v) => {
setData(d => ({ ...d, [k]: v }));
if (errors[k]) setErrors(e => ({ ...e, [k]: null }));
};
const toggleService = (s) => {
setData(d => ({
...d,
services: d.services.includes(s) ? d.services.filter(x => x !== s) : [...d.services, s]
}));
};
const validateStep = (s) => {
const e = {};
if (s === 0 && !data.facility) e.facility = true;
if (s === 1) {
if (!data.tail) e.tail = true;
if (!data.aircraftType) e.aircraftType = true;
}
if (s === 2) {
if (!data.eta) e.eta = true;
}
if (s === 4) {
if (!data.name) e.name = true;
if (!data.email) e.email = true;
}
setErrors(e);
return Object.keys(e).length === 0;
};
const next = () => {
if (!validateStep(step)) return;
if (step < 4) setStep(s => s + 1);
else handleSubmit();
};
const back = () => setStep(s => Math.max(0, s - 1));
const handleSubmit = () => {
if (!validateStep(4)) return;
setSubmitted(true);
};
const goStep = (i) => {
if (i <= step || submitted) {
setStep(i);
}
};
if (submitted) {
return (
✓
REQ-{Math.floor(Math.random() * 90000 + 10000)} · CRM SYNCED
{t.prearrival.successTitle}
{t.prearrival.successLede}
- Facility
- {data.facility}
- Tail
- {data.tail}
- Type
- {data.aircraftType}
- ETA · ETD
- {data.eta} → {data.etd || "—"}
- PAX · Crew
- {data.pax || "—"} · {data.crew || "—"}
- Services
- {data.services.join(", ") || "—"}
- Contact
- {data.name}, {data.org || "—"}
{data.email} · {data.phone || "—"}
{t.prearrival.successContact}
);
}
return (
{/* Stepper */}
{t.prearrival.steps.map((s, i) => (
))}
{/* Body */}
{step === 0 && (
{t.prearrival.steps[0]}
{t.prearrival.facilityLabel}
{t.prearrival.facilityHelp}
{[
{ v: "Dubai International — DXB", code: "OMDB" },
{ v: "Dubai World Central — DWC", code: "OMDW" },
].map((f, i) => (
))}
{errors.facility &&
{t.prearrival.requiredMsg}
}
)}
{step === 1 && (
{t.prearrival.steps[1]}
{t.prearrival.typeLabel}
)}
{step === 2 && (
{t.prearrival.steps[2]}
{t.prearrival.eta} / {t.prearrival.etd}
)}
{step === 3 && (
{t.prearrival.steps[3]}
{t.prearrival.servicesLabel}
{t.prearrival.services.map((s, i) => (
))}
)}
{step === 4 && (
{t.prearrival.steps[4]}
{t.prearrival.nameLabel}
)}
{t.prearrival.stepsMeta} {step + 1} {t.prearrival.of} 5
{step > 0 && (
)}
);
}
function PreArrivalSection({ t }) {
return (
{t.prearrival.eyebrow}
{t.prearrival.title}
{t.prearrival.sub}
{t.prearrival.checklist.map((c, i) => (
{c}
))}
);
}
Object.assign(window, { PreArrivalForm, PreArrivalSection });