fix(workspace): remove item not in the adapter (#3922)
This commit is contained in:
@@ -120,13 +120,27 @@ const rootWorkspacesMetadataPromiseAtom = atom<
|
|||||||
}
|
}
|
||||||
// step 2: fetch from adapters
|
// step 2: fetch from adapters
|
||||||
{
|
{
|
||||||
const lists = Object.values(WorkspaceAdapters)
|
const Adapters = Object.values(WorkspaceAdapters).sort(
|
||||||
.sort((a, b) => a.loadPriority - b.loadPriority)
|
(a, b) => a.loadPriority - b.loadPriority
|
||||||
.map(({ CRUD }) => CRUD.list);
|
);
|
||||||
|
|
||||||
for (const list of lists) {
|
for (const Adapter of Adapters) {
|
||||||
|
const { CRUD, flavour: currentFlavour } = Adapter;
|
||||||
try {
|
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) {
|
if (metadata.length) {
|
||||||
item.sort((a, b) => {
|
item.sort((a, b) => {
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user