Merge branch 'origin/master' into 14478-log-in-into-clusters
[arvados-workbench2.git] / src / store / run-process-panel / run-process-panel-reducer.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { RunProcessPanelAction, runProcessPanelActions } from '~/store/run-process-panel/run-process-panel-actions';
6 import { WorkflowResource, CommandInputParameter, getWorkflowInputs, parseWorkflowDefinition } from '~/models/workflow';
7
8 interface RunProcessPanel {
9     processOwnerUuid: string;
10     currentStep: number;
11     isStepChanged: boolean;
12     workflows: WorkflowResource[];
13     searchWorkflows: WorkflowResource[];
14     selectedWorkflow: WorkflowResource | undefined;
15     presets?: WorkflowResource[];
16     selectedPreset?: WorkflowResource;
17     inputs: CommandInputParameter[];
18 }
19
20 const initialState: RunProcessPanel = {
21     processOwnerUuid: '',
22     currentStep: 0,
23     isStepChanged: false,
24     workflows: [],
25     selectedWorkflow: undefined,
26     inputs: [],
27     searchWorkflows: [],
28 };
29
30 export const runProcessPanelReducer = (state = initialState, action: RunProcessPanelAction): RunProcessPanel =>
31     runProcessPanelActions.match(action, {
32         SET_PROCESS_OWNER_UUID: processOwnerUuid => ({ ...state, processOwnerUuid }),
33         SET_CURRENT_STEP: currentStep => ({ ...state, currentStep }),
34         SET_STEP_CHANGED: isStepChanged => ({ ...state, isStepChanged }),
35         SET_SELECTED_WORKFLOW: selectedWorkflow => ({
36             ...state,
37             selectedWorkflow,
38             presets: undefined,
39             selectedPreset: selectedWorkflow,
40             inputs: getWorkflowInputs(parseWorkflowDefinition(selectedWorkflow)) || [],
41         }),
42         SET_WORKFLOW_PRESETS: presets => ({
43             ...state,
44             presets,
45         }),
46         SELECT_WORKFLOW_PRESET: selectedPreset => ({
47             ...state,
48             selectedPreset,
49         }),
50         SET_WORKFLOWS: workflows => ({ ...state, workflows, searchWorkflows: workflows }),
51         SEARCH_WORKFLOWS: term => {
52             const termRegex = new RegExp(term, 'i');
53             return {
54                 ...state,
55                 searchWorkflows: state.workflows.filter(workflow => termRegex.test(workflow.name)),
56             };
57         },
58         RESET_RUN_PROCESS_PANEL: () => ({ ...initialState, processOwnerUuid: state.processOwnerUuid }),
59         default: () => state
60     });