diff --git a/frontend/src/lib/components/apps/components/buttons/AppButton.svelte b/frontend/src/lib/components/apps/components/buttons/AppButton.svelte index 48eb6462ad..c46d28c245 100644 --- a/frontend/src/lib/components/apps/components/buttons/AppButton.svelte +++ b/frontend/src/lib/components/apps/components/buttons/AppButton.svelte @@ -118,6 +118,7 @@ {outputs} {extraKey} refreshOnStart={resolvedConfig.triggerOnAppLoad} + triggerable > {#if errorsMessage} diff --git a/frontend/src/lib/components/apps/components/buttons/AppForm.svelte b/frontend/src/lib/components/apps/components/buttons/AppForm.svelte index 1efd623e4b..3cb42aa030 100644 --- a/frontend/src/lib/components/apps/components/buttons/AppForm.svelte +++ b/frontend/src/lib/components/apps/components/buttons/AppForm.svelte @@ -71,6 +71,7 @@ runnableClass="!block" runnableStyle={css?.container?.style} {outputs} + triggerable >
diff --git a/frontend/src/lib/components/apps/components/helpers/HiddenComponent.svelte b/frontend/src/lib/components/apps/components/helpers/HiddenComponent.svelte index 407fbfa9c1..47f57289fb 100644 --- a/frontend/src/lib/components/apps/components/helpers/HiddenComponent.svelte +++ b/frontend/src/lib/components/apps/components/helpers/HiddenComponent.svelte @@ -14,9 +14,9 @@ export let name: string export let inlineScript: InlineScript | undefined export let fields: Record - export let recomputeOnInputChanged: boolean - export let recomputableByRefreshButton: boolean + export let autoRefresh: boolean export let noBackendValue: any = undefined + export let recomputeOnInputChanged: boolean const { worldStore, staticExporter, noBackend } = getContext('AppViewerContext') @@ -38,10 +38,10 @@ render={false} {id} {fields} - autoRefresh={true} - {recomputeOnInputChanged} + {autoRefresh} bind:result transformer={undefined} + {recomputeOnInputChanged} runnable={{ name, inlineScript, @@ -49,7 +49,6 @@ }} wrapperClass="hidden" {outputs} - {recomputableByRefreshButton} > diff --git a/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte b/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte index f705ed8c3b..86bd8c9732 100644 --- a/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte +++ b/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte @@ -34,7 +34,6 @@ export let extraKey = '' export let recomputeOnInputChanged: boolean = true export let loading = false - export let recomputableByRefreshButton: boolean = true export let refreshOnStart: boolean = false const { @@ -351,8 +350,8 @@ } $runnableComponents[id] = { - autoRefresh: autoRefresh && recomputableByRefreshButton, - refreshOnStart, + autoRefresh: autoRefresh, + refreshOnStart: refreshOnStart, cb: cancellableRun } diff --git a/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte b/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte index 60a250ad51..e594f6ac20 100644 --- a/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte +++ b/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte @@ -42,6 +42,7 @@ export let outputs: { result: Output; loading: Output } export let extraKey: string | undefined = undefined export let refreshOnStart: boolean = false + export let triggerable: boolean = false const { staticExporter, noBackend, componentControl, runnableComponents } = getContext('AppViewerContext') @@ -59,8 +60,18 @@ } }) + // We need to make sure that old apps have correct values. Triggerable (button, form, etc) have both autoRefresh and recomputeOnInputChanged set to false + $: if (triggerable && componentInput?.type === 'runnable' && componentInput.autoRefresh) { + componentInput.autoRefresh = false + componentInput.recomputeOnInputChanged = false + } + function isRunnableDefined(componentInput) { - return isScriptByNameDefined(componentInput) || isScriptByPathDefined(componentInput) + return ( + (isScriptByNameDefined(componentInput) && + componentInput.runnable.inlineScript != undefined) || + isScriptByPathDefined(componentInput) + ) } export function onSuccess() { @@ -113,11 +124,9 @@ bind:result runnable={componentInput.runnable} transformer={componentInput.transformer} - autoRefresh={autoRefresh !== undefined + autoRefresh={componentInput.autoRefresh === undefined ? autoRefresh - : componentInput?.type === 'runnable' - ? componentInput.autoRefresh - : false} + : componentInput.autoRefresh} bind:recomputeOnInputChanged={componentInput.recomputeOnInputChanged} {id} {extraQueryParams} diff --git a/frontend/src/lib/components/apps/components/inputs/AppMultiSelect.svelte b/frontend/src/lib/components/apps/components/inputs/AppMultiSelect.svelte index a993266849..a6ad0114e3 100644 --- a/frontend/src/lib/components/apps/components/inputs/AppMultiSelect.svelte +++ b/frontend/src/lib/components/apps/components/inputs/AppMultiSelect.svelte @@ -48,7 +48,7 @@ } } - $: value && outputs?.result.set(value.map((v) => v.value)) + $: value ? outputs?.result.set(value.map((v) => v.value)) : outputs?.result.set([]) $: css = concatCustomCss($app.css?.multiselectcomponent, customCss) diff --git a/frontend/src/lib/components/apps/editor/AppPreview.svelte b/frontend/src/lib/components/apps/editor/AppPreview.svelte index 67d2a91ea4..5d03b70185 100644 --- a/frontend/src/lib/components/apps/editor/AppPreview.svelte +++ b/frontend/src/lib/components/apps/editor/AppPreview.svelte @@ -171,7 +171,7 @@ name={script.name} fields={script.fields} recomputeOnInputChanged={script.recomputeOnInputChanged ?? true} - recomputableByRefreshButton={script.autoRefresh ?? false} + autoRefresh={script.autoRefresh ?? false} noBackendValue={script.noBackendValue} /> {/if} diff --git a/frontend/src/lib/components/apps/editor/GridEditor.svelte b/frontend/src/lib/components/apps/editor/GridEditor.svelte index f54575521c..5a56a81a74 100644 --- a/frontend/src/lib/components/apps/editor/GridEditor.svelte +++ b/frontend/src/lib/components/apps/editor/GridEditor.svelte @@ -129,7 +129,7 @@ name={script.name} fields={script.fields} recomputeOnInputChanged={script.recomputeOnInputChanged ?? true} - recomputableByRefreshButton={script.autoRefresh ?? false} + autoRefresh={script.autoRefresh ?? false} /> {/if} {/each} diff --git a/frontend/src/lib/components/apps/editor/SettingsPanel.svelte b/frontend/src/lib/components/apps/editor/SettingsPanel.svelte index 57dc09eb61..2a4d84444a 100644 --- a/frontend/src/lib/components/apps/editor/SettingsPanel.svelte +++ b/frontend/src/lib/components/apps/editor/SettingsPanel.svelte @@ -68,8 +68,6 @@ hiddenInlineScript.script.doNotRecomputeOnInputChanged = undefined } } - - $: hasScript = hiddenInlineScript?.script?.inlineScript != undefined {#if componentSettings} @@ -101,7 +99,6 @@
diff --git a/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte b/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte index ec339c3c5d..ffbb3cbe1f 100644 --- a/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte +++ b/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte @@ -59,9 +59,9 @@ push(history, $app) const id = componentSettings?.item?.id - const onDelete = id ? $componentControl[id]?.onDelete : undefined - if (onDelete) { - onDelete() + const onDeleteComponentControl = id ? $componentControl[id]?.onDelete : undefined + if (onDeleteComponentControl) { + onDeleteComponentControl() } if (componentSettings?.item.id) { diff --git a/frontend/src/lib/components/apps/editor/settingsPanel/script/BackgroundScriptSettings.svelte b/frontend/src/lib/components/apps/editor/settingsPanel/script/BackgroundScriptSettings.svelte index 23708b5220..9ca1dd8316 100644 --- a/frontend/src/lib/components/apps/editor/settingsPanel/script/BackgroundScriptSettings.svelte +++ b/frontend/src/lib/components/apps/editor/settingsPanel/script/BackgroundScriptSettings.svelte @@ -8,28 +8,29 @@ export let script: HiddenInlineScript export let id: string - export let hasScript: boolean const { runnableComponents } = getContext('AppViewerContext') + + function updateAutoRefresh() { + const autoRefresh = script.autoRefresh + if ($runnableComponents?.[id]?.autoRefresh !== autoRefresh && autoRefresh !== undefined) { + $runnableComponents[id] = { + ...$runnableComponents[id], + autoRefresh + } + } + }
- {#if hasScript} + {#if script.inlineScript} { - const autoRefresh = script.autoRefresh - if ($runnableComponents?.[id]?.autoRefresh !== autoRefresh && autoRefresh !== undefined) { - $runnableComponents[id] = { - ...$runnableComponents[id], - autoRefresh - } - } - }} + on:updateAutoRefresh={updateAutoRefresh} /> import type { ResultAppInput } from '$lib/components/apps/inputType' import type { ButtonType } from '$lib/components/common/button/model' - import { isTriggerable } from './utils' + import { isTriggerable, isFrontend } from './utils' import type { AppComponent } from '../../component' import ScriptTransformer from './shared/ScriptTransformer.svelte' @@ -29,6 +29,23 @@ const { runnableComponents } = getContext('AppViewerContext') export let actions: ActionType[] = [] + + function updateAutoRefresh() { + const autoRefresh = + appComponent.componentInput?.type === 'runnable' && appComponent?.componentInput?.autoRefresh + + if ( + appComponent.componentInput?.type === 'runnable' && + $runnableComponents?.[appComponent.id]?.autoRefresh !== autoRefresh && + !isTriggerable(appComponent.type) && + autoRefresh !== undefined + ) { + $runnableComponents[appComponent.id] = { + ...$runnableComponents[appComponent.id], + autoRefresh + } + } + }
@@ -44,27 +61,12 @@ {#if hasScript} { - const autoRefresh = - appComponent.componentInput?.type === 'runnable' && - appComponent?.componentInput?.autoRefresh - - if ( - appComponent.componentInput?.type === 'runnable' && - $runnableComponents?.[appComponent.id]?.autoRefresh !== autoRefresh && - !isTriggerable(appComponent.type) && - autoRefresh !== undefined - ) { - $runnableComponents[appComponent.id] = { - ...$runnableComponents[appComponent.id], - autoRefresh - } - } - }} + on:updateAutoRefresh={updateAutoRefresh} /> {:else} diff --git a/frontend/src/lib/components/apps/editor/settingsPanel/script/shared/BackgroundScriptTriggerBy.svelte b/frontend/src/lib/components/apps/editor/settingsPanel/script/shared/BackgroundScriptTriggerBy.svelte index 08d6ff6179..3051d4d022 100644 --- a/frontend/src/lib/components/apps/editor/settingsPanel/script/shared/BackgroundScriptTriggerBy.svelte +++ b/frontend/src/lib/components/apps/editor/settingsPanel/script/shared/BackgroundScriptTriggerBy.svelte @@ -1,124 +1,22 @@ - - {#if isFrontend} -
- -
- {/if} - {#if hasNoTriggers} - - This script has no triggers. It will never run. - - {:else} - {#if triggerEvents.length > 0} -
Events
-
- {#each triggerEvents as triggerEvent} - {triggerEvent} - {/each} -
- {/if} - {#if changeEvents.length > 0 && (recomputeOnInputChanged || isFrontend)} -
Change on value
-
- {#each changeEvents as changeEvent} - - {changeEvent} - {#if isFrontend} - - {/if} - - - {/each} -
- {/if} - {/if} -
+{#if script.inlineScript} + +{/if} diff --git a/frontend/src/lib/components/apps/editor/settingsPanel/script/shared/ComponentScriptTriggerBy.svelte b/frontend/src/lib/components/apps/editor/settingsPanel/script/shared/ComponentScriptTriggerBy.svelte index ba1b40510a..c5a99d4aad 100644 --- a/frontend/src/lib/components/apps/editor/settingsPanel/script/shared/ComponentScriptTriggerBy.svelte +++ b/frontend/src/lib/components/apps/editor/settingsPanel/script/shared/ComponentScriptTriggerBy.svelte @@ -1,48 +1,34 @@ - - {#if hasNoTriggers} - - This script has no triggers. It will never run. - - {:else} - {#if triggerEvents.length > 0} -
Events
-
- {#each triggerEvents as triggerEvent} - {triggerEvent} - {/each} -
- {/if} - {#if changeEvents.length > 0 && appInput.recomputeOnInputChanged && !isTriggerable(appComponent.type)} -
Change on value
-
- {#each changeEvents as changeEvent} - {changeEvent} - {/each} -
- {/if} - {/if} -
+{#if appInput?.runnable?.type === 'runnableByName'} + +{:else} + +{/if} diff --git a/frontend/src/lib/components/apps/editor/settingsPanel/script/shared/ScriptTriggers.svelte b/frontend/src/lib/components/apps/editor/settingsPanel/script/shared/ScriptTriggers.svelte new file mode 100644 index 0000000000..db4066841e --- /dev/null +++ b/frontend/src/lib/components/apps/editor/settingsPanel/script/shared/ScriptTriggers.svelte @@ -0,0 +1,119 @@ + + + + {#if isFrontend} +
+ +
+ {/if} + {#if hasNoTriggers} + + This script has no triggers. It will never run. + + {:else} + {#if triggerEvents.length > 0} +
Events
+
+ {#each triggerEvents as triggerEvent} + {triggerEvent} + {/each} +
+ {/if} + {#if changeEvents.length > 0 && shoudlDisplayChangeEvents} +
Change on value
+
+ {#each changeEvents as changeEvent} + + {changeEvent} + {#if isFrontend} + + {/if} + + {/each} +
+ {/if} + {/if} +