import { useCallback, useEffect, useState, type FormEvent } from "react"; import { createPortal } from "react-dom"; import { X } from "lucide-react"; import { postVisitorSessionQuestion } from "../lib/api"; import { getAttendeeToken } from "../lib/attendeeAuth"; import { notifyRewardFromApiData } from "../lib/rewardCelebration"; type AskQuestionModalProps = { open: boolean; onClose: () => void; eventId: string; sessionId: string; idSuffix?: string; }; export function AskQuestionModal({ open, onClose, eventId, sessionId, idSuffix = "", }: AskQuestionModalProps) { const [draft, setDraft] = useState(""); const [submitting, setSubmitting] = useState(false); const [submitError, setSubmitError] = useState(null); const inputId = `session-question-input${idSuffix}`; const close = useCallback(() => { onClose(); setDraft(""); setSubmitError(null); }, [onClose]); useEffect(() => { if (!open) return; const onKey = (e: KeyboardEvent) => { if (e.key === "Escape") close(); }; document.addEventListener("keydown", onKey); return () => document.removeEventListener("keydown", onKey); }, [open, close]); const handleSubmit = async (e: FormEvent) => { e.preventDefault(); const text = draft.trim(); if (!text) return; const eid = eventId.trim(); const sid = sessionId.trim(); if (!eid || !sid) return; setSubmitting(true); setSubmitError(null); try { const token = getAttendeeToken(); const out = await postVisitorSessionQuestion(sid, eid, { question: text, isAnonymous: !token, }); notifyRewardFromApiData(out); close(); } catch (err) { setSubmitError(err instanceof Error ? err.message : "Could not submit question."); } finally { setSubmitting(false); } }; if (!open) return null; return createPortal(