// Quote page — multi-field form with file upload and live WhatsApp deeplink preview const { useState: useStateQ, useRef: useRefQ, useMemo: useMemoQ } = React; function Quote() { const { go } = useRouter(); const [form, setForm] = useStateQ({ name: '', company: '', phone: '', email: '', service: 'Business Cards', quantity: '500', size: '90 × 55 mm', finish: 'Matt laminated', deadline: '', message: '', }); const [files, setFiles] = useStateQ([]); const [drag, setDrag] = useStateQ(false); const [submitted, setSubmitted] = useStateQ(false); const fileInput = useRefQ(null); const set = (k) => (e) => setForm(f => ({ ...f, [k]: e.target.value })); const addFiles = (newFiles) => { const arr = Array.from(newFiles).map(f => ({ name: f.name, size: f.size, type: f.type })); setFiles(prev => [...prev, ...arr]); }; const removeFile = (i) => setFiles(prev => prev.filter((_, idx) => idx !== i)); const onDrop = (e) => { e.preventDefault(); setDrag(false); if (e.dataTransfer.files) addFiles(e.dataTransfer.files); }; const summary = useMemoQ(() => { const lines = [ `Hi Arabian Prints, I'd like a quote.`, ``, `• Service: ${form.service}`, `• Quantity: ${form.quantity}`, `• Size: ${form.size}`, `• Finish: ${form.finish}`, form.deadline ? `• Deadline: ${form.deadline}` : null, form.name ? `• Name: ${form.name}` : null, form.company ? `• Company: ${form.company}` : null, files.length ? `• Artwork: ${files.length} file${files.length > 1 ? 's' : ''} attached` : null, form.message ? `\n${form.message}` : null, ].filter(Boolean); return lines.join('\n'); }, [form, files]); const isValid = form.name.trim() && form.phone.trim() && form.service; if (submitted) { return (
{ e.preventDefault(); go('home'); }}>Home / Quote sent

Quote sent.
We'll reply within the hour.

Thanks {form.name.split(' ')[0]}. Your brief for {form.quantity} × {form.service} is in our queue. We've also opened a WhatsApp draft so you can fast-track the conversation if you'd like.

Open WhatsApp chat { e.preventDefault(); setSubmitted(false); }}>Submit another quote { e.preventDefault(); go('home'); }}>Back to home
Reference

Ticket #AP-{Math.floor(Math.random() * 90000 + 10000)}

Service
{form.service}
Quantity
{form.quantity}
Deadline
{form.deadline || '— flexible'}
Files
{files.length} attached
); } return (
{ e.preventDefault(); go('home'); }}>Home / Get a Quote

Get a quote.
Reply within the hour.

Tell us the format, quantity and deadline — attach artwork if you have it. We'll come back with a fixed price, free design and a delivery slot.

{ e.preventDefault(); if (isValid) setSubmitted(true); }}>
Step 01 — About you
Step 02 — The job