function QueueWithEvents() {
const widgetRef = useRef<HTMLElement>(null);
useEffect(() => {
const widget = widgetRef.current;
if (!widget) return;
const handleEnter = (e: CustomEvent) => {
analytics.track("queue_entered", { queueId: e.detail.queueId });
};
const handlePositionChange = (e: CustomEvent) => {
analytics.track("queue_position_change", { position: e.detail.position });
};
const handleAdmitted = (e: CustomEvent<{ token: string }>) => {
analytics.track("queue_admitted");
window.location.href = `/checkout?token=${e.detail.token}`;
};
widget.addEventListener("fanfare-queue-enter", handleEnter);
widget.addEventListener("fanfare-queue-position-change", handlePositionChange);
widget.addEventListener("fanfare-queue-admitted", handleAdmitted);
return () => {
widget.removeEventListener("fanfare-queue-enter", handleEnter);
widget.removeEventListener("fanfare-queue-position-change", handlePositionChange);
widget.removeEventListener("fanfare-queue-admitted", handleAdmitted);
};
}, []);
return <fanfare-queue-widget ref={widgetRef} queue-id="queue_123" />;
}