import { useEffect, useState } from "react"; import { Link, useSearchParams } from "react-router-dom"; import { HeaderMobile } from "../components/HeaderMobile"; import { MobileShell } from "../components/MobileShell"; import { DynamicFeedbackForm } from "../components/DynamicFeedbackForm"; import { useAutoNavigateToLiveQuizPoll } from "../hooks/useAutoNavigateToLiveQuizPoll"; import { useEventRegistrationSettings } from "../hooks/useEventRegistrationSettings"; import { getVisitorFeedbackFormSchema, getVisitorLoginPreview, resolveVisitorFeedbackFormSchema, type VisitorPublicFeedbackForm, } from "../lib/api"; import { readStoredVisitorContext } from "../types/visitorContext"; export function FeedbackPage() { const [searchParams] = useSearchParams(); const formId = searchParams.get("form_id")?.trim() || ""; const urlEventId = searchParams.get("event_id")?.trim() || ""; const urlSessionId = searchParams.get("session_id")?.trim() || ""; const ctx = readStoredVisitorContext(); const eventId = urlEventId || ctx?.eventId || ""; const sessionId = urlSessionId || ctx?.sessionId || ""; useAutoNavigateToLiveQuizPoll({ eventId, sessionId, enabled: Boolean(eventId && sessionId), }); const [eventSnapshot, setEventSnapshot] = useState( ctx?.eventId === eventId && ctx.event ? ctx.event : null, ); const [schema, setSchema] = useState(null); const [schemaLoading, setSchemaLoading] = useState(false); const [schemaErr, setSchemaErr] = useState(null); useEffect(() => { if (!eventId) { setEventSnapshot(null); return; } if (ctx?.eventId === eventId && ctx.event) { setEventSnapshot(ctx.event); return; } let cancelled = false; getVisitorLoginPreview(eventId) .then((ev) => { if (!cancelled) setEventSnapshot(ev); }) .catch(() => { if (!cancelled) setEventSnapshot(null); }); return () => { cancelled = true; }; }, [eventId, ctx?.eventId, ctx?.event]); useEffect(() => { if (!eventId) { setSchema(null); setSchemaErr(null); setSchemaLoading(false); return; } let cancelled = false; setSchemaLoading(true); setSchemaErr(null); const load = formId ? getVisitorFeedbackFormSchema(eventId, formId) : resolveVisitorFeedbackFormSchema(eventId, { sessionId, purpose: "feedback" }); load .then((s) => { if (!cancelled) setSchema(s); }) .catch((e) => { if (!cancelled) { setSchema(null); setSchemaErr(e instanceof Error ? e.message : "Could not load form."); } }) .finally(() => { if (!cancelled) setSchemaLoading(false); }); return () => { cancelled = true; }; }, [formId, eventId, sessionId]); const reg = useEventRegistrationSettings(eventSnapshot); if (!eventId) { return (

Feedback

Open feedback from your event or session link.

Home
); } if (!reg.enableFeedback) { return (

Feedback

Feedback is disabled for this event.

Back to event
); } return (

{schema?.name || "Feedback"}

{schemaLoading ? (

Loading form…

) : schemaErr ? (

{schemaErr}

Ask the organizer to publish an active feedback form for this event.

Back to event
) : schema ? (
) : null}
); }