19700: Use correct type and check for process raw input data 19700-http-input
authorStephen Smith <stephen@curii.com>
Fri, 2 Dec 2022 00:10:40 +0000 (19:10 -0500)
committerStephen Smith <stephen@curii.com>
Fri, 2 Dec 2022 00:10:40 +0000 (19:10 -0500)
Arvados-DCO-1.1-Signed-off-by: Stephen Smith <stephen@curii.com>

src/store/process-panel/process-panel-actions.ts
src/store/process-panel/process-panel-reducer.ts
src/store/process-panel/process-panel.ts
src/store/processes/processes-actions.ts
src/views/process-panel/process-panel-root.tsx

index 64fc493fb2ea4f5b41a207cfecf63fb294f0d51c..6a9ea337b6d5de8144667c286256b74a347325dc 100644 (file)
@@ -17,7 +17,7 @@ import { initProcessLogsPanel, processLogsPanelActions } from "store/process-log
 import { CollectionFile } from "models/collection-file";
 import { ContainerRequestResource } from "models/container-request";
 import { CommandOutputParameter } from 'cwlts/mappings/v1.0/CommandOutputParameter';
-import { CommandInputParameter, getIOParamId } from 'models/workflow';
+import { CommandInputParameter, getIOParamId, WorkflowInputsData } from 'models/workflow';
 import { getIOParamDisplayValue, ProcessIOParameter } from "views/process-panel/process-io-card";
 import { OutputDetails } from "./process-panel";
 import { AuthState } from "store/auth/auth-reducer";
@@ -27,7 +27,7 @@ export const processPanelActions = unionize({
     SET_PROCESS_PANEL_CONTAINER_REQUEST_UUID: ofType<string>(),
     SET_PROCESS_PANEL_FILTERS: ofType<string[]>(),
     TOGGLE_PROCESS_PANEL_FILTER: ofType<string>(),
-    SET_INPUT_RAW: ofType<CommandInputParameter[] | null>(),
+    SET_INPUT_RAW: ofType<WorkflowInputsData | null>(),
     SET_INPUT_PARAMS: ofType<ProcessIOParameter[] | null>(),
     SET_OUTPUT_RAW: ofType<OutputDetails | null>(),
     SET_OUTPUT_DEFINITIONS: ofType<CommandOutputParameter[]>(),
index 48cdb39f8402ce1f1e63ca57d5fea3a1c3517a3b..45ca10ca29bf33d211ea1878de60e210014fde6a 100644 (file)
@@ -32,7 +32,7 @@ export const processPanelReducer = (state = initialState, action: ProcessPanelAc
         SET_INPUT_RAW: inputRaw => {
             // Since mounts can disappear and reappear, only set inputs
             //   if current state is null or new inputs has content
-            if (state.inputRaw === null || (inputRaw && inputRaw.length)) {
+            if (state.inputRaw === null || (inputRaw && Object.keys(inputRaw).length)) {
                 return { ...state, inputRaw };
             } else {
                 return state;
index d0d5edebf3e7c35807c8f35c11a0f3aafc45c13a..36c3e29f9130ccf5ed8fdb15c8a04a712005110b 100644 (file)
@@ -2,7 +2,7 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { CommandInputParameter } from 'models/workflow';
+import { WorkflowInputsData } from 'models/workflow';
 import { RouterState } from "react-router-redux";
 import { matchProcessRoute } from "routes/routes";
 import { ProcessIOParameter } from "views/process-panel/process-io-card";
@@ -16,7 +16,7 @@ export type OutputDetails = {
 export interface ProcessPanel {
     containerRequestUuid: string;
     filters: { [status: string]: boolean };
-    inputRaw: CommandInputParameter[] | null;
+    inputRaw: WorkflowInputsData | null;
     inputParams: ProcessIOParameter[] | null;
     outputRaw: OutputDetails | null;
     outputDefinitions: CommandOutputParameter[];
index f7822e06ee064929cba111529311d5e5c987f051..e4f35c1e4443741c8acf484c243a45e4867f5720 100644 (file)
@@ -17,7 +17,7 @@ import { initialize } from "redux-form";
 import { RUN_PROCESS_BASIC_FORM, RunProcessBasicFormData } from "views/run-process-panel/run-process-basic-form";
 import { RunProcessAdvancedFormData, RUN_PROCESS_ADVANCED_FORM } from "views/run-process-panel/run-process-advanced-form";
 import { MOUNT_PATH_CWL_WORKFLOW, MOUNT_PATH_CWL_INPUT } from 'models/process';
-import { CommandInputParameter, getWorkflow, getWorkflowInputs, getWorkflowOutputs } from "models/workflow";
+import { CommandInputParameter, getWorkflow, getWorkflowInputs, getWorkflowOutputs, WorkflowInputsData } from "models/workflow";
 import { ProjectResource } from "models/project";
 import { UserResource } from "models/user";
 import { CommandOutputParameter } from "cwlts/mappings/v1.0/CommandOutputParameter";
@@ -141,13 +141,13 @@ export const reRunProcess = (processUuid: string, workflowUuid: string) =>
 /*
  * Fetches raw inputs from containerRequest mounts with fallback to properties
  * Returns undefined if containerRequest not loaded
- * Returns [] if inputs not found in mounts or props
+ * Returns {} if inputs not found in mounts or props
  */
-export const getRawInputs = (data: any): CommandInputParameter[] | undefined => {
+export const getRawInputs = (data: any): WorkflowInputsData | undefined => {
     if (!data) { return undefined; }
     const mountInput = data.mounts?.[MOUNT_PATH_CWL_INPUT]?.content;
     const propsInput = data.properties?.cwl_input;
-    if (!mountInput && !propsInput) { return []; }
+    if (!mountInput && !propsInput) { return {}; }
     return (mountInput || propsInput);
 }
 
@@ -155,6 +155,8 @@ export const getInputs = (data: any): CommandInputParameter[] => {
     // Definitions from mounts are needed so we return early if missing
     if (!data || !data.mounts || !data.mounts[MOUNT_PATH_CWL_WORKFLOW]) { return []; }
     const content  = getRawInputs(data) as any;
+    // Only escape if content is falsy to allow displaying definitions if no inputs are present
+    // (Don't check raw content length)
     if (!content) { return []; }
 
     const inputs = getWorkflowInputs(data.mounts[MOUNT_PATH_CWL_WORKFLOW].content);
index ed808b361a14c68b55121da7c1d34c0cade1daee..388dc746587763e2b0065236a8e3af4c70cc2240 100644 (file)
@@ -18,7 +18,7 @@ import { getProcessPanelLogs, ProcessLogsPanel } from 'store/process-logs-panel/
 import { ProcessLogsCard } from './process-log-card';
 import { FilterOption } from 'views/process-panel/process-log-form';
 import { getInputCollectionMounts } from 'store/processes/processes-actions';
-import { CommandInputParameter } from 'models/workflow';
+import { WorkflowInputsData } from 'models/workflow';
 import { CommandOutputParameter } from 'cwlts/mappings/v1.0/CommandOutputParameter';
 import { AuthState } from 'store/auth/auth-reducer';
 import { ProcessCmdCard } from './process-cmd-card';
@@ -39,7 +39,7 @@ export interface ProcessPanelRootDataProps {
     filters: Array<SubprocessFilterDataProps>;
     processLogsPanel: ProcessLogsPanel;
     auth: AuthState;
-    inputRaw: CommandInputParameter[] | null;
+    inputRaw: WorkflowInputsData | null;
     inputParams: ProcessIOParameter[] | null;
     outputRaw: OutputDetails | null;
     outputDefinitions: CommandOutputParameter[];