From 79b86dbb3e06b26ab79953098656e89b60b379ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20G=C3=B6bel?= <dgoebel@techfak.uni-bielefeld.de>
Date: Tue, 13 Feb 2024 14:17:47 +0100
Subject: [PATCH] Parse ungrouped parameters from nextflow schema

#96
---
 .../ParameterSchemaDescriptionComponent.vue   | 16 ++++++--
 .../ParameterSchemaFormComponent.vue          | 37 ++++++++++++-------
 2 files changed, 37 insertions(+), 16 deletions(-)

diff --git a/src/components/parameter-schema/ParameterSchemaDescriptionComponent.vue b/src/components/parameter-schema/ParameterSchemaDescriptionComponent.vue
index 050fa5c..7c70fd7 100644
--- a/src/components/parameter-schema/ParameterSchemaDescriptionComponent.vue
+++ b/src/components/parameter-schema/ParameterSchemaDescriptionComponent.vue
@@ -44,9 +44,19 @@ const navParameterGroups = computed<ParameterGroup[]>(() => {
   return groups;
 });
 
-const parameterGroups = computed<Record<string, never>>(
-  () => props.schema["definitions"],
-);
+const parameterGroups = computed<Record<string, never>>(() => {
+  if (Object.keys(props.schema?.["properties"] ?? {}).length > 0) {
+    return {
+      ...props.schema?.["definitions"],
+      ungrouped_parameters: {
+        title: "Ungrouped Parameters",
+        properties: props.schema?.["properties"],
+        type: "object",
+      },
+    };
+  }
+  return props.schema?.["definitions"];
+});
 </script>
 
 <template>
diff --git a/src/components/parameter-schema/ParameterSchemaFormComponent.vue b/src/components/parameter-schema/ParameterSchemaFormComponent.vue
index 4048dac..b7947f7 100644
--- a/src/components/parameter-schema/ParameterSchemaFormComponent.vue
+++ b/src/components/parameter-schema/ParameterSchemaFormComponent.vue
@@ -104,9 +104,19 @@ const formState = reactive<{
 
 // Computed Properties
 // =============================================================================
-const parameterGroups = computed<Record<string, never>>(
-  () => props.schema?.["definitions"],
-);
+const parameterGroups = computed<Record<string, never>>(() => {
+  if (Object.keys(props.schema?.["properties"] ?? {}).length > 0) {
+    return {
+      ...props.schema?.["definitions"],
+      ungrouped_parameters: {
+        title: "Ungrouped Parameters",
+        properties: props.schema?.["properties"],
+        type: "object",
+      },
+    };
+  }
+  return props.schema?.["definitions"];
+});
 
 // Create a list with the names of all parameter groups
 const navParameterGroups = computed<ParameterGroup[]>(() => {
@@ -159,18 +169,19 @@ watch(
 /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/ban-ts-comment, @typescript-eslint/no-unused-vars */
 function updateSchema(schema: Record<string, any>) {
   validateSchema = schemaCompiler.compile(schema);
-  const b = Object.keys(schema["definitions"]).map((groupName) =>
-    Object.fromEntries(
-      Object.entries(schema["definitions"][groupName]["properties"]).map(
-        ([parameterName, parameter]) => [
-          parameterName,
-          // @ts-ignore
-          parameter["default"],
-        ],
+  const groupedParameters = Object.keys(parameterGroups.value).map(
+    (groupName) =>
+      Object.fromEntries(
+        Object.entries(parameterGroups.value[groupName]["properties"]).map(
+          ([parameterName, parameter]) => [
+            parameterName,
+            // @ts-ignore
+            parameter["default"],
+          ],
+        ),
       ),
-    ),
   );
-  formState.formInput = b.reduce((acc, val) => {
+  formState.formInput = groupedParameters.reduce((acc, val) => {
     return { ...acc, ...val };
   });
   loadParameters(executionRepository.popTemporaryParameters());
-- 
GitLab