// CalGrillz β Contact page (also handles event booking via #book anchor)
function CGWContactPage() {
const [topic, setTopic] = useState('general'); // 'general' | 'order' | 'event' | 'press'
const [form, setForm] = useState({ name: '', phone: '', email: '', message: '' });
const [event, setEvent] = useState({
occasion: '',
date: '',
headcount: 20,
style: 'pickup', // pickup | delivery | onsite
budget: '',
venue: '',
notes: '',
});
const [submitted, setSubmitted] = useState(false);
// Auto-jump to event if URL hash is #book
useEffect(() => {
if (typeof window !== 'undefined' && window.location.hash === '#book') {
setTopic('event');
const el = document.getElementById('book');
if (el) setTimeout(() => el.scrollIntoView({ behavior: 'instant' }), 100);
}
}, []);
const handleSubmit = (e) => {
e.preventDefault();
setSubmitted(true);
window.scrollTo({ top: 0, behavior: 'smooth' });
};
if (submitted) {
return (
setSubmitted(false)}/>
);
}
return (
us.'))}
sub={cgC('contact.hero.sub', 'Order question, event booking, press, or just to say hi β we read every message.')}
breadcrumbs={[{ label: 'Home', href: CG_URL('home', 'index.html') }, { label: 'Contact' }]}
image={cgC('contact.hero.image', 'hands-platter-2.jpg')}
/>
{/* Quick contact strip */}
} label="WhatsApp" value="Chat now" sub="Average reply: 6 min" href={'https://wa.me/' + cgC('contact.whatsapp', '2347085701097')} highlight/>
{/* LEFT: info */}
Visit the pit
Cocokalina, Agbor.
No 1 Cocokalina Close
Agbor 330221
Delta State, Nigeria
{cgC('contact.hours', 'Every day, 10am β 9pm')}
β Open now
Free on Cocokalina Close Β· gated
All Agbor Β· within ~45 min
{/* socials */}
Follow
@calgrillz on Instagram, TikTok & Facebook
{/* RIGHT: form */}
Send us a message
What's it about?
{/* Topic switcher */}
{[
{ id: 'general', label: 'General', icon: 'π¬' },
{ id: 'order', label: 'Order issue', icon: 'π' },
{ id: 'event', label: 'Event booking', icon: 'π' },
{ id: 'press', label: 'Press', icon: 'π°' },
].map(t => (
setTopic(t.id)} style={{
background: topic === t.id ? 'var(--cream)' : 'var(--charcoal-800)',
color: topic === t.id ? 'var(--charcoal-900)' : 'var(--cream)',
border: '1px solid ' + (topic === t.id ? 'var(--cream)' : 'var(--charcoal-700)'),
borderRadius: 12, padding: '14px 10px',
cursor: 'pointer', textAlign: 'left',
transition: 'all 0.15s',
}}>
{t.icon}
{t.label}
))}
{/* Map band */}
The location
Easier to find than the WhatsApp link suggests.
);
}
function QuickCard({ icon, label, value, sub, href, highlight }) {
return (
{icon}
);
}
function InfoBlock({ icon, label, children }) {
return (
);
}
function CField({ label, value, onChange, placeholder, type = 'text', mono, textarea, required }) {
const Input = textarea ? 'textarea' : 'input';
return (
{label}{required && Β· }
onChange(e.target.value)}
placeholder={placeholder}
type={textarea ? undefined : type}
rows={textarea ? 4 : undefined}
required={required}
style={{
width: '100%',
background: 'var(--charcoal-900)',
border: '1px solid var(--charcoal-700)',
borderRadius: 12, padding: '13px 16px',
color: 'var(--cream)',
fontFamily: mono ? 'var(--font-mono)' : 'inherit',
fontSize: 14, outline: 'none', resize: 'none',
letterSpacing: mono ? '0.04em' : 0,
}}
/>
);
}
function ContactSuccess({ topic, onReset }) {
const titles = {
general: 'Message sent.',
order: 'We\'re on it.',
event: 'Request received.',
press: 'Thanks for reaching out.',
};
const subs = {
general: 'We\'ll reply within 24 hours.',
order: 'A team member will WhatsApp you within an hour.',
event: 'We\'ll review and reply with a quote within 2 hours.',
press: 'A coordinator will get back within 24 hours.',
};
return (
<>
{Array.from({ length: 14 }).map((_, i) => (
))}
{titles[topic]}
{subs[topic]} Keep an eye on your phone β we like to follow up on WhatsApp first.
>
);
}
ReactDOM.createRoot(document.getElementById('root')).render( );