From c9eabba764aedab7c3f472d50592460f20db91af Mon Sep 17 00:00:00 2001 From: Satya Patel Date: Mon, 27 Apr 2026 19:38:06 -0700 Subject: [PATCH 1/2] Revert "Migrate v1 keypad loading screen to v2 as a separate page (#3788)" This reverts commit 95cff6b36ae00c6c5f49d962a147d4f3583ff213. --- .../_dashboard/pending/$pendingId/page.tsx | 218 +++++++++--------- .../KeypadLoader/KeypadLoader.css | 146 ------------ .../KeypadLoader/KeypadLoader.tsx | 110 --------- .../KeypadLoader/index.ts | 1 - .../StepProgress/StepProgress.css | 123 ---------- .../StepProgress/StepProgress.tsx | 184 --------------- .../StepProgress/index.ts | 1 - .../V2WorkspaceLoadingView.tsx | 68 ------ .../assets/key-single.png | Bin 37543 -> 0 bytes .../assets/keypad-base.png | Bin 69229 -> 0 bytes .../V2WorkspaceLoadingView/index.ts | 1 - .../$workspaceId/page.tsx | 38 --- .../_dashboard/v2-workspace/layout.tsx | 18 +- 13 files changed, 116 insertions(+), 792 deletions(-) delete mode 100644 apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/KeypadLoader/KeypadLoader.css delete mode 100644 apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/KeypadLoader/KeypadLoader.tsx delete mode 100644 apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/KeypadLoader/index.ts delete mode 100644 apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/StepProgress/StepProgress.css delete mode 100644 apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/StepProgress/StepProgress.tsx delete mode 100644 apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/StepProgress/index.ts delete mode 100644 apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/V2WorkspaceLoadingView.tsx delete mode 100644 apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/assets/key-single.png delete mode 100644 apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/assets/keypad-base.png delete mode 100644 apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/index.ts delete mode 100644 apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/page.tsx diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/pending/$pendingId/page.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/pending/$pendingId/page.tsx index 933c264fc8b..d144b347215 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/pending/$pendingId/page.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/pending/$pendingId/page.tsx @@ -5,7 +5,7 @@ import { useQuery } from "@tanstack/react-query"; import { createFileRoute, useNavigate } from "@tanstack/react-router"; import { useCallback, useEffect, useRef, useState } from "react"; import { GoGitBranch } from "react-icons/go"; -import { HiExclamationTriangle } from "react-icons/hi2"; +import { HiCheck, HiExclamationTriangle } from "react-icons/hi2"; import { useHostTargetUrl } from "renderer/hooks/host-service/useHostTargetUrl"; import { authClient } from "renderer/lib/auth-client"; import { electronTrpc } from "renderer/lib/electron-trpc"; @@ -15,7 +15,6 @@ import { clearAttachments, loadAttachments, } from "renderer/lib/pending-attachment-store"; -import { V2WorkspaceLoadingView } from "renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView"; import { useAdoptWorktree } from "renderer/routes/_authenticated/components/DashboardNewWorkspaceModal/hooks/useAdoptWorktree"; import { useCheckoutDashboardWorkspace } from "renderer/routes/_authenticated/components/DashboardNewWorkspaceModal/hooks/useCheckoutDashboardWorkspace"; import { useCreateDashboardWorkspace } from "renderer/routes/_authenticated/components/DashboardNewWorkspaceModal/hooks/useCreateDashboardWorkspace"; @@ -23,7 +22,6 @@ import { useDashboardSidebarState } from "renderer/routes/_authenticated/hooks/u import { useCollections } from "renderer/routes/_authenticated/providers/CollectionsProvider"; import type { PendingWorkspaceRow } from "renderer/routes/_authenticated/providers/CollectionsProvider/dashboardSidebarLocal/schema"; import { useLocalHostService } from "renderer/routes/_authenticated/providers/LocalHostServiceProvider"; -import type { WorkspaceInitStep } from "shared/types/workspace-init"; import type { ResolvedPrContent } from "./buildForkAgentLaunch"; import { buildAdoptPayload, @@ -279,8 +277,7 @@ function PendingWorkspacePage() { }, [pending, fireIntent]); // Poll host-service for step-by-step progress (fork + checkout only; - // adopt is fast and doesn't instrument progress). Drives the keypad-loader - // off real backend state so keys press as steps advance. + // adopt is fast and doesn't instrument progress). const intentHasProgress = pending?.intent === "fork" || pending?.intent === "checkout"; const hostUrl = useHostTargetUrl(pending?.hostTarget ?? null); @@ -298,7 +295,7 @@ function PendingWorkspacePage() { enabled: pending?.status === "creating" && !!hostUrl && intentHasProgress, }); - const loaderStep = mapHostProgressToInitStep(progress?.steps); + const steps = progress?.steps ?? []; const STALE_THRESHOLD_MS = 2 * 60 * 1000; const [now, setNow] = useState(Date.now()); @@ -374,62 +371,12 @@ function PendingWorkspacePage() { ); } - const creatingTitle = + const creatingLabel = pending.intent === "adopt" - ? "Adopting worktree" + ? "Adopting worktree..." : pending.intent === "checkout" - ? "Checking out branch" - : "Setting up workspace"; - - // Render the keypad through the "succeeded" hold (and during the brief - // pre-sync window before that) so the last key animates to pressed — - // the host clears progress without ever flagging "registering: done", - // so the success transition is the only signal we have for that frame. - const showKeypad = - pending.status === "creating" || - (pending.status === "succeeded" && !(syncTimedOut && !workspaceSynced)); - - if (showKeypad) { - const isFinalizing = pending.status === "succeeded"; - return ( - - {!isFinalizing && ( - - )} - {isFinalizing && pending.warnings.length > 0 && ( - - )} - - ); - } + ? "Checking out branch..." + : "Creating workspace..."; return (
@@ -442,30 +389,59 @@ function PendingWorkspacePage() {
- {pending.status === "succeeded" && syncTimedOut && !workspaceSynced && ( -
-
- - - Workspace was created but hasn't synced to this device yet. - Check your connection. + {pending.status === "creating" && ( +
+
+

+ {isStale + ? "This is taking longer than expected..." + : creatingLabel} +

+ + {elapsedLabel}
-
- - + {intentHasProgress && steps.length > 0 ? ( +
+ {steps.map((step) => ( +
+ {step.status === "done" ? ( + + ) : step.status === "active" ? ( +
+
+
+ ) : ( +
+
+
+ )} + + {step.label} + +
+ ))} +
+ ) : ( + // Adopt has no host-side progress steps — show a generic spinner. +
+
+
+
+
+ )} +
+ + +
+
+ ) : ( +
+
+ + Workspace ready — opening... +
+ {pending.warnings.length > 0 && ( +
    + {pending.warnings.map((w) => ( +
  • + + {w} +
  • + ))} +
+ )} +
+ ))} + {pending.status === "failed" && (
@@ -518,24 +551,3 @@ function PendingWorkspacePage() {
); } - -type HostProgressStep = { - id: string; - label: string; - status: "pending" | "active" | "done"; -}; - -// Maps the host-service's 3-step progress (ensuring_repo → creating_worktree -// → registering) onto the v1 keypad's step vocabulary. Skipped keys (fetching, -// copying_config) press through quickly when the keypad jumps past them. -function mapHostProgressToInitStep( - steps: HostProgressStep[] | null | undefined, -): WorkspaceInitStep | undefined { - if (!steps || steps.length === 0) return undefined; - const byId = new Map(steps.map((s) => [s.id, s.status])); - if (byId.get("registering") === "done") return "ready"; - if (byId.get("registering") === "active") return "finalizing"; - if (byId.get("creating_worktree") === "active") return "creating_worktree"; - if (byId.get("ensuring_repo") === "active") return "syncing"; - return "pending"; -} diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/KeypadLoader/KeypadLoader.css b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/KeypadLoader/KeypadLoader.css deleted file mode 100644 index 07730377568..00000000000 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/KeypadLoader/KeypadLoader.css +++ /dev/null @@ -1,146 +0,0 @@ -.keypad-loader { - --travel: 26; - position: relative; - aspect-ratio: 400 / 310; - display: flex; - place-items: center; - width: clamp(260px, 34vw, 420px); - transform-style: preserve-3d; - user-select: none; -} - -.keypad-loader__base { - position: absolute; - bottom: 0; - width: 100%; - pointer-events: none; -} - -.keypad-loader__base img { - width: 100%; - display: block; -} - -.keypad-loader__key { - position: absolute; - width: 21%; - height: 24%; - transform-style: preserve-3d; - clip-path: polygon( - 0 0, - 54% 0, - 89% 24%, - 100% 70%, - 54% 100%, - 46% 100%, - 0 69%, - 12% 23%, - 47% 0% - ); - mask: url("../assets/key-single.png") 50% 50% / 100% 100%; - -webkit-mask: url("../assets/key-single.png") 50% 50% / 100% 100%; -} - -.keypad-loader__key--one { - left: 13.5%; - bottom: 57.2%; -} -.keypad-loader__key--two { - left: 25.8%; - bottom: 48.5%; -} -.keypad-loader__key--three { - left: 38%; - bottom: 39.2%; -} -.keypad-loader__key--four { - left: 50.4%; - bottom: 30.2%; -} -.keypad-loader__key--five { - left: 62.7%; - bottom: 21%; -} - -.keypad-loader__mask { - width: 100%; - height: 100%; - display: inline-block; -} - -.keypad-loader__content { - width: 100%; - height: 100%; - display: inline-block; - position: relative; - container-type: inline-size; - transition: - translate 0.7s cubic-bezier(0.22, 1, 0.36, 1), - filter 0.7s ease-out; -} - -.keypad-loader__content img { - position: absolute; - top: 0; - left: 50%; - width: 96%; - translate: -50% 1%; - pointer-events: none; - filter: hue-rotate(118deg) saturate(1.15) brightness(0.92); - transition: filter 0.7s ease-out; -} - -.keypad-loader__key[data-pressed="true"] .keypad-loader__content { - translate: 0 calc(var(--travel) * 1%); -} - -.keypad-loader__key[data-pressed="true"] .keypad-loader__content img { - filter: hue-rotate(118deg) saturate(1.35) brightness(1.05); -} - -.keypad-loader__key[data-active="true"] .keypad-loader__content { - animation: keypad-loader-bob 2.2s ease-in-out infinite; -} - -@keyframes keypad-loader-bob { - 0%, - 100% { - translate: 0 0; - } - 50% { - translate: 0 calc(var(--travel) * 0.28%); - } -} - -.keypad-loader__text { - position: absolute; - top: 5%; - left: 0; - width: 52%; - height: 62%; - z-index: 21; - font-size: 18cqi; - color: #fff; - translate: 45% -16%; - transform: rotateX(36deg) rotateY(45deg) rotateX(-90deg); - display: grid; - place-items: center; - filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.45)); -} - -.keypad-loader__text svg { - width: 62%; - height: 62%; -} - -.keypad-loader__key[data-pressed="true"] .keypad-loader__text { - opacity: 0.85; -} - -@media (prefers-reduced-motion: reduce) { - .keypad-loader__content, - .keypad-loader__key[data-active="true"] .keypad-loader__content { - transition: none; - animation: none; - } -} diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/KeypadLoader/KeypadLoader.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/KeypadLoader/KeypadLoader.tsx deleted file mode 100644 index ef5f10be5f9..00000000000 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/KeypadLoader/KeypadLoader.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import { cn } from "@superset/ui/utils"; -import type { ComponentType } from "react"; -import { - LuDatabase, - LuDownload, - LuFileCog, - LuGitBranch, - LuRefreshCw, -} from "react-icons/lu"; -import { - getStepIndex, - type WorkspaceInitStep, -} from "shared/types/workspace-init"; -import keySingleUrl from "../assets/key-single.png"; -import keypadBaseUrl from "../assets/keypad-base.png"; -import "./KeypadLoader.css"; - -type KeyId = "one" | "two" | "three" | "four" | "five"; - -interface KeyDef { - id: KeyId; - pressedAfter: WorkspaceInitStep; - activeSteps: readonly WorkspaceInitStep[]; - Icon: ComponentType<{ className?: string }>; - label: string; -} - -const KEYS: readonly KeyDef[] = [ - { - id: "one", - pressedAfter: "verifying", - activeSteps: ["pending", "syncing", "verifying"], - Icon: LuRefreshCw, - label: "Syncing", - }, - { - id: "two", - pressedAfter: "fetching", - activeSteps: ["fetching"], - Icon: LuDownload, - label: "Fetching", - }, - { - id: "three", - pressedAfter: "creating_worktree", - activeSteps: ["creating_worktree"], - Icon: LuGitBranch, - label: "Creating worktree", - }, - { - id: "four", - pressedAfter: "copying_config", - activeSteps: ["copying_config"], - Icon: LuFileCog, - label: "Copying config", - }, - { - id: "five", - pressedAfter: "finalizing", - activeSteps: ["finalizing"], - Icon: LuDatabase, - label: "Finalizing", - }, -]; - -interface KeypadLoaderProps { - currentStep: WorkspaceInitStep; - className?: string; -} - -export function KeypadLoader({ currentStep, className }: KeypadLoaderProps) { - const currentIdx = getStepIndex(currentStep); - - return ( -
k.activeSteps.includes(currentStep))?.label ?? - "Preparing" - }`} - > -
- -
- {KEYS.map(({ id, pressedAfter, activeSteps, Icon }) => { - const thresholdIdx = getStepIndex(pressedAfter); - const isPressed = currentIdx > thresholdIdx; - const isActive = activeSteps.includes(currentStep); - return ( -
- - - - - - - - -
- ); - })} -
- ); -} diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/KeypadLoader/index.ts b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/KeypadLoader/index.ts deleted file mode 100644 index d2bb8f2de8f..00000000000 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/KeypadLoader/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { KeypadLoader } from "./KeypadLoader"; diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/StepProgress/StepProgress.css b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/StepProgress/StepProgress.css deleted file mode 100644 index 828f1e522b9..00000000000 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/StepProgress/StepProgress.css +++ /dev/null @@ -1,123 +0,0 @@ -.step-progress { - position: relative; - width: 100%; - max-width: 20rem; - height: 1.75rem; - overflow: hidden; - margin: 0 auto; - mask-image: linear-gradient( - to bottom, - transparent, - black 35%, - black 65%, - transparent - ); - -webkit-mask-image: linear-gradient( - to bottom, - transparent, - black 35%, - black 65%, - transparent - ); -} - -.step-progress__list { - position: relative; - width: 100%; - height: 100%; -} - -.step-progress__item { - position: absolute; - inset: 0; - display: flex; - align-items: center; - justify-content: center; - gap: 0.5rem; - transition: - opacity 0.55s cubic-bezier(0.22, 1, 0.36, 1), - transform 0.55s cubic-bezier(0.22, 1, 0.36, 1), - color 0.3s ease-out; - will-change: transform, opacity; -} - -.step-progress__icon { - display: grid; - place-items: center; - font-size: 0.875rem; - flex-shrink: 0; -} - -.step-progress__check-stroke { - stroke: var(--background, #fff); -} - -.step-progress__title { - font-size: 0.8125rem; - font-weight: 500; - line-height: 1; - display: inline-flex; - align-items: baseline; -} - -.step-progress__ellipsis { - display: inline-flex; - width: 0.9em; - margin-left: 0.05em; - letter-spacing: 0.05em; -} - -.step-progress__ellipsis-dot { - visibility: hidden; - animation: step-progress-dot-1 1.6s steps(1, end) infinite; -} - -.step-progress__ellipsis-dot:nth-child(2) { - animation-name: step-progress-dot-2; -} - -.step-progress__ellipsis-dot:nth-child(3) { - animation-name: step-progress-dot-3; -} - -@keyframes step-progress-dot-1 { - 0% { - visibility: hidden; - } - 25%, - 100% { - visibility: visible; - } -} - -@keyframes step-progress-dot-2 { - 0%, - 25% { - visibility: hidden; - } - 50%, - 100% { - visibility: visible; - } -} - -@keyframes step-progress-dot-3 { - 0%, - 50% { - visibility: hidden; - } - 75%, - 100% { - visibility: visible; - } -} - -@media (prefers-reduced-motion: reduce) { - .step-progress__item { - transition: none; - } - .step-progress__ellipsis-dot { - animation: none; - visibility: visible; - } -} diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/StepProgress/StepProgress.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/StepProgress/StepProgress.tsx deleted file mode 100644 index 6c6d8b0454e..00000000000 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/StepProgress/StepProgress.tsx +++ /dev/null @@ -1,184 +0,0 @@ -import { cn } from "@superset/ui/utils"; -import { useEffect, useState } from "react"; -import { - getStepIndex, - INIT_STEP_MESSAGES, - INIT_STEP_ORDER, - type WorkspaceInitStep, -} from "shared/types/workspace-init"; -import "./StepProgress.css"; - -const DONE_HOLD_MS = 750; - -const DISPLAY_STEPS: readonly WorkspaceInitStep[] = INIT_STEP_ORDER.filter( - (s) => s !== "ready", -); - -type StepState = "waiting" | "progress" | "done"; - -interface StepProgressProps { - currentStep: WorkspaceInitStep; -} - -export function StepProgress({ currentStep }: StepProgressProps) { - const targetIdx = getStepIndex(currentStep); - const [renderIdx, setRenderIdx] = useState(targetIdx); - const [holdDoneIdx, setHoldDoneIdx] = useState(null); - - useEffect(() => { - if (targetIdx === renderIdx) { - setHoldDoneIdx(null); - return; - } - if (targetIdx < renderIdx) { - setRenderIdx(targetIdx); - setHoldDoneIdx(null); - return; - } - setHoldDoneIdx(renderIdx); - const t = window.setTimeout(() => { - setHoldDoneIdx(null); - setRenderIdx((prev) => Math.min(prev + 1, targetIdx)); - }, DONE_HOLD_MS); - return () => window.clearTimeout(t); - }, [targetIdx, renderIdx]); - - return ( -
-
- {DISPLAY_STEPS.map((step) => { - const idx = getStepIndex(step); - const distance = idx - renderIdx; - const isHeldDone = holdDoneIdx === idx; - const state: StepState = isHeldDone - ? "done" - : distance < 0 - ? "done" - : distance === 0 - ? "progress" - : "waiting"; - const fade = Math.abs(distance); - - return ( -
- - - - - {stripEllipsis(INIT_STEP_MESSAGES[step])} - {state === "progress" ? : null} - -
- ); - })} -
-
- ); -} - -function stripEllipsis(s: string) { - return s.replace(/[.…]+$/, ""); -} - -function StepIcon({ state }: { state: StepState }) { - if (state === "done") { - return ; - } - if (state === "progress") { - return ; - } - return ; -} - -function CheckCircle() { - return ( - - ); -} - -function EmptyCircle() { - const angles = Array.from({ length: 16 }, (_, i) => (360 / 16) * i); - return ( - - ); -} - -function HalfCircle() { - return ( - - ); -} - -function Ellipsis() { - return ( - - ); -} diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/StepProgress/index.ts b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/StepProgress/index.ts deleted file mode 100644 index 18126b94971..00000000000 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/StepProgress/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { StepProgress } from "./StepProgress"; diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/V2WorkspaceLoadingView.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/V2WorkspaceLoadingView.tsx deleted file mode 100644 index 806015907ae..00000000000 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/V2WorkspaceLoadingView.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import type { ReactNode } from "react"; -import { useEffect, useState } from "react"; -import { - INIT_STEP_ORDER, - type WorkspaceInitStep, -} from "shared/types/workspace-init"; -import { KeypadLoader } from "./KeypadLoader"; -import { StepProgress } from "./StepProgress"; - -interface V2WorkspaceLoadingViewProps { - workspaceName?: string; - title?: string; - description?: string; - children?: ReactNode; - /** - * Drives the keypad directly. When omitted, the loader cycles through - * steps on a short timer so the keys still animate even with no real - * backend progress data (e.g. adopt intent, cold-load route). - */ - currentStep?: WorkspaceInitStep; -} - -const VISIBLE_STEPS: readonly WorkspaceInitStep[] = INIT_STEP_ORDER.filter( - (s) => s !== "ready", -); - -const STEP_INTERVAL_MS = 400; - -export function V2WorkspaceLoadingView({ - workspaceName, - title = "Loading workspace", - description = "Hang tight while we get things ready", - children, - currentStep: currentStepProp, -}: V2WorkspaceLoadingViewProps) { - const [stepIdx, setStepIdx] = useState(0); - - useEffect(() => { - if (currentStepProp !== undefined) return; - const id = window.setInterval(() => { - setStepIdx((prev) => Math.min(prev + 1, VISIBLE_STEPS.length - 1)); - }, STEP_INTERVAL_MS); - return () => window.clearInterval(id); - }, [currentStepProp]); - - const currentStep = currentStepProp ?? VISIBLE_STEPS[stepIdx] ?? "pending"; - - return ( -
-
- - -
-

{title}

- {workspaceName ? ( -

{workspaceName}

- ) : null} -
- - - -

{description}

- - {children} -
-
- ); -} diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/assets/key-single.png b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/assets/key-single.png deleted file mode 100644 index 251661fa55d5c4b246807864be7363bfe68834c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37543 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

r6jT`rF+`D)0#uVb$ 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¬9e?DrhI47+_d z<~Zcw&qpI?c8j-*v)TXXr_9hkoxHi8?c+=9GZOcj`O*`GA^!waM`%IdNmMys#yQ}e z7ya@HjN|Rsz$(3k`Q~03G^#Q@!WFHzD+`iu@nm+4|2|pfeWDCVHVBqXIleOk?zfOf z3ERAq%j*$&d<|6&e{TqWFpvQ`Cja2g4?UdvN8&T^vRrG}?Io?X_6sxLrshU1fV1|% zpY~(4*C5c(^H(z`@XfMzJ?YWIiZSKECcciP0iU4r+D1Xo4Z)8;Xb_K2;r>~0zQ`ts z)hm1r+~F(WV7U!2FyRBURA^`JxPd^=@3>RPh5}aS!7;NR%U2Ki;i zBgGTileAz!EMnVl@T^<$;Bjqhx9}fv@W=o8(+cy(Yv9poe_6u*y(D@1HK}CvF%RCK zd)j{HTPdL75%`_nl6lh-31Kh3fGl7pd zO~SpV=smHfOT;)5UccSIf-^fO>yi_B3?rkcegSE4s8M%o6mzl zO=Xcyd{Ilv{{2SQ@?Vltm2F#^4|ZpxLWP+@Ae-~*Gp~P+V{>N$4qB(0Wwv(1YxDho syVxV%wftk>|9}49q`)8O{K*-}$K0_XO%0&46$H|Hs;^e6`uzR>0fa^d^#A|> diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/index.ts b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/index.ts deleted file mode 100644 index 2ad1ee0046d..00000000000 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/components/V2WorkspaceLoadingView/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { V2WorkspaceLoadingView } from "./V2WorkspaceLoadingView"; diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/page.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/page.tsx deleted file mode 100644 index 518ce5aa0be..00000000000 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/page.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { eq } from "@tanstack/db"; -import { useLiveQuery } from "@tanstack/react-db"; -import { createFileRoute, useNavigate } from "@tanstack/react-router"; -import { useEffect } from "react"; -import { useCollections } from "renderer/routes/_authenticated/providers/CollectionsProvider"; -import { V2WorkspaceLoadingView } from "./components/V2WorkspaceLoadingView"; - -export const Route = createFileRoute( - "/_authenticated/_dashboard/v2-workspace-loading/$workspaceId/", -)({ - component: V2WorkspaceLoadingPage, -}); - -function V2WorkspaceLoadingPage() { - const { workspaceId } = Route.useParams(); - const navigate = useNavigate(); - const collections = useCollections(); - - const { data: workspaces, isReady } = useLiveQuery( - (q) => - q - .from({ v2Workspaces: collections.v2Workspaces }) - .where(({ v2Workspaces }) => eq(v2Workspaces.id, workspaceId)), - [collections, workspaceId], - ); - const workspace = workspaces?.[0] ?? null; - - useEffect(() => { - if (!isReady) return; - void navigate({ - to: "/v2-workspace/$workspaceId", - params: { workspaceId }, - replace: true, - }); - }, [isReady, navigate, workspaceId]); - - return ; -} diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/layout.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/layout.tsx index f087fe18bd5..5cd7cbebe16 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/layout.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/layout.tsx @@ -1,12 +1,7 @@ import { buildHostRoutingKey } from "@superset/shared/host-routing"; import { eq } from "@tanstack/db"; import { useLiveQuery } from "@tanstack/react-db"; -import { - createFileRoute, - Outlet, - useMatchRoute, - useNavigate, -} from "@tanstack/react-router"; +import { createFileRoute, Outlet, useMatchRoute } from "@tanstack/react-router"; import { useEffect, useRef } from "react"; import { env } from "renderer/env.renderer"; import { @@ -27,7 +22,6 @@ export const Route = createFileRoute("/_authenticated/_dashboard/v2-workspace")( function V2WorkspaceLayout() { const matchRoute = useMatchRoute(); - const navigate = useNavigate(); const workspaceMatch = matchRoute({ to: "/v2-workspace/$workspaceId", }); @@ -73,16 +67,6 @@ function V2WorkspaceLayout() { ensureWorkspaceInSidebar(workspace.id, workspace.projectId); }, [ensureWorkspaceInSidebar, workspace]); - useEffect(() => { - if (workspaceId && !isReady) { - void navigate({ - to: "/v2-workspace-loading/$workspaceId", - params: { workspaceId }, - replace: true, - }); - } - }, [workspaceId, isReady, navigate]); - if (!workspaceId || !isReady) { return null; } From 331fc12a0750fdbe1a2f18afe79f805286e50398 Mon Sep 17 00:00:00 2001 From: Satya Patel Date: Mon, 27 Apr 2026 19:49:41 -0700 Subject: [PATCH 2/2] feat(desktop): inline keypad loader on v2 workspace hydration Replaces #3788's separate /v2-workspace-loading route with an inline render in v2-workspace/layout.tsx. The route + duplicate component tree were the source of the navigation oscillation crash: layout queried v2Workspaces + v2Hosts (joined isReady), the loading route queried only v2Workspaces, so the two effects ping-ponged when v2Hosts hydrated slower. Reuses the existing v1 KeypadLoader + StepProgress (presentational only; no v1 store coupling) instead of duplicating assets. --- .../V2WorkspaceLoadingView.tsx | 51 +++++++++++++++++++ .../V2WorkspaceLoadingView/index.ts | 1 + .../_dashboard/v2-workspace/layout.tsx | 8 ++- 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/components/V2WorkspaceLoadingView/V2WorkspaceLoadingView.tsx create mode 100644 apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/components/V2WorkspaceLoadingView/index.ts diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/components/V2WorkspaceLoadingView/V2WorkspaceLoadingView.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/components/V2WorkspaceLoadingView/V2WorkspaceLoadingView.tsx new file mode 100644 index 00000000000..8950652536f --- /dev/null +++ b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/components/V2WorkspaceLoadingView/V2WorkspaceLoadingView.tsx @@ -0,0 +1,51 @@ +import { useEffect, useState } from "react"; +import { KeypadLoader } from "renderer/screens/main/components/WorkspaceView/WorkspaceInitializingView/KeypadLoader"; +import { StepProgress } from "renderer/screens/main/components/WorkspaceView/WorkspaceInitializingView/StepProgress"; +import { + INIT_STEP_ORDER, + type WorkspaceInitStep, +} from "shared/types/workspace-init"; + +interface V2WorkspaceLoadingViewProps { + workspaceName?: string; +} + +const VISIBLE_STEPS: readonly WorkspaceInitStep[] = INIT_STEP_ORDER.filter( + (s) => s !== "ready", +); + +const STEP_INTERVAL_MS = 400; + +export function V2WorkspaceLoadingView({ + workspaceName, +}: V2WorkspaceLoadingViewProps) { + const [stepIdx, setStepIdx] = useState(0); + + useEffect(() => { + const id = window.setInterval(() => { + setStepIdx((prev) => Math.min(prev + 1, VISIBLE_STEPS.length - 1)); + }, STEP_INTERVAL_MS); + return () => window.clearInterval(id); + }, []); + + const currentStep = VISIBLE_STEPS[stepIdx] ?? "pending"; + + return ( +
    +
    + + +
    +

    + Loading workspace +

    + {workspaceName ? ( +

    {workspaceName}

    + ) : null} +
    + + +
    +
    + ); +} diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/components/V2WorkspaceLoadingView/index.ts b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/components/V2WorkspaceLoadingView/index.ts new file mode 100644 index 00000000000..2ad1ee0046d --- /dev/null +++ b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/components/V2WorkspaceLoadingView/index.ts @@ -0,0 +1 @@ +export { V2WorkspaceLoadingView } from "./V2WorkspaceLoadingView"; diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/layout.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/layout.tsx index 5cd7cbebe16..9ad28032a31 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/layout.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/layout.tsx @@ -11,6 +11,7 @@ import { import { useDashboardSidebarState } from "renderer/routes/_authenticated/hooks/useDashboardSidebarState"; import { useCollections } from "renderer/routes/_authenticated/providers/CollectionsProvider"; import { useLocalHostService } from "renderer/routes/_authenticated/providers/LocalHostServiceProvider"; +import { V2WorkspaceLoadingView } from "./components/V2WorkspaceLoadingView"; import { WorkspaceNotFoundState } from "./components/WorkspaceNotFoundState"; import { WorkspaceTrpcProvider } from "./providers/WorkspaceTrpcProvider"; @@ -41,6 +42,7 @@ function V2WorkspaceLayout() { .where(({ v2Workspaces }) => eq(v2Workspaces.id, workspaceId ?? "")) .select(({ v2Workspaces, hosts }) => ({ id: v2Workspaces.id, + name: v2Workspaces.name, organizationId: v2Workspaces.organizationId, hostId: v2Workspaces.hostId, hostMachineId: hosts?.machineId ?? null, @@ -67,10 +69,14 @@ function V2WorkspaceLayout() { ensureWorkspaceInSidebar(workspace.id, workspace.projectId); }, [ensureWorkspaceInSidebar, workspace]); - if (!workspaceId || !isReady) { + if (!workspaceId) { return null; } + if (!isReady) { + return ; + } + if (!workspace || !hostUrl) { return ; }