Create action that selects a preset and updates form values
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Fri, 7 Dec 2018 17:37:13 +0000 (18:37 +0100)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Fri, 7 Dec 2018 17:37:13 +0000 (18:37 +0100)
Feature #14490

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

src/store/run-process-panel/run-process-panel-actions.ts

index 80094ca00b804f2d5b022fc6186072313f9f84b8..c01cee24b710ef34c56c8719d596bbaf7ffabc47 100644 (file)
@@ -6,8 +6,8 @@ import { Dispatch } from 'redux';
 import { unionize, ofType, UnionOf } from "~/common/unionize";
 import { ServiceRepository } from "~/services/services";
 import { RootState } from '~/store/store';
-import { WorkflowResource } from '~/models/workflow';
-import { getFormValues } from 'redux-form';
+import { WorkflowResource, getWorkflowInputs, parseWorkflowDefinition } from '~/models/workflow';
+import { getFormValues, initialize } from 'redux-form';
 import { RUN_PROCESS_BASIC_FORM, RunProcessBasicFormData } from '~/views/run-process-panel/run-process-basic-form';
 import { RUN_PROCESS_INPUTS_FORM } from '~/views/run-process-panel/run-process-inputs-form';
 import { WorkflowInputsData } from '~/models/workflow';
@@ -92,6 +92,16 @@ const loadPresets = (workflowUuid: string) =>
         dispatch(runProcessPanelActions.SET_WORKFLOW_PRESETS(items));
     };
 
+export const selectPreset = (preset: WorkflowResource) =>
+    (dispatch: Dispatch<any>, getState: () => RootState) => {
+        dispatch(runProcessPanelActions.SELECT_WORKFLOW_PRESET(preset));
+        const inputs = getWorkflowInputs(parseWorkflowDefinition(preset)) || [];
+        const values = inputs.reduce((values, input) => ({
+            ...values,
+            [input.id]: input.default,
+        }), {});
+        dispatch(initialize(RUN_PROCESS_INPUTS_FORM, values));
+    };
 
 export const goToStep = (step: number) =>
     (dispatch: Dispatch, getState: () => RootState) => {