import { Suspense, lazy, useState, useCallback, useEffect } from "react"; import { useTranslation } from "react-i18next"; import * as Sentry from "@sentry/react"; import { useYjs } from "~/lib/use-yjs"; import { useRouting } from "~/lib/use-routing"; import { ProfileSelector } from "~/components/ProfileSelector"; import { ExportButton } from "~/components/ExportButton"; import { SaveToJournalButton } from "~/components/SaveToJournalButton"; import { YjsDebugPanel } from "~/components/YjsDebugPanel"; const PlannerMap = lazy(() => import("~/components/PlannerMap").then((m) => ({ default: m.PlannerMap })), ); const WaypointSidebar = lazy(() => import("~/components/WaypointSidebar").then((m) => ({ default: m.WaypointSidebar })), ); const ElevationChart = lazy(() => import("~/components/ElevationChart").then((m) => ({ default: m.ElevationChart })), ); interface SessionViewProps { sessionId: string; callbackUrl?: string; callbackToken?: string; returnUrl?: string; initialWaypoints?: Array<{ lat: number; lon: number; name?: string }>; } export function SessionView({ sessionId, callbackUrl, callbackToken, returnUrl, initialWaypoints }: SessionViewProps) { const { t } = useTranslation("planner"); useEffect(() => { Sentry.setTag("session_id", sessionId); }, [sessionId]); const yjs = useYjs(sessionId, initialWaypoints); const { isHost, computing, routeStats, requestRoute } = useRouting(yjs); const [highlightPosition, setHighlightPosition] = useState<[number, number] | null>(null); const handleElevationHover = useCallback((pos: [number, number] | null) => { setHighlightPosition(pos); }, []); if (!yjs) { return (
{t("connecting")}