"use client"; import { useState } from "react"; import { boothSizes, exhibitorSectors } from "@/content/exhibit"; import { DataConsentField } from "@/components/forms/DataConsentField"; import { dataConsent } from "@/content/consent"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Checkbox } from "@/components/ui/checkbox"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; export function ExhibitorBoothForm() { const [status, setStatus] = useState<"idle" | "loading" | "success" | "error">("idle"); const [error, setError] = useState(""); const [consent, setConsent] = useState(false); const [sector, setSector] = useState(""); const [boothSize, setBoothSize] = useState(""); async function onSubmit(e: React.FormEvent) { e.preventDefault(); if (!consent) { setError(dataConsent.errorMessage); return; } if (!sector) { setError("Please select your industry / sector."); return; } if (!boothSize) { setError("Please select a preferred booth size."); return; } setStatus("loading"); setError(""); const form = e.currentTarget; const data = new FormData(form); try { const res = await fetch("/api/inquiry", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ intent: "exhibitor", firstName: data.get("firstName"), lastName: data.get("lastName"), name: `${data.get("firstName")} ${data.get("lastName")}`, email: data.get("email"), phone: data.get("phone"), jobTitle: data.get("jobTitle"), company: data.get("company"), companyWebsite: data.get("companyWebsite") || undefined, companyDescription: data.get("companyDescription"), sector, productsToAdvertise: data.get("productsToAdvertise"), boothSize, powerRequired: data.get("powerRequired") === "on", internetRequired: data.get("internetRequired") === "on", staffCount: data.get("staffCount") || undefined, marketingMaterials: data.get("marketingMaterials") || undefined, specialRequirements: data.get("specialRequirements") || undefined, message: data.get("boothGoals"), consent: true, }), }); const json = await res.json(); if (!res.ok || !json.ok) { throw new Error(json.error || "Something went wrong"); } setStatus("success"); form.reset(); setConsent(false); setSector(""); setBoothSize(""); } catch (err) { setStatus("error"); setError(err instanceof Error ? err.message : "Failed to send"); } } return (

Reserve your booth

Tell us about your company and what you plan to showcase. Our team will confirm availability and send package details.

Contact
Company & products