import React, { useEffect, useState } from "react"; import { QrCode, Radio } from "lucide-react"; import { AgendaQrModal } from "../agenda/AgendaQrModal"; import { useBreakpoint } from "../../hooks/useBreakpoint"; import { useAppNav } from "../../contexts/AppNavContext"; import { eventsApi } from "../../../services/api/events"; import type { Event } from "../../../services/api/types"; const headerBtnBase: React.CSSProperties = { display: "flex", alignItems: "center", gap: "6px", padding: "7px 14px", borderRadius: "var(--radius-button)", borderWidth: "1px", borderStyle: "solid", fontSize: "var(--text-sm)", fontFamily: "var(--font-noto-sans)", fontWeight: "var(--font-weight-medium)", cursor: "pointer", transition: "all 0.15s", }; export function EventHomeHeaderActions() { const { selectedEventId } = useAppNav(); const bp = useBreakpoint(); const isSmall = bp === "mobile" || bp === "tablet"; const [qrOpen, setQrOpen] = useState(false); const [liveActive, setLiveActive] = useState(false); const [qrEvent, setQrEvent] = useState(undefined); useEffect(() => { if (!qrOpen || !selectedEventId) { setQrEvent(undefined); return; } setQrEvent(undefined); let cancelled = false; void eventsApi.get(selectedEventId).then((res) => { if (!cancelled) setQrEvent(res.data ?? null); }); return () => { cancelled = true; }; }, [qrOpen, selectedEventId]); function openQr() { if (!selectedEventId) { window.alert("Select an event from the sidebar first."); return; } setQrOpen(true); } function toggleLive() { if (!liveActive && !window.confirm("Start broadcasting this event as Live? All participants will be notified.")) { return; } setLiveActive((v) => !v); } return ( <>
{qrOpen && selectedEventId && qrEvent !== undefined ? ( setQrOpen(false)} kind="event" joinCode={(qrEvent?.joinCode ?? "").trim()} label={qrEvent?.name ?? "Event"} /> ) : null} {qrOpen && selectedEventId && qrEvent === undefined ? (
Loading event…
) : null} ); }