fix: avoid unsupported workdir subscription
This commit is contained in:
@@ -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") &&
|
||||
|
||||
@@ -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();
|
||||
};
|
||||
},
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user