diff --git a/frontend/src/lib/components/SimpleEditor.svelte b/frontend/src/lib/components/SimpleEditor.svelte index bd285a3e87..4ba9263118 100644 --- a/frontend/src/lib/components/SimpleEditor.svelte +++ b/frontend/src/lib/components/SimpleEditor.svelte @@ -160,7 +160,9 @@ editor.onDidBlurEditorText(() => { code = getCode() }) + } + function loadExtraLib() { if (lang == 'javascript') { const stdLib = { content: libStdContent, filePath: 'es5.d.ts' } if (extraLib != '') { @@ -177,12 +179,16 @@ } } - onMount(() => { + let mounted = false + onMount(async () => { if (browser) { - loadMonaco() + mounted = true + await loadMonaco() } }) + $: mounted && extraLib && loadExtraLib() + onDestroy(() => { try { model && model.dispose() diff --git a/frontend/src/lib/components/TemplateEditor.svelte b/frontend/src/lib/components/TemplateEditor.svelte index 06bd9623bb..e343940e39 100644 --- a/frontend/src/lib/components/TemplateEditor.svelte +++ b/frontend/src/lib/components/TemplateEditor.svelte @@ -459,19 +459,6 @@ editor.addCommand(KeyMod.CtrlCmd | KeyCode.KeyS, function () {}) }) - const stdLib = { content: libStdContent, filePath: 'es5.d.ts' } - if (extraLib != '') { - languages.typescript.javascriptDefaults.setExtraLibs([ - { - content: extraLib, - filePath: 'windmill.d.ts' - }, - stdLib - ]) - } else { - languages.typescript.javascriptDefaults.setExtraLibs([stdLib]) - } - extraModel = meditor.createModel('`' + model.getValue() + '`', 'javascript') const worker = await languages.typescript.getJavaScriptWorker() const client = await worker(extraModel.uri) @@ -589,12 +576,31 @@ editor?.focus() } - onMount(() => { + let mounted = false + onMount(async () => { if (browser) { - loadMonaco() + await loadMonaco() + mounted = true } }) + $: mounted && extraLib && loadExtraLib() + + function loadExtraLib() { + const stdLib = { content: libStdContent, filePath: 'es5.d.ts' } + if (extraLib != '') { + languages.typescript.javascriptDefaults.setExtraLibs([ + { + content: extraLib, + filePath: 'windmill.d.ts' + }, + stdLib + ]) + } else { + languages.typescript.javascriptDefaults.setExtraLibs([stdLib]) + } + } + onDestroy(() => { try { model && model.dispose() diff --git a/frontend/src/lib/components/apps/components/helpers/InputValue.svelte b/frontend/src/lib/components/apps/components/helpers/InputValue.svelte index 872fc79956..9828776707 100644 --- a/frontend/src/lib/components/apps/components/helpers/InputValue.svelte +++ b/frontend/src/lib/components/apps/components/helpers/InputValue.svelte @@ -56,6 +56,18 @@ timeout = setTimeout(cb, debounce_ms) } + function debounce2(cb: () => Promise) { + if (firstDebounce) { + firstDebounce = false + cb() + return + } + if (timeout) { + clearTimeout(timeout) + } + timeout = setTimeout(cb, 1000) + } + $: lastInput && $worldStore && debounce(handleConnection) $: lastInput && @@ -63,7 +75,10 @@ $stateId && $state && debounce(async () => { - value = await getValue(lastInput) + let nvalue = await getValue(lastInput) + if (!deepEqual(nvalue, value)) { + value = nvalue + } dispatch('done') }) @@ -71,7 +86,12 @@ lastInput.type == 'eval' && $stateId && $state && - debounce(async () => (value = await evalExpr(lastInput))) + debounce2(async () => { + let nvalue = await evalExpr(lastInput) + if (!deepEqual(nvalue, value)) { + value = nvalue + } + }) async function handleConnection() { if (lastInput?.type === 'connected') { @@ -88,7 +108,7 @@ dispatch('done') } - async function evalExpr(input: EvalAppInput) { + async function evalExpr(input: EvalAppInput): Promise { try { const r = await eval_like( input.expr, diff --git a/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte b/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte index 86bd8c9732..181d4a4a4f 100644 --- a/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte +++ b/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte @@ -135,11 +135,7 @@ Object.keys(inputs ?? {}).forEach((key: string) => { const input = inputs[key] - if (input.type === 'static' && schemaStripped !== undefined) { - delete schemaStripped.properties[key] - } - - if (input.type === 'connected' && schemaStripped !== undefined) { + if (['static', 'eval', 'connected'].includes(input.type) && schemaStripped !== undefined) { delete schemaStripped.properties[key] } }) diff --git a/frontend/src/lib/components/apps/editor/AppEditor.svelte b/frontend/src/lib/components/apps/editor/AppEditor.svelte index ab76d8351f..f8db3d6229 100644 --- a/frontend/src/lib/components/apps/editor/AppEditor.svelte +++ b/frontend/src/lib/components/apps/editor/AppEditor.svelte @@ -270,7 +270,7 @@ - +
diff --git a/frontend/src/lib/components/apps/editor/appUtils.ts b/frontend/src/lib/components/apps/editor/appUtils.ts index 033316f14a..0c10ae298b 100644 --- a/frontend/src/lib/components/apps/editor/appUtils.ts +++ b/frontend/src/lib/components/apps/editor/appUtils.ts @@ -55,15 +55,7 @@ export function selectId( selectedComponent: Writable, app: App ) { - // this ensure handleClickOutside are triggered - let event = new MouseEvent('click', { - view: window, - bubbles: true, - cancelable: true, - relatedTarget: e.target - }) - window.dispatchEvent(event) - + ;(document?.activeElement as HTMLElement)?.blur() if (e.shiftKey) { selectedComponent.update((old) => { if (old && old?.[0]) { diff --git a/frontend/src/lib/components/apps/editor/component/components.ts b/frontend/src/lib/components/apps/editor/component/components.ts index c0b037cd59..37b179ae88 100644 --- a/frontend/src/lib/components/apps/editor/component/components.ts +++ b/frontend/src/lib/components/apps/editor/component/components.ts @@ -410,8 +410,8 @@ export const components = { }, disabled: { fieldType: 'boolean', - type: 'eval', - expr: 'false' + type: 'static', + value: false }, beforeIcon: { type: 'static', @@ -517,8 +517,8 @@ export const components = { onSuccess: onSuccessClick, disabled: { fieldType: 'boolean', - type: 'eval', - expr: 'false' + type: 'static', + value: false } } } @@ -1536,8 +1536,8 @@ Hello \${ctx.username} }, disabled: { fieldType: 'boolean', - type: 'eval', - expr: 'false' + type: 'static', + value: false } }, componentInput: undefined, diff --git a/frontend/src/lib/components/apps/editor/component/default-codes.ts b/frontend/src/lib/components/apps/editor/component/default-codes.ts index 17cd9e1d1f..0d6b8d98b8 100644 --- a/frontend/src/lib/components/apps/editor/component/default-codes.ts +++ b/frontend/src/lib/components/apps/editor/component/default-codes.ts @@ -97,9 +97,9 @@ export async function main(db: Resource<"postgresql"> = "$res:f/examples/demodb" }` }, displaycomponent: { - deno: `export async function main() { + deno: `export async function main(x = 42) { return { - "foo": 42 + foo: x } }`, python3: `def main(): diff --git a/frontend/src/lib/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte b/frontend/src/lib/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte index dc34ba2c95..41e671fa72 100644 --- a/frontend/src/lib/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +++ b/frontend/src/lib/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte @@ -132,20 +132,16 @@ {/if} {#if inlineScript.language != 'frontend'} - - - Open full editor - + {/if}