Merge branch 'master'
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Tue, 2 Oct 2018 12:34:51 +0000 (14:34 +0200)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Tue, 2 Oct 2018 12:34:51 +0000 (14:34 +0200)
Feature #13863

Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski@contractors.roche.com>

1  2 
src/store/run-process-panel/run-process-panel-actions.ts
src/store/run-process-panel/run-process-panel-reducer.ts
src/views/run-process-panel/run-process-panel-root.tsx
src/views/run-process-panel/run-process-panel.tsx

index a58eff8ad03ad45d1db963788226754dd97fa912,3a3f6b0500e29441186ca1543c7854b2f67363d7..7112f715b4c449d2ee7aa15ac6786f783a4c0d2b
@@@ -49,45 -41,4 +50,46 @@@ export const setWorkflow = (workflow: W
  
  export const goToStep = (step: number) => runProcessPanelActions.SET_CURRENT_STEP(step);
  
 -export const searchWorkflows = (term: string) => runProcessPanelActions.SEARCH_WORKFLOWS(term);
 +export const runProcess = async (dispatch: Dispatch<any>, getState: () => RootState, services: ServiceRepository) => {
 +    const state = getState();
 +    const basicForm = getFormValues(RUN_PROCESS_BASIC_FORM)(state) as RunProcessBasicFormData;
 +    const inputsForm = getFormValues(RUN_PROCESS_INPUTS_FORM)(state) as WorkflowInputsData;
 +    const advancedForm = getFormValues(RUN_PROCESS_ADVANCED_FORM)(state) as RunProcessAdvancedFormData;
 +    const { processOwnerUuid, selectedWorkflow } = state.runProcessPanel;
 +    if (selectedWorkflow) {
 +        const newProcessData = {
 +            ownerUuid: processOwnerUuid,
 +            name: basicForm.name,
 +            description: basicForm.description,
 +            state: ContainerRequestState.COMMITTED,
 +            mounts: createWorkflowMounts(selectedWorkflow, normalizeInputKeys(inputsForm)),
 +            runtimeConstraints: {
 +                API: true,
 +                vcpus: 1,
 +                ram: 1073741824,
 +            },
 +            containerImage: 'arvados/jobs:1.1.4.20180618144723',
 +            cwd: '/var/spool/cwl',
 +            command: [
 +                'arvados-cwl-runner',
 +                '--local',
 +                '--api=containers',
 +                `--project-uuid=${processOwnerUuid}`,
 +                '/var/lib/cwl/workflow.json#main',
 +                '/var/lib/cwl/cwl.input.json'
 +            ],
 +            outputPath: '/var/spool/cwl',
 +            priority: 1,
 +            outputName: advancedForm && advancedForm.output ? advancedForm.output : undefined,
 +        };
 +        const newProcess = await services.containerRequestService.create(newProcessData);
 +        dispatch(navigateToProcess(newProcess.uuid));
 +    }
 +};
 +
 +const normalizeInputKeys = (inputs: WorkflowInputsData): WorkflowInputsData =>
 +    Object.keys(inputs).reduce((normalizedInputs, key) => ({
 +        ...normalizedInputs,
 +        [key.split('/').slice(1).join('/')]: inputs[key],
-     }), {});
++    }), {});
++export const searchWorkflows = (term: string) => runProcessPanelActions.SEARCH_WORKFLOWS(term);
index 2470de1436e30605356dfbbdb83cdb764859eb11,10cdaeb77e3de7280774e157dfef381d7305d319..0ad06bee58da253d83e2ad31fbad04a65b1bd7d6
@@@ -3,33 -3,27 +3,36 @@@
  // SPDX-License-Identifier: AGPL-3.0
  
  import { RunProcessPanelAction, runProcessPanelActions } from '~/store/run-process-panel/run-process-panel-actions';
 -import { WorkflowResource } from '~/models/workflow';
 +import { WorkflowResource, CommandInputParameter, getWorkflowInputs, parseWorkflowDefinition } from '~/models/workflow';
  
  interface RunProcessPanel {
 +    processOwnerUuid: string;
      currentStep: number;
      workflows: WorkflowResource[];
+     searchWorkflows: WorkflowResource[];
      selectedWorkflow: WorkflowResource | undefined;
 +    inputs: CommandInputParameter[];
  }
  
  const initialState: RunProcessPanel = {
 +    processOwnerUuid: '',
      currentStep: 0,
      workflows: [],
 -    selectedWorkflow: undefined
 +    selectedWorkflow: undefined,
 +    inputs: [],
+     searchWorkflows: [],
  };
  
  export const runProcessPanelReducer = (state = initialState, action: RunProcessPanelAction): RunProcessPanel =>
      runProcessPanelActions.match(action, {
 +        SET_PROCESS_OWNER_UUID: processOwnerUuid => ({ ...state, processOwnerUuid }),
          SET_CURRENT_STEP: currentStep => ({ ...state, currentStep }),
-         SET_WORKFLOWS: workflows => ({ ...state, workflows }),
 +        SET_SELECTED_WORKFLOW: selectedWorkflow => ({
 +            ...state,
 +            selectedWorkflow,
 +            inputs: getWorkflowInputs(parseWorkflowDefinition(selectedWorkflow)) || [],
 +        }),
+         SET_WORKFLOWS: workflows => ({ ...state, workflows, searchWorkflows: workflows }), 
 -        SET_SELECTED_WORKFLOW: selectedWorkflow => ({ ...state, selectedWorkflow }),
+         SEARCH_WORKFLOWS: term => ({ ...state, searchWorkflows: state.workflows.filter(workflow => workflow.name.includes(term)) }),
          default: () => state
      });
