21357: set faves to bulk fetch Arvados-DCO-1.1-Signed-off-by: Lisa Knox <lisa.knox...
authorLisa Knox <lisaknox83@gmail.com>
Tue, 12 Mar 2024 18:49:48 +0000 (14:49 -0400)
committerLisa Knox <lisaknox83@gmail.com>
Tue, 12 Mar 2024 18:49:48 +0000 (14:49 -0400)
services/workbench2/src/common/link-update-name.ts
services/workbench2/src/store/side-panel-tree/side-panel-tree-actions.ts

index 453c77941e88efe6ceb9a96547f674bd5eea8a51..d9a04dfc5d5adbbdffc4725532332b16113af2d5 100644 (file)
@@ -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<LinkResource> => {
-    //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);
 };
index 970f0cf2a91e427ea746759c4229b41c1c531f3f..031a7fda535bd1745e5b52695aaa450a13f6bfd4 100644 (file)
@@ -105,6 +105,7 @@ export const loadSidePanelTreeProjects = (projectUuid: string) =>
             verifyAndUpdateLinkNames(unverifiedPubFaves, dispatch, getState, services);
         } else if (projectUuid === SidePanelTreeCategory.FAVORITES) {
             const unverifiedFaves = await dispatch<any>(loadFavoritesTree());
+            await setFaves(unverifiedFaves, dispatch, getState, services);
             verifyAndUpdateLinkNames(unverifiedFaves, dispatch, getState, services);
         } else if (node || projectUuid !== '') {
             await dispatch<any>(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;
 };