From: Lisa Knox Date: Tue, 12 Mar 2024 18:49:48 +0000 (-0400) Subject: 21357: set faves to bulk fetch Arvados-DCO-1.1-Signed-off-by: Lisa Knox --- diff --git a/services/workbench2/src/common/link-update-name.ts b/services/workbench2/src/common/link-update-name.ts index 453c77941e..d9a04dfc5d 100644 --- a/services/workbench2/src/common/link-update-name.ts +++ b/services/workbench2/src/common/link-update-name.ts @@ -11,7 +11,7 @@ import { Resource, extractUuidKind } from 'models/resource'; type NameableResource = Resource & { name?: string }; export const verifyAndUpdateLink = async (link: LinkResource, dispatch: Dispatch, getState: () => RootState, services: ServiceRepository): Promise => { - //check if head resource is already in the store + //head resource should already be in the store let headResource: Resource | undefined = getState().resources[link.headUuid]; //if not, fetch it if (!headResource) { @@ -31,6 +31,7 @@ export const verifyAndUpdateLink = async (link: LinkResource, dispatch: Dispatch }; export const verifyAndUpdateLinks = async (links: LinkResource[], dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + const updatedLinks = links.map((link) => verifyAndUpdateLink(link, dispatch, getState, services)); return Promise.all(updatedLinks); }; diff --git a/services/workbench2/src/store/side-panel-tree/side-panel-tree-actions.ts b/services/workbench2/src/store/side-panel-tree/side-panel-tree-actions.ts index 970f0cf2a9..031a7fda53 100644 --- a/services/workbench2/src/store/side-panel-tree/side-panel-tree-actions.ts +++ b/services/workbench2/src/store/side-panel-tree/side-panel-tree-actions.ts @@ -105,6 +105,7 @@ export const loadSidePanelTreeProjects = (projectUuid: string) => verifyAndUpdateLinkNames(unverifiedPubFaves, dispatch, getState, services); } else if (projectUuid === SidePanelTreeCategory.FAVORITES) { const unverifiedFaves = await dispatch(loadFavoritesTree()); + await setFaves(unverifiedFaves, dispatch, getState, services); verifyAndUpdateLinkNames(unverifiedFaves, dispatch, getState, services); } else if (node || projectUuid !== '') { await dispatch(loadProject(projectUuid)); @@ -160,6 +161,37 @@ export const loadFavoritesTree = () => async (dispatch: Dispatch, getState: () = return items; }; +const setFaves = async(links: LinkResource[], dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + + const responseLinks = await services.linkService.list({ + filters: new FilterBuilder() + .addEqual("link_class", LinkClass.STAR) + .addEqual('tail_uuid', getUserUuid(getState())) + .addEqual('tail_kind', ResourceKind.USER) + .getFilters() + }).then(results => results); + const uuids = responseLinks.items.map(it => it.headUuid); + const groupItems: any = await services.groupsService.list({ + filters: new FilterBuilder() + .addIn("uuid", uuids) + .getFilters() + }); + const collectionItems: any = await services.collectionService.list({ + filters: new FilterBuilder() + .addIn("uuid", uuids) + .getFilters() + }); + const processItems: any = await services.containerRequestService.list({ + filters: new FilterBuilder() + .addIn("uuid", uuids) + .getFilters() + }); + const responseItems = groupItems.items.concat(collectionItems.items).concat(processItems.items); + + //setting resources here so they won't be re-fetched in validation step + dispatch(resourcesActions.SET_RESOURCES(responseItems)); +}; + const verifyAndUpdateLinkNames = async (links: LinkResource[], dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { const verfifiedLinks = await verifyAndUpdateLinks(links, dispatch, getState, services); @@ -223,6 +255,9 @@ export const loadPublicFavoritesTree = () => async (dispatch: Dispatch, getState }) ); + //setting resources here so they won't be re-fetched in validation step + dispatch(resourcesActions.SET_RESOURCES(responseItems)); + return filteredItems; };