index da21d704d766e48577ecc96f9eb40d4b495998a2,b656ba1f0d776d819c2e292f0c37f35af622161a..1489527530fa427ea9e72f72a7ec316e7d41416a
@@@ -17,15 -15,16 +17,16 @@@ export type RunProcessPanelRootActionPr
  
  type RunProcessPanelRootProps = RunProcessPanelRootDataProps & RunProcessPanelRootActionProps;
  
- export const RunProcessPanelRoot = ({ runProcess, currentStep, onSetStep, onSetWorkflow, workflows, selectedWorkflow }: RunProcessPanelRootProps) =>
 -export const RunProcessPanelRoot = ({ currentStep, onSearch, onSetStep, onRunProcess, onSetWorkflow, workflows, selectedWorkflow }: RunProcessPanelRootProps) =>
++export const RunProcessPanelRoot = ({ runProcess, currentStep, onSearch, onSetStep, onSetWorkflow, workflows, selectedWorkflow }: RunProcessPanelRootProps) =>
      <Stepper activeStep={currentStep} orientation="vertical" elevation={2}>
          <Step>
              <StepLabel>Choose a workflow</StepLabel>
              <StepContent>
 -                <RunProcessFirstStep 
 +                <RunProcessFirstStep
                      workflows={workflows}
                      selectedWorkflow={selectedWorkflow}
-                     onSetStep={onSetStep}
+                     onSearch={onSearch}
+                     onSetStep={onSetStep} 
                      onSetWorkflow={onSetWorkflow} />
              </StepContent>
          </Step>
index 68917c2cf94ae108383be387488e475fae0d249a,1f43e05ce367fd66a1718c038bf85d636d227a54..42324ab032455c023ddd0c752895f24ec63a8c97
@@@ -6,7 -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 } from '~/store/run-process-panel/run-process-panel-actions';
 -import { goToStep, setWorkflow, searchWorkflows } from '~/store/run-process-panel/run-process-panel-actions';
++import { goToStep, setWorkflow, runProcess, searchWorkflows } from '~/store/run-process-panel/run-process-panel-actions';
  import { WorkflowResource } from '~/models/workflow';
  
  const mapStateToProps = ({ runProcessPanel }: RootState): RunProcessPanelRootDataProps => {
@@@ -24,8 -24,11 +24,11 @@@ const mapDispatchToProps = (dispatch: D
      onSetWorkflow: (workflow: WorkflowResource) => {
          dispatch<any>(setWorkflow(workflow));
      },
 -    onRunProcess: () => {
 -        
 +    runProcess: () => {
 +        dispatch<any>(runProcess);
+     },
+     onSearch: (term: string) => {
+         dispatch<any>(searchWorkflows(term));
      }
  });