diff --git a/frontend/src/lib/common.ts b/frontend/src/lib/common.ts index 51c8602b21..3d829003b2 100644 --- a/frontend/src/lib/common.ts +++ b/frontend/src/lib/common.ts @@ -36,6 +36,7 @@ export type Schema = { $schema: string | undefined type: string properties: { [name: string]: SchemaProperty } + order?: string[] required: string[] } diff --git a/frontend/src/lib/components/LightweightSchemaForm.svelte b/frontend/src/lib/components/LightweightSchemaForm.svelte index 1e7aef452a..853386aec3 100644 --- a/frontend/src/lib/components/LightweightSchemaForm.svelte +++ b/frontend/src/lib/components/LightweightSchemaForm.svelte @@ -19,6 +19,25 @@ $: if (args === undefined) { args = {} } + + reorder() + + function reorder() { + if (schema.order && Array.isArray(schema.order)) { + const n = {} + + ;(schema.order as string[]).forEach((x) => { + n[x] = schema.properties[x] + }) + + Object.keys(schema.properties ?? {}) + .filter((x) => !schema.order?.includes(x)) + .forEach((x) => { + n[x] = schema.properties[x] + }) + schema.properties = n + } + }
{ + n[x] = schema.properties[x] + }) + + Object.keys(schema.properties ?? {}) + .filter((x) => !schema.order?.includes(x)) + .forEach((x) => { + n[x] = schema.properties[x] + }) + schema.properties = n + } + } + + function syncOrders() { + if (schema) { + schema.order = Object.keys(schema.properties ?? {}) + } + } + function modalToSchema(schema: ModalSchemaProperty): SchemaProperty { return { type: schema.selectedType, @@ -101,6 +127,7 @@ schemaModal.closeDrawer() } schema = schema + syncOrders() schemaString = JSON.stringify(schema, null, '\t') jsonEditor?.setCode(schemaString) dispatch('change', schema) @@ -156,6 +183,7 @@ } else { throw Error('Argument not found!') } + syncOrders() } catch (err) { sendUserToast(`Could not delete argument: ${err}`, true) } @@ -187,7 +215,9 @@ entries.splice(i, 1) entries.splice(up ? i - 1 : i + 1, 0, element) schema.properties = Object.fromEntries(entries) + syncOrders() } + let isAnimated = false let error = ''