diff --git a/frontend/src/lib/components/Toggle.svelte b/frontend/src/lib/components/Toggle.svelte index 90e0dbd9cc..0cdfdff629 100644 --- a/frontend/src/lib/components/Toggle.svelte +++ b/frontend/src/lib/components/Toggle.svelte @@ -26,7 +26,7 @@ {#if Boolean(options?.left)} export let autoRefresh: boolean + export let doNotRecomputeOnInputChanged: boolean = false let result: any = undefined @@ -31,6 +32,7 @@ {id} {fields} {autoRefresh} + {doNotRecomputeOnInputChanged} bind:result transformer={undefined} runnable={{ diff --git a/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte b/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte index a9fea2089d..0abbec365c 100644 --- a/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte +++ b/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte @@ -1,5 +1,4 @@ +{#if inlineScript.language !== 'frontend'} +
+ + Whenever an input is changed, the script will be re-run. +
+{/if} + diff --git a/frontend/src/lib/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte b/frontend/src/lib/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte index 2063ad98f1..c43fd73437 100644 --- a/frontend/src/lib/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte +++ b/frontend/src/lib/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte @@ -16,6 +16,7 @@ export let fields: Record export let appComponent: AppComponent export let runnable: RunnableByName + export let doNotRecomputeOnInputChanged: boolean = false const onClick = ['buttoncomponent', 'formbuttoncomponent', 'formcomponent'].includes( appComponent.type @@ -32,6 +33,7 @@ inputDependencies={onClick ? [] : getDependencies(fields)} bind:inlineScript={runnable.inlineScript} {onLoad} + {doNotRecomputeOnInputChanged} id={$selectedComponent} {onClick} /> diff --git a/frontend/src/lib/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte b/frontend/src/lib/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte index 7365da2018..22a4933ce8 100644 --- a/frontend/src/lib/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte +++ b/frontend/src/lib/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte @@ -11,6 +11,7 @@ export let onClick: boolean = false export let onLoad: boolean = false export let id: string | undefined = undefined + export let doNotRecomputeOnInputChanged: boolean = false const colors = { red: 'text-red-800 border-red-600 bg-red-100', @@ -102,7 +103,9 @@
{#if onLoad} Start - Refresh + {#if !doNotRecomputeOnInputChanged} + Refresh + {/if} {/if} {#if onClick} Click @@ -110,7 +113,7 @@
{/if} - {#if inputDependencies.length > 0} + {#if inputDependencies.length > 0 && !doNotRecomputeOnInputChanged}
Change on values
@@ -136,7 +139,7 @@
{/if} {/if} - {#if frontendDependencies} + {#if frontendDependencies && !doNotRecomputeOnInputChanged}
Change on values
diff --git a/frontend/src/lib/components/apps/inputType.ts b/frontend/src/lib/components/apps/inputType.ts index 65a43ab346..9b01606fc8 100644 --- a/frontend/src/lib/components/apps/inputType.ts +++ b/frontend/src/lib/components/apps/inputType.ts @@ -87,6 +87,7 @@ export type ResultInput = { fields: Record type: 'runnable' value?: any + doNotRecomputeOnInputChanged?: boolean } type AppInputSpec = ( diff --git a/frontend/src/lib/components/apps/types.ts b/frontend/src/lib/components/apps/types.ts index c44732527f..47824ff6e3 100644 --- a/frontend/src/lib/components/apps/types.ts +++ b/frontend/src/lib/components/apps/types.ts @@ -112,6 +112,7 @@ export type App = { inlineScript: InlineScript | undefined fields: Record autoRefresh?: boolean + doNotRecomputeOnInputChanged?: boolean }> css?: Partial< Record<'viewer' | 'grid' | AppComponent['type'], Record> diff --git a/frontend/src/lib/components/flows/flowStateUtils.ts b/frontend/src/lib/components/flows/flowStateUtils.ts index 27a28c5d82..1ae3aeedc3 100644 --- a/frontend/src/lib/components/flows/flowStateUtils.ts +++ b/frontend/src/lib/components/flows/flowStateUtils.ts @@ -43,6 +43,8 @@ export async function loadFlowModuleState(flowModule: FlowModule): Promise { if (key === 'failure' || key.includes('branch') || key.includes('loop')) { @@ -52,12 +54,17 @@ export function getNextId(currentKeys: string[]): string { return Math.max(acc, num + 1) } }, 0) - return numberToChars(max) + const char = numberToChars(max) + + if (forbiddenIds.includes(char)) { + return getNextId(currentKeys.concat(char)) + } else { + return char + } } // Computes the next available id export function nextId(flowState: FlowState): string { - const max = Object.keys(flowState).reduce((acc, key) => { if (key === 'failure' || key.includes('branch') || key.includes('loop')) { return acc