Merge branch 'master' into 15160-replacing-files-during-upload
[arvados-workbench2.git] / src / models / workflow.ts
index d7d97c4c962401bfc7bd5ff655ebe88fdaf4d92d..a858c0d7dec98e62d65087740bdf902d1153ec08 100644 (file)
@@ -13,7 +13,8 @@ export interface WorkflowResource extends Resource {
 }
 export interface WorkflowResoruceDefinition {
     cwlVersion: string;
-    $graph: Array<Workflow | CommandLineTool>;
+    graph?: Array<Workflow | CommandLineTool>;
+    $graph?: Array<Workflow | CommandLineTool>;
 }
 export interface Workflow {
     class: 'Workflow';
@@ -41,6 +42,8 @@ export type CommandInputParameter =
     FileCommandInputParameter |
     DirectoryCommandInputParameter |
     StringArrayCommandInputParameter |
+    IntArrayCommandInputParameter |
+    FloatArrayCommandInputParameter |
     FileArrayCommandInputParameter |
     DirectoryArrayCommandInputParameter |
     EnumCommandInputParameter;
@@ -90,6 +93,8 @@ export interface GenericCommandInputParameter<Type, Value> {
     doc?: string | string[];
     default?: Value;
     type?: Type | Array<Type | CWLType.NULL>;
+    value?: Value;
+    disabled?: boolean;
 }
 export type GenericArrayCommandInputParameter<Type, Value> = GenericCommandInputParameter<CommandInputArraySchema<Type>, Value[]>;
 
@@ -104,6 +109,8 @@ export type DirectoryCommandInputParameter = GenericCommandInputParameter<CWLTyp
 export type EnumCommandInputParameter = GenericCommandInputParameter<CommandInputEnumSchema, string>;
 
 export type StringArrayCommandInputParameter = GenericArrayCommandInputParameter<CWLType.STRING, string>;
+export type IntArrayCommandInputParameter = GenericArrayCommandInputParameter<CWLType.INT, string>;
+export type FloatArrayCommandInputParameter = GenericArrayCommandInputParameter<CWLType.FLOAT, string>;
 export type FileArrayCommandInputParameter = GenericArrayCommandInputParameter<CWLType.FILE, File>;
 export type DirectoryArrayCommandInputParameter = GenericArrayCommandInputParameter<CWLType.DIRECTORY, Directory>;
 
@@ -116,11 +123,19 @@ export const parseWorkflowDefinition = (workflow: WorkflowResource): WorkflowRes
 };
 
 export const getWorkflowInputs = (workflowDefinition: WorkflowResoruceDefinition) => {
-    const mainWorkflow = workflowDefinition.$graph.find(item => item.class === 'Workflow' && item.id === '#main');
-    return mainWorkflow
-        ? mainWorkflow.inputs
-        : undefined;
+    if (workflowDefinition.graph) {
+        const mainWorkflow = workflowDefinition.graph.find(item => item.class === 'Workflow' && item.id === '#main');
+        return mainWorkflow
+            ? mainWorkflow.inputs
+            : undefined;
+    } else {
+        const mainWorkflow = workflowDefinition.$graph!.find(item => item.class === 'Workflow' && item.id === '#main');
+        return mainWorkflow
+            ? mainWorkflow.inputs
+            : undefined;
+    }
 };
+
 export const getInputLabel = (input: CommandInputParameter) => {
     return `${input.label || input.id}`;
 };
@@ -141,6 +156,12 @@ export const isPrimitiveOfType = (input: GenericCommandInputParameter<any, any>,
         ? input.type.indexOf(type) > -1
         : input.type === type;
 
+export const isArrayOfType = (input: GenericCommandInputParameter<any, any>, type: CWLType) =>
+    typeof input.type === 'object' &&
+        input.type.type === 'array'
+        ? input.type.items === type
+        : false;
+
 export const stringifyInputType = ({ type }: CommandInputParameter) => {
     if (typeof type === 'string') {
         return type;