From: Stephen Smith Date: Mon, 9 Jan 2023 20:22:57 +0000 (-0500) Subject: 15557: Add start workflow button when container request is uncommitted X-Git-Tag: 2.6.0~18^2~12 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/2b6abd3b7dea25f9b19156bb06b2763b118a67b5 15557: Add start workflow button when container request is uncommitted Arvados-DCO-1.1-Signed-off-by: Stephen Smith --- diff --git a/src/components/icon/icon.tsx b/src/components/icon/icon.tsx index db220a36..48cd8bed 100644 --- a/src/components/icon/icon.tsx +++ b/src/components/icon/icon.tsx @@ -33,7 +33,7 @@ import Help from '@material-ui/icons/Help'; import HelpOutline from '@material-ui/icons/HelpOutline'; import History from '@material-ui/icons/History'; import Inbox from '@material-ui/icons/Inbox'; -import Memory from '@material-ui/icons/Memory'; +import Memory from '@material-ui/icons/Memory'; import MoveToInbox from '@material-ui/icons/MoveToInbox'; import Info from '@material-ui/icons/Info'; import Input from '@material-ui/icons/Input'; @@ -166,7 +166,7 @@ export const KeyIcon: IconType = (props) => ; export const LogIcon: IconType = (props) => ; export const MailIcon: IconType = (props) => ; export const MaximizeIcon: IconType = (props) => ; -export const MemoryIcon: IconType = (props) => ; +export const MemoryIcon: IconType = (props) => ; export const UnMaximizeIcon: IconType = (props) => ; export const MoreOptionsIcon: IconType = (props) => ; export const MoveToIcon: IconType = (props) => ; @@ -214,3 +214,4 @@ export const ActiveIcon: IconType = (props) => export const SetupIcon: IconType = (props) => ; export const InactiveIcon: IconType = (props) => ; export const ImageIcon: IconType = (props) => ; +export const StartIcon: IconType = (props) => ; diff --git a/src/store/processes/processes-actions.ts b/src/store/processes/processes-actions.ts index e4f35c1e..11a36e05 100644 --- a/src/store/processes/processes-actions.ts +++ b/src/store/processes/processes-actions.ts @@ -21,6 +21,7 @@ import { CommandInputParameter, getWorkflow, getWorkflowInputs, getWorkflowOutpu import { ProjectResource } from "models/project"; import { UserResource } from "models/user"; import { CommandOutputParameter } from "cwlts/mappings/v1.0/CommandOutputParameter"; +import { ContainerRequestState } from "models/container-request"; export const loadProcess = (containerRequestUuid: string) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository): Promise => { @@ -104,6 +105,17 @@ export const cancelRunningWorkflow = (uuid: string) => } }; +export const startWorkflow = (uuid: string) => + async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + try { + const process = await services.containerRequestService.update(uuid, { priority: 1, state: ContainerRequestState.COMMITTED }); + dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Process started', hideDuration: 2000, kind: SnackbarKind.SUCCESS })); + return process; + } catch (e) { + throw new Error('Could not cancel the process.'); + } + }; + export const reRunProcess = (processUuid: string, workflowUuid: string) => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { const process = getResource(processUuid)(getState().resources); diff --git a/src/views/process-panel/process-details-card.tsx b/src/views/process-panel/process-details-card.tsx index b09b499e..801403b0 100644 --- a/src/views/process-panel/process-details-card.tsx +++ b/src/views/process-panel/process-details-card.tsx @@ -15,12 +15,13 @@ import { Typography, } from '@material-ui/core'; import { ArvadosTheme } from 'common/custom-theme'; -import { CloseIcon, MoreOptionsIcon, ProcessIcon } from 'components/icon/icon'; +import { CloseIcon, MoreOptionsIcon, ProcessIcon, StartIcon } from 'components/icon/icon'; import { Process } from 'store/processes/process'; import { MPVPanelProps } from 'components/multi-panel-view/multi-panel-view'; import { ProcessDetailsAttributes } from './process-details-attributes'; import { ProcessStatus } from 'views-components/data-explorer/renderers'; import { ContainerState } from 'models/container'; +import { ContainerRequestState } from 'models/container-request'; type CssRules = 'card' | 'content' | 'title' | 'header' | 'cancelButton' | 'avatar' | 'iconHeader'; @@ -65,13 +66,14 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ export interface ProcessDetailsCardDataProps { process: Process; cancelProcess: (uuid: string) => void; + startProcess: (uuid: string) => void; onContextMenu: (event: React.MouseEvent) => void; } type ProcessDetailsCardProps = ProcessDetailsCardDataProps & WithStyles & MPVPanelProps; export const ProcessDetailsCard = withStyles(styles)( - ({ cancelProcess, onContextMenu, classes, process, doHidePanel, panelName }: ProcessDetailsCardProps) => { + ({ cancelProcess, startProcess, onContextMenu, classes, process, doHidePanel, panelName }: ProcessDetailsCardProps) => { return } action={
+ {process.containerRequest.state === ContainerRequestState.UNCOMMITTED && + + startProcess(process.containerRequest.uuid)}> + + + } {process.container && process.container.state === ContainerState.RUNNING && cancelProcess(process.containerRequest.uuid)}>Cancel} diff --git a/src/views/process-panel/process-panel-root.tsx b/src/views/process-panel/process-panel-root.tsx index adb6c920..11b31ae0 100644 --- a/src/views/process-panel/process-panel-root.tsx +++ b/src/views/process-panel/process-panel-root.tsx @@ -51,6 +51,7 @@ export interface ProcessPanelRootActionProps { onContextMenu: (event: React.MouseEvent, process: Process) => void; onToggle: (status: string) => void; cancelProcess: (uuid: string) => void; + startProcess: (uuid: string) => void; onLogFilterChange: (filter: FilterOption) => void; navigateToLog: (uuid: string) => void; onCopyToClipboard: (uuid: string) => void; @@ -122,6 +123,7 @@ export const ProcessPanelRoot = withStyles(styles)( process={process} onContextMenu={event => props.onContextMenu(event, process)} cancelProcess={props.cancelProcess} + startProcess={props.startProcess} /> diff --git a/src/views/process-panel/process-panel.tsx b/src/views/process-panel/process-panel.tsx index d853fd09..2ad7e2a3 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 } from 'store/processes/processes-actions'; +import { cancelRunningWorkflow, 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'; @@ -62,6 +62,7 @@ const mapDispatchToProps = (dispatch: Dispatch): ProcessPanelRootActionProps => dispatch(toggleProcessPanelFilter(status)); }, cancelProcess: (uuid) => dispatch(cancelRunningWorkflow(uuid)), + startProcess: (uuid) => dispatch(startWorkflow(uuid)), onLogFilterChange: (filter) => dispatch(setProcessLogsPanelFilter(filter.value)), navigateToLog: (uuid) => dispatch(navigateToLogCollection(uuid)), loadInputs: (containerRequest) => dispatch(loadInputs(containerRequest)),