import { callAction } from "@agent-native/core/client/hooks"; import { useEffect, useState } from "react"; import { useParams, Navigate, useSearchParams } from "react-router"; import PresentationView from "@/components/presentation/PresentationView"; import { useDecks } from "@/context/DeckContext"; import type { Deck } from "@/context/DeckContext"; export default function Presentation() { const { id } = useParams<{ id: string }>(); const { getDeck, loading } = useDecks(); const [fallbackDeck, setFallbackDeck] = useState(null); const [fallbackState, setFallbackState] = useState< "idle" | "loading" | "missing" >("idle"); const [searchParams] = useSearchParams(); const contextDeck = getDeck(id || ""); const deck = contextDeck ?? fallbackDeck; useEffect(() => { if (!id || loading || contextDeck) { if (contextDeck) { setFallbackDeck(null); setFallbackState("idle"); } return; } let cancelled = false; setFallbackState("loading"); callAction("get-deck", { id }, { method: "GET" }) .then((data) => { if (!cancelled) { setFallbackDeck(data); setFallbackState("idle"); } }) .catch(() => { if (!cancelled) setFallbackState("missing"); }); return () => { cancelled = true; }; }, [contextDeck, id, loading]); if (loading || fallbackState === "loading") { return
; } if (!deck || !id || fallbackState === "missing") { return ; } const slideParam = searchParams.get("slide"); const parsedSlide = slideParam ? parseInt(slideParam, 10) : 1; const startSlide = Number.isFinite(parsedSlide) ? Math.max(0, parsedSlide - 1) : 0; return ( ); }