Skip to content

Commit 3a0e723

Browse files
adrienmaillardduranb
authored andcommitted
Sort scheduling/activity parameters according to optional order provided in the metadata
1 parent 9c833c7 commit 3a0e723

File tree

3 files changed

+22
-4
lines changed

3 files changed

+22
-4
lines changed

src/components/parameters/ParameterRecStruct.svelte

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import ParameterName from './ParameterName.svelte';
1313
import ParameterRec from './ParameterRec.svelte';
1414
import ParameterUnits from './ParameterUnits.svelte';
15+
import { compare } from '../../utilities/generic';
1516
1617
export let disabled: boolean = false;
1718
export let expanded: boolean = false;
@@ -33,22 +34,30 @@
3334
3435
function getSubFormParameters(formParameter: FormParameter<ValueSchemaStruct>): FormParameter[] {
3536
const { schema, value = [] } = formParameter;
36-
const { items: keys } = schema;
37+
const { items: keys, metadata } = schema;
38+
const order = metadata?.item_order;
3739
const structKeys = Object.keys(keys).sort();
3840
41+
const structOrderMap = new Map<string, number>();
42+
order?.forEach((structKey, index) => {
43+
structOrderMap.set(structKey, index);
44+
});
45+
3946
const subFormParameters = structKeys.map((key, index) => {
4047
let subFormParameter: FormParameter = {
4148
errors: null,
4249
key,
4350
name: key,
44-
order: index,
51+
order: structOrderMap.get(key) ?? index,
4552
schema: schema.items[key],
4653
value: value !== null ? value[key] : null,
4754
valueSource: formParameter.valueSource,
4855
};
4956
return subFormParameter;
5057
});
5158
59+
subFormParameters.sort((a, b) => compare(a.order, b.order));
60+
5261
return subFormParameters;
5362
}
5463

src/components/scheduling/goals/SchedulingGoal.svelte

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,19 @@
6161
const schema = version?.parameter_schema;
6262
6363
if (schema && schema.type === 'struct') {
64-
formParameters = Object.entries(schema.items).map(([name, subschema], i) => {
64+
const { items, metadata } = schema;
65+
const order = metadata?.item_order;
66+
67+
const structOrderMap = new Map<string, number>();
68+
order?.forEach((structKey, index) => {
69+
structOrderMap.set(structKey, index);
70+
});
71+
72+
formParameters = Object.entries(items).map(([name, subschema], i) => {
6573
return {
6674
errors: null,
6775
name,
68-
order: i,
76+
order: structOrderMap.get(name) ?? i,
6977
required: true,
7078
schema: subschema,
7179
value:

src/types/schema.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ type ValueSchemaMetadata = {
44
description?: {
55
value: string;
66
};
7+
item_order?: string[];
78
unit?: {
89
value: string;
910
};

0 commit comments

Comments
 (0)