From 834771878e00031e6fd95569b0336ba72bc47e12 Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Wed, 23 Aug 2023 12:51:17 -0500 Subject: [PATCH] fix(workspace): remove item not in the adapter (#3922) --- packages/workspace/src/atom.ts | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/workspace/src/atom.ts b/packages/workspace/src/atom.ts index 403a0d86e..f8b785222 100644 --- a/packages/workspace/src/atom.ts +++ b/packages/workspace/src/atom.ts @@ -120,13 +120,27 @@ const rootWorkspacesMetadataPromiseAtom = atom< } // step 2: fetch from adapters { - const lists = Object.values(WorkspaceAdapters) - .sort((a, b) => a.loadPriority - b.loadPriority) - .map(({ CRUD }) => CRUD.list); + const Adapters = Object.values(WorkspaceAdapters).sort( + (a, b) => a.loadPriority - b.loadPriority + ); - for (const list of lists) { + for (const Adapter of Adapters) { + const { CRUD, flavour: currentFlavour } = Adapter; try { - const item = await list(); + const item = await CRUD.list(); + // remove the metadata that is not in the list + // because we treat the workspace adapter as the source of truth + { + const removed = metadata.filter( + meta => + meta.flavour === currentFlavour && + !item.some(x => x.id === meta.id) + ); + removed.forEach(meta => { + metadata.splice(metadata.indexOf(meta), 1); + }); + } + // sort the metadata by the order of the list if (metadata.length) { item.sort((a, b) => { return (