From 6b562ae2431132439e488f509d698800ee8ebe7d Mon Sep 17 00:00:00 2001 From: Pawel Kowalczyk Date: Tue, 27 Nov 2018 14:11:14 +0100 Subject: [PATCH] add-option-to-run-a-process-from-workflow-view Feature #14494 Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk --- .../workflow-panel/workflow-panel-actions.ts | 19 +++++++++++-- .../data-explorer/renderers.tsx | 28 ++++++++++++++++--- .../run-process-panel/run-process-panel.tsx | 2 +- .../workflow-panel/workflow-panel-view.tsx | 14 ++++++++-- src/views/workflow-panel/workflow-panel.tsx | 1 - 5 files changed, 53 insertions(+), 11 deletions(-) diff --git a/src/store/workflow-panel/workflow-panel-actions.ts b/src/store/workflow-panel/workflow-panel-actions.ts index da0da54d..3d51cbb8 100644 --- a/src/store/workflow-panel/workflow-panel-actions.ts +++ b/src/store/workflow-panel/workflow-panel-actions.ts @@ -9,7 +9,9 @@ import { bindDataExplorerActions } from '~/store/data-explorer/data-explorer-act import { propertiesActions } from '~/store/properties/properties-actions'; import { getResource } from '../resources/resources'; import { getProperty } from '~/store/properties/properties'; -import { WorkflowResource } from '../../models/workflow'; +import { WorkflowResource } from '~/models/workflow'; +import { navigateToRunProcess } from '~/store/navigation/navigation-action'; +import { goToStep, runProcessPanelActions } from '~/store/run-process-panel/run-process-panel-actions'; export const WORKFLOW_PANEL_ID = "workflowPanel"; const UUID_PREFIX_PROPERTY_NAME = 'uuidPrefix'; @@ -17,8 +19,10 @@ const WORKFLOW_PANEL_DETAILS_UUID = 'workflowPanelDetailsUuid'; export const workflowPanelActions = bindDataExplorerActions(WORKFLOW_PANEL_ID); export const loadWorkflowPanel = () => - (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { dispatch(workflowPanelActions.REQUEST_ITEMS()); + const response = await services.workflowService.list(); + dispatch(runProcessPanelActions.SET_WORKFLOWS(response.items)); }; export const setUuidPrefix = (uuidPrefix: string) => @@ -28,6 +32,17 @@ export const getUuidPrefix = (state: RootState) => { return state.properties.uuidPrefix; }; +export const openRunProcess = (uuid: string) => + async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + const workflows = getState().runProcessPanel.searchWorkflows; + const workflow = workflows.find(workflow => workflow.uuid === uuid); + dispatch(navigateToRunProcess); + dispatch(runProcessPanelActions.RESET_RUN_PROCESS_PANEL()); + dispatch(goToStep(1)); + dispatch(runProcessPanelActions.SET_STEP_CHANGED(true)); + dispatch(runProcessPanelActions.SET_SELECTED_WORKFLOW(workflow!)); + }; + export const getPublicUserUuid = (state: RootState) => { const prefix = getProperty(UUID_PREFIX_PROPERTY_NAME)(state.properties); return `${prefix}-tpzed-anonymouspublic`; diff --git a/src/views-components/data-explorer/renderers.tsx b/src/views-components/data-explorer/renderers.tsx index 87ba73ff..ca79bba4 100644 --- a/src/views-components/data-explorer/renderers.tsx +++ b/src/views-components/data-explorer/renderers.tsx @@ -18,8 +18,7 @@ import { ArvadosTheme } from '~/common/custom-theme'; import { compose, Dispatch } from 'redux'; import { WorkflowResource } from '~/models/workflow'; import { ResourceStatus } from '~/views/workflow-panel/workflow-panel-view'; -import { getUuidPrefix } from '~/store/workflow-panel/workflow-panel-actions'; -import { CollectionResource } from "~/models/collection"; +import { getUuidPrefix, openRunProcess } from '~/store/workflow-panel/workflow-panel-actions'; import { getResourceData } from "~/store/resources-data/resources-data"; import { openSharingDialog } from '~/store/sharing-dialog/sharing-dialog-actions'; @@ -87,12 +86,11 @@ const getPublicUuid = (uuidPrefix: string) => { return `${uuidPrefix}-tpzed-anonymouspublic`; }; -// ToDo: share onClick export const resourceShare = (dispatch: Dispatch, uuidPrefix: string, ownerUuid?: string, uuid?: string) => { const isPublic = ownerUuid === getPublicUuid(uuidPrefix); return (
- { isPublic && uuid && + {isPublic && uuid && dispatch(openSharingDialog(uuid))}> @@ -115,6 +113,28 @@ export const ResourceShare = connect( })((props: { ownerUuid?: string, uuidPrefix: string, uuid?: string } & DispatchProp) => resourceShare(props.dispatch, props.uuidPrefix, props.ownerUuid, props.uuid)); +export const resourceRunProcess = (dispatch: Dispatch, uuid: string) => { + return ( +
+ {uuid && + + dispatch(openRunProcess(uuid))}> + + + } +
+ ); +}; + +export const ResourceRunProcess = connect( + (state: RootState, props: { uuid: string }) => { + const resource = getResource(props.uuid)(state.resources); + return { + uuid: resource ? resource.uuid : '' + }; + })((props: { uuid: string } & DispatchProp) => + resourceRunProcess(props.dispatch, props.uuid)); + export const renderWorkflowStatus = (uuidPrefix: string, ownerUuid?: string) => { if (ownerUuid === getPublicUuid(uuidPrefix)) { return renderStatus(ResourceStatus.PUBLIC); diff --git a/src/views/run-process-panel/run-process-panel.tsx b/src/views/run-process-panel/run-process-panel.tsx index c8411ad7..c5b95c3b 100644 --- a/src/views/run-process-panel/run-process-panel.tsx +++ b/src/views/run-process-panel/run-process-panel.tsx @@ -6,7 +6,7 @@ import { Dispatch } from 'redux'; import { connect } from 'react-redux'; import { RootState } from '~/store/store'; import { RunProcessPanelRootDataProps, RunProcessPanelRootActionProps, RunProcessPanelRoot } from '~/views/run-process-panel/run-process-panel-root'; -import { goToStep, setWorkflow, runProcess, searchWorkflows, openSetWorkflowDialog } from '~/store/run-process-panel/run-process-panel-actions'; +import { goToStep, runProcess, searchWorkflows, openSetWorkflowDialog } from '~/store/run-process-panel/run-process-panel-actions'; import { WorkflowResource } from '~/models/workflow'; const mapStateToProps = ({ runProcessPanel }: RootState): RunProcessPanelRootDataProps => { diff --git a/src/views/workflow-panel/workflow-panel-view.tsx b/src/views/workflow-panel/workflow-panel-view.tsx index b8e0e436..da8a0c4b 100644 --- a/src/views/workflow-panel/workflow-panel-view.tsx +++ b/src/views/workflow-panel/workflow-panel-view.tsx @@ -11,14 +11,15 @@ import { ResourceLastModifiedDate, RosurceWorkflowName, ResourceWorkflowStatus, - ResourceShare + ResourceShare, + ResourceRunProcess } from "~/views-components/data-explorer/renderers"; import { SortDirection } from '~/components/data-table/data-column'; import { DataColumns } from '~/components/data-table/data-table'; import { DataTableFilterItem } from '~/components/data-table-filters/data-table-filters'; import { Grid, Paper } from '@material-ui/core'; import { WorkflowDetailsCard } from './workflow-description-card'; -import { WorkflowResource } from '../../models/workflow'; +import { WorkflowResource } from '~/models/workflow'; import { createTree } from '~/models/tree'; export enum WorkflowPanelColumnNames { @@ -110,11 +111,18 @@ export const workflowPanelColumns: DataColumns = [ configurable: false, filters: createTree(), render: (uuid: string) => + }, + { + name: '', + selected: true, + configurable: false, + filters: createTree(), + render: (uuid: string) => } ]; export const WorkflowPanelView = (props: WorkflowPanelProps) => { - return + return ({ }); const mapDispatchToProps = (dispatch: Dispatch): WorfklowPanelActionProps => ({ - handleRowDoubleClick: (uuid: string) => { dispatch(navigateTo(uuid)); }, -- 2.30.2