Merge branch '19482-wf-panel' refs #19482
authorPeter Amstutz <peter.amstutz@curii.com>
Tue, 28 Mar 2023 13:47:12 +0000 (09:47 -0400)
committerPeter Amstutz <peter.amstutz@curii.com>
Tue, 28 Mar 2023 13:47:12 +0000 (09:47 -0400)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

cypress/integration/project.spec.js
src/components/collection-panel-files/collection-panel-files.tsx
src/store/processes/processes-actions.ts
src/store/project-panel/project-panel-middleware-service.ts

index f767782a154d933d248661a5454c95b15b25f1d5..68a90133d25270f937bfdb6d4ecb299036902040 100644 (file)
@@ -546,7 +546,7 @@ describe('Project tests', function() {
             });
         cy.get('[data-cy=form-dialog]').should("not.exist");
         cy.get('[data-cy=side-panel-tree]').contains('Projects').click();
-        cy.waitForDom().get('[data-cy=project-panel]').contains(projectName).rightclick();
+        cy.get('[data-cy=project-panel]').contains(projectName).should('be.visible').rightclick();
         cy.get('[data-cy=context-menu]').contains('Copy to clipboard').click();
         cy.window().then((win) => (
             win.navigator.clipboard.readText().then((text) => {
index 08944d40a93519b59770ea52df546f2720d68ad8..fb36ebce549d25171e38fed562db654d887a79ed 100644 (file)
@@ -309,8 +309,7 @@ export const CollectionPanelFiles = withStyles(styles)(connect((state: RootState
             }).reduce((prev, next) => {
                 return { ...next, ...prev };
             }, {});
-
-            setPathData({ ...pathData, ...newState });
+            setPathData((state) => ({ ...state, ...newState }));
         })
         .finally(() => {
             setIsLoading(false);
@@ -405,7 +404,7 @@ export const CollectionPanelFiles = withStyles(styles)(connect((state: RootState
 
                 if (breadcrumbPath) {
                     const index = path.indexOf(breadcrumbPath);
-                    setPath([...path.slice(0, index + 1)]);
+                    setPath((state) => ([...state.slice(0, index + 1)]));
                 }
 
                 if (parentPath && type === 'directory') {
@@ -413,11 +412,11 @@ export const CollectionPanelFiles = withStyles(styles)(connect((state: RootState
                         path.pop()
                     }
 
-                    setPath([...path, parentPath]);
+                    setPath((state) => ([...state, parentPath]));
                 }
 
                 if (subfolderPath && type === 'directory') {
-                    setPath([...path, subfolderPath]);
+                    setPath((state) => ([...state, subfolderPath]));
                 }
 
                 if (elem.dataset.id && type === 'file') {
@@ -503,7 +502,7 @@ export const CollectionPanelFiles = withStyles(styles)(connect((state: RootState
         <div className={classes.wrapper}>
             <div className={classNames(classes.leftPanel, path.length > 1 ? classes.leftPanelVisible : classes.leftPanelHidden)} data-cy="collection-files-left-panel">
                 <Tooltip title="Go back" className={path.length > 1 ? classes.backButton : classes.backButtonHidden}>
-                    <IconButton onClick={() => setPath([...path.slice(0, path.length -1)])}>
+                    <IconButton onClick={() => setPath((state) => ([...state.slice(0, state.length -1)]))}>
                         <BackIcon />
                     </IconButton>
                 </Tooltip>
index 0b2de8373ca83769f9ee0d548e95530cba053ea2..b26c2017f7552fa54c4d6e44f57ad398ff1b45ce 100644 (file)
@@ -23,6 +23,7 @@ import { UserResource } from "models/user";
 import { CommandOutputParameter } from "cwlts/mappings/v1.0/CommandOutputParameter";
 import { ContainerResource } from "models/container";
 import { ContainerRequestResource, ContainerRequestState } from "models/container-request";
+import { FilterBuilder } from "services/api/filter-builder";
 
 export const loadProcess = (containerRequestUuid: string) =>
     async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository): Promise<Process | undefined> => {
@@ -60,9 +61,12 @@ export const loadProcess = (containerRequestUuid: string) =>
         return { containerRequest };
     };
 
-export const loadContainers = (filters: string, loadMounts: boolean = true) =>
+export const loadContainers = (containerUuids: string[], loadMounts: boolean = true) =>
     async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
-        let args: any = { filters };
+        let args: any = {
+            filters: new FilterBuilder().addIn('uuid', containerUuids).getFilters(),
+            limit: containerUuids.length,
+         };
         if (!loadMounts) {
             args.select = containerFieldsNoMounts;
         }
index cc8511a4c7e6ed997cb1fb74533cd95cc468f711..7051d06206ca9d0c6b39eeb061926a5a1bafe1b9 100644 (file)
@@ -81,15 +81,15 @@ export class ProjectPanelMiddlewareService extends DataExplorerMiddlewareService
 export const loadMissingProcessesInformation = (resources: GroupContentsResource[]) =>
     async (dispatch: Dispatch) => {
         const containerUuids = resources.reduce((uuids, resource) => {
-            return resource.kind === ResourceKind.CONTAINER_REQUEST
-                ? resource.containerUuid
-                    ? [...uuids, resource.containerUuid]
-                    : uuids
+            return resource.kind === ResourceKind.CONTAINER_REQUEST &&
+                    resource.containerUuid &&
+                    !uuids.includes(resource.containerUuid)
+                ? [...uuids, resource.containerUuid]
                 : uuids;
-        }, []);
+        }, [] as string[]);
         if (containerUuids.length > 0) {
             await dispatch<any>(loadContainers(
-                new FilterBuilder().addIn('uuid', containerUuids).getFilters(),
+                containerUuids,
                 false
             ));
         }