From b4867f12bb4f595b5b0e8142ab5d720307ecadd3 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Thu, 4 May 2023 15:39:10 +0200 Subject: [PATCH] fix(frontend): preserve customise arguments --- frontend/src/lib/common.ts | 2 +- frontend/src/lib/components/Editor.svelte | 16 +++++++++++++--- frontend/src/lib/components/SchemaModal.svelte | 2 +- frontend/src/lib/components/ScriptEditor.svelte | 2 +- frontend/src/lib/components/ScriptSchema.svelte | 2 +- frontend/src/lib/infer.ts | 9 +++++---- frontend/src/lib/utils.ts | 2 +- 7 files changed, 23 insertions(+), 12 deletions(-) diff --git a/frontend/src/lib/common.ts b/frontend/src/lib/common.ts index 246464ba73..01d8a8ed3a 100644 --- a/frontend/src/lib/common.ts +++ b/frontend/src/lib/common.ts @@ -8,7 +8,7 @@ export type SupportedLanguage = Script.language export interface SchemaProperty { type: string | undefined - description: string + description?: string pattern?: string default?: any enum?: string[] diff --git a/frontend/src/lib/components/Editor.svelte b/frontend/src/lib/components/Editor.svelte index 744fd57537..bf8a1740c2 100644 --- a/frontend/src/lib/components/Editor.svelte +++ b/frontend/src/lib/components/Editor.svelte @@ -506,9 +506,19 @@ let widgets: HTMLElement | undefined = document.getElementById('monaco-widgets-root') ?? undefined async function loadMonaco() { - const model = meditor.createModel(code, lang, mUri.parse(uri)) - + let model: meditor.ITextModel + try { + model = meditor.createModel(code, lang, mUri.parse(uri)) + } catch (err) { + console.log('model already existed', err) + const nmodel = meditor.getModel(mUri.parse(uri)) + if (!nmodel) { + throw err + } + model = nmodel + } model.updateOptions(lang == 'python' ? { tabSize: 4, insertSpaces: true } : updateOptions) + editor = meditor.create(divEl as HTMLDivElement, { ...editorConfig(model, code, lang, automaticLayout, fixedOverflowWidgets), overflowWidgetsDomNode: widgets, @@ -555,7 +565,7 @@ return () => { try { closeWebsockets() - model.dispose() + model?.dispose() editor && editor.dispose() } catch (err) { console.log('error disposing editor', err) diff --git a/frontend/src/lib/components/SchemaModal.svelte b/frontend/src/lib/components/SchemaModal.svelte index 775b4a9e9d..00c2826c09 100644 --- a/frontend/src/lib/components/SchemaModal.svelte +++ b/frontend/src/lib/components/SchemaModal.svelte @@ -25,7 +25,7 @@ return { name, selectedType: schema.type, - description: schema.description, + description: schema.description ?? '', pattern: schema.pattern, default: schema.default, contentEncoding: schema.contentEncoding, diff --git a/frontend/src/lib/components/ScriptEditor.svelte b/frontend/src/lib/components/ScriptEditor.svelte index 674bfbe464..caafe2071a 100644 --- a/frontend/src/lib/components/ScriptEditor.svelte +++ b/frontend/src/lib/components/ScriptEditor.svelte @@ -73,7 +73,7 @@ schema = schema ?? emptySchema() let isDefault: string[] = [] Object.entries(args).forEach(([k, v]) => { - if (schema.properties[k].default == v) { + if (schema.properties?.[k]?.default == v) { isDefault.push(k) } }) diff --git a/frontend/src/lib/components/ScriptSchema.svelte b/frontend/src/lib/components/ScriptSchema.svelte index 67a0537bd5..754f412b94 100644 --- a/frontend/src/lib/components/ScriptSchema.svelte +++ b/frontend/src/lib/components/ScriptSchema.svelte @@ -23,7 +23,7 @@
- + diff --git a/frontend/src/lib/infer.ts b/frontend/src/lib/infer.ts index 43736fd04e..d1bd2e8ef4 100644 --- a/frontend/src/lib/infer.ts +++ b/frontend/src/lib/infer.ts @@ -44,7 +44,8 @@ export async function inferArgs( } schema.required = [] - const oldProperties = Object.assign({}, schema.properties) + const oldProperties = JSON.parse(JSON.stringify(schema.properties)) + schema.properties = {} for (const arg of inferedSchema.args) { @@ -54,7 +55,9 @@ export async function inferArgs( schema.properties[arg.name] = oldProperties[arg.name] } schema.properties[arg.name] = sortObject(schema.properties[arg.name]) + argSigToJsonSchemaType(arg.typ, schema.properties[arg.name]) + schema.properties[arg.name].default = arg.default if (!arg.has_default && !schema.required.includes(arg.name)) { @@ -72,7 +75,7 @@ function argSigToJsonSchemaType( | { object: { key: string; typ: any }[] }, oldS: SchemaProperty ): void { - const newS: SchemaProperty = { type: '', description: '' } + const newS: SchemaProperty = { type: '' } if (t === 'int') { newS.type = 'integer' } else if (t === 'float') { @@ -134,9 +137,7 @@ function argSigToJsonSchemaType( } } - let oldDescription = oldS.description Object.assign(oldS, newS) - oldS.description = oldDescription if (oldS.format?.startsWith('resource-') && newS.type != 'object') { oldS.format = undefined } diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts index b01308c641..09e35df283 100644 --- a/frontend/src/lib/utils.ts +++ b/frontend/src/lib/utils.ts @@ -751,7 +751,7 @@ export function sortObject(o: T & object): T { return Object.keys(o) .sort() .reduce((obj, key) => { - obj[key] = obj[key] + obj[key] = o[key] return obj }, {}) as T }