From: Stephen Smith Date: Wed, 15 Feb 2023 21:34:37 +0000 (-0500) Subject: 20000: Add run button to resume cancelled processes (priority 0) X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/638408423401f77842b731642891744458dbbb23?ds=sidebyside 20000: Add run button to resume cancelled processes (priority 0) Arvados-DCO-1.1-Signed-off-by: Stephen Smith --- diff --git a/src/store/processes/processes-actions.ts b/src/store/processes/processes-actions.ts index 815d6aec5e..cfda51ddc9 100644 --- a/src/store/processes/processes-actions.ts +++ b/src/store/processes/processes-actions.ts @@ -114,12 +114,24 @@ export const cancelRunningWorkflow = (uuid: string) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { try { const process = await services.containerRequestService.update(uuid, { priority: 0 }); + dispatch(updateResources([process])); return process; } catch (e) { throw new Error('Could not cancel the process.'); } }; +export const resumeOnHoldWorkflow = (uuid: string) => + async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + try { + const process = await services.containerRequestService.update(uuid, { priority: 500 }); + dispatch(updateResources([process])); + return process; + } catch (e) { + throw new Error('Could not resume the process.'); + } + }; + export const startWorkflow = (uuid: string) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { try { diff --git a/src/views/process-panel/process-details-card.tsx b/src/views/process-panel/process-details-card.tsx index 575545e58a..4a7d195ec2 100644 --- a/src/views/process-panel/process-details-card.tsx +++ b/src/views/process-panel/process-details-card.tsx @@ -76,13 +76,22 @@ export interface ProcessDetailsCardDataProps { process: Process; cancelProcess: (uuid: string) => void; startProcess: (uuid: string) => void; + resumeOnHoldWorkflow: (uuid: string) => void; onContextMenu: (event: React.MouseEvent) => void; } type ProcessDetailsCardProps = ProcessDetailsCardDataProps & WithStyles & MPVPanelProps; export const ProcessDetailsCard = withStyles(styles)( - ({ cancelProcess, startProcess, onContextMenu, classes, process, doHidePanel, panelName }: ProcessDetailsCardProps) => { + ({ cancelProcess, startProcess, resumeOnHoldWorkflow, onContextMenu, classes, process, doHidePanel, panelName }: ProcessDetailsCardProps) => { + let runAction: ((uuid: string) => void) | undefined = undefined; + if (process.containerRequest.state === ContainerRequestState.UNCOMMITTED) { + runAction = startProcess; + } else if (process.containerRequest.state === ContainerRequestState.COMMITTED && + process.containerRequest.priority === 0) { + runAction = resumeOnHoldWorkflow; + } + return } action={
- {process.containerRequest.state === ContainerRequestState.UNCOMMITTED && + {runAction !== undefined && } diff --git a/src/views/process-panel/process-panel-root.tsx b/src/views/process-panel/process-panel-root.tsx index 11b31ae0c9..d99c62ec74 100644 --- a/src/views/process-panel/process-panel-root.tsx +++ b/src/views/process-panel/process-panel-root.tsx @@ -52,6 +52,7 @@ export interface ProcessPanelRootActionProps { onToggle: (status: string) => void; cancelProcess: (uuid: string) => void; startProcess: (uuid: string) => void; + resumeOnHoldWorkflow: (uuid: string) => void; onLogFilterChange: (filter: FilterOption) => void; navigateToLog: (uuid: string) => void; onCopyToClipboard: (uuid: string) => void; @@ -124,6 +125,7 @@ export const ProcessPanelRoot = withStyles(styles)( onContextMenu={event => props.onContextMenu(event, process)} cancelProcess={props.cancelProcess} startProcess={props.startProcess} + resumeOnHoldWorkflow={props.resumeOnHoldWorkflow} /> diff --git a/src/views/process-panel/process-panel.tsx b/src/views/process-panel/process-panel.tsx index 2ad7e2a37b..9dcb72cf88 100644 --- a/src/views/process-panel/process-panel.tsx +++ b/src/views/process-panel/process-panel.tsx @@ -25,7 +25,7 @@ import { updateOutputParams, loadNodeJson } from 'store/process-panel/process-panel-actions'; -import { cancelRunningWorkflow, startWorkflow } from 'store/processes/processes-actions'; +import { cancelRunningWorkflow, resumeOnHoldWorkflow, startWorkflow } from 'store/processes/processes-actions'; import { navigateToLogCollection, setProcessLogsPanelFilter } from 'store/process-logs-panel/process-logs-panel-actions'; import { snackbarActions, SnackbarKind } from 'store/snackbar/snackbar-actions'; @@ -63,6 +63,7 @@ const mapDispatchToProps = (dispatch: Dispatch): ProcessPanelRootActionProps => }, cancelProcess: (uuid) => dispatch(cancelRunningWorkflow(uuid)), startProcess: (uuid) => dispatch(startWorkflow(uuid)), + resumeOnHoldWorkflow: (uuid) => dispatch(resumeOnHoldWorkflow(uuid)), onLogFilterChange: (filter) => dispatch(setProcessLogsPanelFilter(filter.value)), navigateToLog: (uuid) => dispatch(navigateToLogCollection(uuid)), loadInputs: (containerRequest) => dispatch(loadInputs(containerRequest)),