diff --git a/web/workspace/src/lib/workspace/console/worker-console.ui.test.ts b/web/workspace/src/lib/workspace/console/worker-console.ui.test.ts index 5f5094f8f..6e415e3ce 100644 --- a/web/workspace/src/lib/workspace/console/worker-console.ui.test.ts +++ b/web/workspace/src/lib/workspace/console/worker-console.ui.test.ts @@ -222,6 +222,9 @@ Deno.test("workspace Worker list lives on the dedicated Workers page", async () const workerWorkdirMeta = await Deno.readTextFile( new URL("../sidebar/worker-workdir-meta.ts", import.meta.url), ); + const workerSubscription = await Deno.readTextFile( + new URL("../sidebar/worker-subscription.ts", import.meta.url), + ); const sidebar = await Deno.readTextFile( new URL("../sidebar/WorkspaceSidebar.svelte", import.meta.url), ); @@ -266,6 +269,10 @@ Deno.test("workspace Worker list lives on the dedicated Workers page", async () workerWorkdirMeta.includes("workdir.creation_selector") && workerWorkdirMeta.includes("explicitReferenceFallback(") && workerWorkdirMeta.includes('"detached"') && + workerSubscription.includes( + 'workspaceApiPath(workspaceId, "/working-directories")', + ) && + !workerSubscription.includes('topic: "workspace_workdirs"') && sidebarCss.includes(".worker-nav-meta") && sidebarCss.includes("text-overflow: ellipsis") && sidebarCss.includes("white-space: nowrap") && diff --git a/web/workspace/src/lib/workspace/sidebar/worker-subscription.ts b/web/workspace/src/lib/workspace/sidebar/worker-subscription.ts index 848213684..915b469de 100644 --- a/web/workspace/src/lib/workspace/sidebar/worker-subscription.ts +++ b/web/workspace/src/lib/workspace/sidebar/worker-subscription.ts @@ -47,22 +47,20 @@ export function workspaceWorkersStore( let loading = true; let error: string | null = null; let disposed = false; - let workdirRequest = 0; const publish = () => { const workers = [...projection.workers.values()] .map((worker) => projectWorker(worker, workdirs)) .sort(compareWorkersForSidebar); set({ loading, error, workers }); }; - const refreshWorkdirs = async () => { - const request = ++workdirRequest; + const loadWorkdirs = async () => { const result = await loadJson( fetch, workspaceApiPath(workspaceId, "/working-directories"), undefined, parseWorkingDirectoryListResponse, ); - if (disposed || request !== workdirRequest || !result.data) return; + if (disposed || !result.data) return; workdirs = new Map( result.data.items.map(( workdir, @@ -70,8 +68,7 @@ export function workspaceWorkersStore( ); publish(); }; - const multiplexer = workspaceMultiplexer(workspaceId); - const subscription = multiplexer.subscribe( + const subscription = workspaceMultiplexer(workspaceId).subscribe( { topic: "workspace_workers" }, { onFrame: (frame) => { @@ -114,25 +111,10 @@ export function workspaceWorkersStore( }, }, ); - const workdirSubscription = multiplexer.subscribe( - { topic: "workspace_workdirs" }, - { - onFrame: (frame) => { - const isSnapshot = frame.frame === "response" && - frame.message.result === "subscribed"; - const isUpdate = frame.frame === "event" && - frame.message.event === "event" && - (frame.message.data.payload.event === "workdir_upserted" || - frame.message.data.payload.event === "workdir_removed"); - if (isSnapshot || isUpdate) void refreshWorkdirs(); - }, - }, - ); - void refreshWorkdirs(); + void loadWorkdirs(); return () => { disposed = true; subscription.close(); - workdirSubscription.close(); }; }, );