diff --git a/.github/workflows/automerge.yml b/.github/workflows/automerge.yml index 14fe922..94cf8b7 100644 --- a/.github/workflows/automerge.yml +++ b/.github/workflows/automerge.yml @@ -30,4 +30,5 @@ jobs: MERGE_LABELS: "automerge" MERGE_METHOD: "merge" MERGE_DELETE_BRANCH: "true" + MERGE_READY_STATE: "clean" UPDATE_METHOD: "rebase" diff --git a/apps/planner/app/components/ClientOnly.tsx b/apps/planner/app/components/ClientOnly.tsx new file mode 100644 index 0000000..4423f62 --- /dev/null +++ b/apps/planner/app/components/ClientOnly.tsx @@ -0,0 +1,17 @@ +import { useState, useEffect, type ReactNode } from "react"; + +export function ClientOnly({ + children, + fallback = null, +}: { + children: () => ReactNode; + fallback?: ReactNode; +}) { + const [mounted, setMounted] = useState(false); + + useEffect(() => { + setMounted(true); + }, []); + + return mounted ? <>{children()}> : <>{fallback}>; +} diff --git a/apps/planner/app/components/SessionView.tsx b/apps/planner/app/components/SessionView.tsx new file mode 100644 index 0000000..4876bdb --- /dev/null +++ b/apps/planner/app/components/SessionView.tsx @@ -0,0 +1,62 @@ +import { Suspense, lazy } from "react"; +import { useYjs } from "~/lib/use-yjs"; +import { useRouting } from "~/lib/use-routing"; + +const PlannerMap = lazy(() => + import("~/components/PlannerMap").then((m) => ({ default: m.PlannerMap })), +); +const WaypointSidebar = lazy(() => + import("~/components/WaypointSidebar").then((m) => ({ default: m.WaypointSidebar })), +); + +export function SessionView({ sessionId }: { sessionId: string }) { + const yjs = useYjs(sessionId); + const { isHost, computing, routeStats, requestRoute } = useRouting(yjs); + + if (!yjs) { + return ( +
Connecting...
+Connecting...
-Loading planner...
+Loading planner...