X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/e140179bec632ad7dc3b6a232c09377693eea36e..bbd6e1809d764ca269793424d3084bdb93311828:/src/store/run-process-panel/run-process-panel-reducer.ts diff --git a/src/store/run-process-panel/run-process-panel-reducer.ts b/src/store/run-process-panel/run-process-panel-reducer.ts index a288ae72..9c716999 100644 --- a/src/store/run-process-panel/run-process-panel-reducer.ts +++ b/src/store/run-process-panel/run-process-panel-reducer.ts @@ -3,17 +3,61 @@ // SPDX-License-Identifier: AGPL-3.0 import { RunProcessPanelAction, runProcessPanelActions } from '~/store/run-process-panel/run-process-panel-actions'; +import { WorkflowResource, CommandInputParameter, getWorkflowInputs, parseWorkflowDefinition } from '~/models/workflow'; interface RunProcessPanel { + processPathname: string; + processOwnerUuid: string; currentStep: number; + isStepChanged: boolean; + workflows: WorkflowResource[]; + searchWorkflows: WorkflowResource[]; + selectedWorkflow: WorkflowResource | undefined; + presets?: WorkflowResource[]; + selectedPreset?: WorkflowResource; + inputs: CommandInputParameter[]; } const initialState: RunProcessPanel = { - currentStep: 0 + processPathname: '', + processOwnerUuid: '', + currentStep: 0, + isStepChanged: false, + workflows: [], + selectedWorkflow: undefined, + inputs: [], + searchWorkflows: [], }; export const runProcessPanelReducer = (state = initialState, action: RunProcessPanelAction): RunProcessPanel => runProcessPanelActions.match(action, { + SET_PROCESS_PATHNAME: processPathname => ({ ...state, processPathname }), + SET_PROCESS_OWNER_UUID: processOwnerUuid => ({ ...state, processOwnerUuid }), SET_CURRENT_STEP: currentStep => ({ ...state, currentStep }), + SET_STEP_CHANGED: isStepChanged => ({ ...state, isStepChanged }), + SET_SELECTED_WORKFLOW: selectedWorkflow => ({ + ...state, + selectedWorkflow, + presets: undefined, + selectedPreset: selectedWorkflow, + inputs: getWorkflowInputs(parseWorkflowDefinition(selectedWorkflow)) || [], + }), + SET_WORKFLOW_PRESETS: presets => ({ + ...state, + presets, + }), + SELECT_WORKFLOW_PRESET: selectedPreset => ({ + ...state, + selectedPreset, + }), + SET_WORKFLOWS: workflows => ({ ...state, workflows, searchWorkflows: workflows }), + SEARCH_WORKFLOWS: term => { + const termRegex = new RegExp(term, 'i'); + return { + ...state, + searchWorkflows: state.workflows.filter(workflow => termRegex.test(workflow.name)), + }; + }, + RESET_RUN_PROCESS_PANEL: () => ({ ...initialState, processOwnerUuid: state.processOwnerUuid }), default: () => state }); \ No newline at end of file