// Contact / Start a project — multi-step qualified enquiry function Contact({ onNav }) { const { SECTORS } = window.DI; const [step, setStep] = useState(1); const [data, setData] = useState({ sector: "", projectType: "", size: "", location: "Dubai", timeline: "", name: "", company: "", email: "", phone: "", brief: "", file: null, }); const [errors, setErrors] = useState({}); const [submitted, setSubmitted] = useState(false); const update = (k, v) => setData((d) => ({ ...d, [k]: v })); const validateStep = (s) => { const e = {}; if (s === 1) { if (!data.sector) e.sector = "Pick a sector"; if (!data.projectType) e.projectType = "Pick a project type"; } if (s === 2) { if (!data.size) e.size = "Approximate area helps us route the right division"; if (!data.timeline) e.timeline = "Pick a timeline"; } if (s === 3) { if (!data.name) e.name = "Required"; if (!data.company) e.company = "Required"; if (!data.email) e.email = "Required"; else if (!/^\S+@\S+\.\S+$/.test(data.email)) e.email = "Use a valid email"; if (!data.brief) e.brief = "Tell us a sentence about the brief"; } setErrors(e); return Object.keys(e).length === 0; }; const onSubmit = () => { if (!validateStep(3)) return; setSubmitted(true); }; const sectorOptions = SECTORS.filter((s) => s.key !== "all"); const projectTypes = ["Office / corporate", "Showroom / retail", "Hotel / hospitality", "Restaurant / F&B", "Healthcare / clinic", "Education", "Government / institutional", "Joinery / furniture only", "Other"]; const timelines = ["< 12 weeks", "3 – 6 months", "6 – 12 months", "12+ months", "Not sure yet"]; const sizeOptions = ["< 5,000 sq ft", "5 – 20,000 sq ft", "20 – 50,000 sq ft", "50 – 100,000 sq ft", "100,000+ sq ft"]; return (
Start a project · Response within 1 working day

Tell us your brief. We'll route it to the right division.

Step {step} of 3
{[1, 2, 3].map((n) => ( ))}
{/* Form column */}
{submitted ? (
Brief received

Thanks, {data.name.split(" ")[0]}.

Your brief is on its way to {data.sector === "banking" ? "our banking & finance lead" : data.sector === "hospitality" ? "our F&B / hospitality lead" : "the corporate team"}. Expect a call from us within one working day with an indicative timeline and the right division on the line.

Reference
DI-{new Date().getFullYear()}-{Math.floor(Math.random() * 9000 + 1000)}
Sector
{sectorOptions.find((s) => s.key === data.sector)?.label}
Project type
{data.projectType}
Approx. size
{data.size}
Timeline
{data.timeline}
) : ( <> {step === 1 && (

01 · About the project

{sectorOptions.map((s) => ( ))}
{errors.sector && {errors.sector}}
{projectTypes.map((t) => ( ))}
{errors.projectType && {errors.projectType}}
)} {step === 2 && (

02 · Scope & timeline

{sizeOptions.map((t) => ( ))}
{errors.size && {errors.size}}
{["Dubai", "Abu Dhabi", "Sharjah", "GCC — other", "International"].map((t) => ( ))}
{timelines.map((t) => ( ))}
{errors.timeline && {errors.timeline}}
)} {step === 3 && (

03 · You & the brief

{ update("name", e.target.value); setErrors((er) => ({ ...er, name: null })); }} placeholder="Full name" /> {errors.name && {errors.name}}
{ update("company", e.target.value); setErrors((er) => ({ ...er, company: null })); }} placeholder="Organisation" /> {errors.company && {errors.company}}
{ update("email", e.target.value); setErrors((er) => ({ ...er, email: null })); }} placeholder="you@company.com" /> {errors.email && {errors.email}}
update("phone", e.target.value)} placeholder="+971 …" />
{errors.brief && {errors.brief}}
update("file", e.target.files[0]?.name || null)} />
)} )}
{/* Side column */}
Dubai HQ

Office No. 212, Hamsah Complex
P.O. Box 62522, Dubai
United Arab Emirates

+971 4 379 5902
Abu Dhabi

Unit D101, Hanging Garden Tower
Sector E3, Plot C67 / C154
Al Nahlah St, Al Danah

+971 2 448 2286
Email
info@design-infinity.com
WhatsApp — pending verified number
Hours

Confirm opening hours with the team on call — published hours pending client sign-off.

); } Object.assign(window, { Contact });