diff --git a/src/components/parameters/ParameterRecStruct.svelte b/src/components/parameters/ParameterRecStruct.svelte index 9f734d4094..3882603d32 100644 --- a/src/components/parameters/ParameterRecStruct.svelte +++ b/src/components/parameters/ParameterRecStruct.svelte @@ -12,6 +12,7 @@ import ParameterName from './ParameterName.svelte'; import ParameterRec from './ParameterRec.svelte'; import ParameterUnits from './ParameterUnits.svelte'; + import { compare } from '../../utilities/generic'; export let disabled: boolean = false; export let expanded: boolean = false; @@ -33,15 +34,21 @@ function getSubFormParameters(formParameter: FormParameter): FormParameter[] { const { schema, value = [] } = formParameter; - const { items: keys } = schema; + const { items: keys, metadata } = schema; + const order = metadata?.item_order; const structKeys = Object.keys(keys).sort(); + const structOrderMap = new Map(); + order?.forEach((structKey, index) => { + structOrderMap.set(structKey, index); + }); + const subFormParameters = structKeys.map((key, index) => { let subFormParameter: FormParameter = { errors: null, key, name: key, - order: index, + order: structOrderMap.get(key) ?? index, schema: schema.items[key], value: value !== null ? value[key] : null, valueSource: formParameter.valueSource, @@ -49,6 +56,8 @@ return subFormParameter; }); + subFormParameters.sort((a, b) => compare(a.order, b.order)); + return subFormParameters; } diff --git a/src/components/scheduling/goals/SchedulingGoal.svelte b/src/components/scheduling/goals/SchedulingGoal.svelte index 2c6d25ca70..db5de830f5 100644 --- a/src/components/scheduling/goals/SchedulingGoal.svelte +++ b/src/components/scheduling/goals/SchedulingGoal.svelte @@ -61,11 +61,19 @@ const schema = version?.parameter_schema; if (schema && schema.type === 'struct') { - formParameters = Object.entries(schema.items).map(([name, subschema], i) => { + const { items, metadata } = schema; + const order = metadata?.item_order; + + const structOrderMap = new Map(); + order?.forEach((structKey, index) => { + structOrderMap.set(structKey, index); + }); + + formParameters = Object.entries(items).map(([name, subschema], i) => { return { errors: null, name, - order: i, + order: structOrderMap.get(name) ?? i, required: true, schema: subschema, value: diff --git a/src/types/schema.ts b/src/types/schema.ts index dc8e15da1d..b936ae2633 100644 --- a/src/types/schema.ts +++ b/src/types/schema.ts @@ -3,6 +3,7 @@ type ValueSchemaMetadata = { description?: { value: string; }; + item_order?: string[]; unit?: { value: string; };