19482: Breadcrumbs almost work right
authorPeter Amstutz <peter.amstutz@curii.com>
Thu, 23 Mar 2023 21:19:01 +0000 (17:19 -0400)
committerPeter Amstutz <peter.amstutz@curii.com>
Thu, 23 Mar 2023 21:19:01 +0000 (17:19 -0400)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

src/store/breadcrumbs/breadcrumbs-actions.ts
src/store/workbench/workbench-actions.ts
src/views-components/details-panel/workflow-details.tsx
src/views/process-panel/process-io-card.tsx

index 7d6f182da2fbc554e21509057ab38e14767d7eda..a7e42510b1239ffe643c809b0b7ecf884c881299 100644 (file)
@@ -142,6 +142,9 @@ export const setCategoryBreadcrumbs = (uuid: string, category: string) =>
                 breadcrumbs.push(resourceToBreadcrumb(parentProcessItem));
             }
             dispatch(setBreadcrumbs(breadcrumbs, processItem));
+        } else if (uuidKind === ResourceKind.WORKFLOW) {
+            const workflowItem = await services.workflowService.get(currentUuid);
+            dispatch(setBreadcrumbs(breadcrumbs, workflowItem));
         }
         dispatch(setBreadcrumbs(breadcrumbs));
     };
@@ -206,15 +209,6 @@ export const setProcessBreadcrumbs = (processUuid: string) =>
         }
     };
 
-export const setWorkflowBreadcrumbs = (workflowUuid: string) =>
-    (dispatch: Dispatch, getState: () => RootState) => {
-        const { resources } = getState();
-        const workflow = getResource<WorkflowResource>(workflowUuid)(resources);
-        if (workflow) {
-            dispatch<any>(setProjectBreadcrumbs(workflow.ownerUuid));
-        }
-    };
-
 export const setGroupsBreadcrumbs = () =>
     setBreadcrumbs([{
         label: SidePanelTreeCategory.GROUPS,
index cd15111308238fa8187f67f8902c268fc4fb55f2..f4b65e639d0f75808a6e50e48716c57aea0d3ee2 100644 (file)
@@ -32,7 +32,6 @@ import {
     setGroupDetailsBreadcrumbs,
     setGroupsBreadcrumbs,
     setProcessBreadcrumbs,
-    setWorkflowBreadcrumbs,
     setSharedWithMeBreadcrumbs,
     setSidePanelBreadcrumbs,
     setTrashBreadcrumbs,
@@ -590,14 +589,30 @@ export const loadProcess = (uuid: string) =>
     });
 
 export const loadRegisteredWorkflow = (uuid: string) =>
-    handleFirstTimeLoad(async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
-        const workflow = await services.workflowService.get(uuid);
-        if (workflow) {
-            dispatch<any>(updateResources([workflow]));
-            await dispatch<any>(
-                activateSidePanelTreeItem(workflow.ownerUuid)
-            );
-            dispatch<any>(setWorkflowBreadcrumbs(uuid));
+    handleFirstTimeLoad(async (dispatch: Dispatch,
+        getState: () => RootState,
+        services: ServiceRepository) => {
+
+        const userUuid = getUserUuid(getState());
+        if (userUuid) {
+            const match = await loadGroupContentsResource({
+                uuid,
+                userUuid,
+                services,
+            });
+            match({
+                OWNED: (workflow) => {
+                    dispatch(updateResources([workflow]));
+                    dispatch<any>(activateSidePanelTreeItem(workflow.ownerUuid));
+                    dispatch<any>(setSidePanelBreadcrumbs(workflow.ownerUuid));
+                },
+                SHARED: (workflow) => {
+                    dispatch<any>(updateResources([workflow]));
+                    dispatch<any>(activateSidePanelTreeItem(workflow.ownerUuid));
+                    dispatch<any>(setSharedWithMeBreadcrumbs(workflow.ownerUuid));
+                },
+                TRASHED: () => { }
+            });
         }
     });
 
@@ -889,8 +904,12 @@ const loadGroupContentsResource = async (params: {
             resource = await params.services.collectionService.get(params.uuid);
         } else if (kind === ResourceKind.PROJECT) {
             resource = await params.services.projectService.get(params.uuid);
-        } else {
+        } else if (kind === ResourceKind.WORKFLOW) {
+            resource = await params.services.workflowService.get(params.uuid);
+        } else if (kind === ResourceKind.CONTAINER_REQUEST) {
             resource = await params.services.containerRequestService.get(params.uuid);
+        } else {
+            throw new Error("loadGroupContentsResource unsupported kind " + kind)
         }
         handler = groupContentsHandlers.SHARED(resource);
     }
index 15ddbfe026c9409990d419b7c76e8569ce317597..ca224b1d587aec3815c87c46396a54409f09b24d 100644 (file)
@@ -130,7 +130,7 @@ export const WorkflowDetailsAttributes = connect(mapStateToProps, mapDispatchToP
                 <Button onClick={workflow && onClick(workflow)} className={classes.runButton} variant='contained'
                     data-cy='workflow-details-panel-run-btn' color='primary' size='small'>
                     <StartIcon />
-                    Run Process
+                    Run Workflow
                 </Button>
                 <Grid item xs={12} >
                     <DetailsAttribute
index baa51496f44b2293486ae81845eaf799aed7e14c..43be92406726c3b509faeab7eebc0dcf91540b90 100644 (file)
@@ -404,7 +404,7 @@ const ProcessIOPreview = withStyles(styles)(
                         [classes.noBorderRow]: (rest.length > 0),
                     };
 
-                    return <>
+                    return <React.Fragment key={param.id}>
                         <TableRow className={classNames(mainRowClasses)} data-cy="process-io-param">
                             <TableCell>
                                 {param.id}
@@ -424,7 +424,7 @@ const ProcessIOPreview = withStyles(styles)(
                                 [classes.noBorderRow]: (i < rest.length - 1),
                                 [classes.secondaryRow]: val.secondary,
                             };
-                            return <TableRow className={classNames(rowClasses)}>
+                            return <TableRow className={classNames(rowClasses)} key={i}>
                                 <TableCell />
                                 {showLabel && <TableCell />}
                                 <TableCell>
@@ -437,10 +437,10 @@ const ProcessIOPreview = withStyles(styles)(
                                 </TableCell>
                             </TableRow>
                         })}
-                    </>;
+                    </React.Fragment>;
                 })}
             </TableBody>
-        </Table>;
+        </Table >;
     });
 
 interface ProcessValuePreviewProps {