diff --git a/frontend/src/lib/components/flows/content/FlowBranchOneWrapper.svelte b/frontend/src/lib/components/flows/content/FlowBranchOneWrapper.svelte index d1f9470ffd..b83fe8d855 100644 --- a/frontend/src/lib/components/flows/content/FlowBranchOneWrapper.svelte +++ b/frontend/src/lib/components/flows/content/FlowBranchOneWrapper.svelte @@ -43,6 +43,7 @@ Branch predicate
{ editor?.insertAtCursor(detail) diff --git a/frontend/src/lib/components/flows/content/FlowBranchesWrapper.svelte b/frontend/src/lib/components/flows/content/FlowBranchesWrapper.svelte index 0433fee414..44b2204b94 100644 --- a/frontend/src/lib/components/flows/content/FlowBranchesWrapper.svelte +++ b/frontend/src/lib/components/flows/content/FlowBranchesWrapper.svelte @@ -9,6 +9,7 @@ export let flowModule: FlowModule export let parentModule: FlowModule | undefined + export let previousModuleId: string | undefined let selected: string = 'retries' @@ -29,13 +30,13 @@
- +
- +
diff --git a/frontend/src/lib/components/flows/content/FlowLoop.svelte b/frontend/src/lib/components/flows/content/FlowLoop.svelte index 5daf9dc14a..a3aacd2182 100644 --- a/frontend/src/lib/components/flows/content/FlowLoop.svelte +++ b/frontend/src/lib/components/flows/content/FlowLoop.svelte @@ -52,6 +52,7 @@ {#if mod.value.iterator.type == 'javascript'}
{ editor?.insertAtCursor(detail) @@ -98,13 +99,13 @@
- +
- +
diff --git a/frontend/src/lib/components/flows/content/FlowModuleComponent.svelte b/frontend/src/lib/components/flows/content/FlowModuleComponent.svelte index de175ecd12..360c40f8f0 100644 --- a/frontend/src/lib/components/flows/content/FlowModuleComponent.svelte +++ b/frontend/src/lib/components/flows/content/FlowModuleComponent.svelte @@ -184,7 +184,10 @@
{#if selected === 'inputs'}
- +
- +
{/if}
diff --git a/frontend/src/lib/components/flows/content/FlowModuleEarlyStop.svelte b/frontend/src/lib/components/flows/content/FlowModuleEarlyStop.svelte index 4a9fa2ecb4..4ae6677209 100644 --- a/frontend/src/lib/components/flows/content/FlowModuleEarlyStop.svelte +++ b/frontend/src/lib/components/flows/content/FlowModuleEarlyStop.svelte @@ -11,6 +11,7 @@ const { previewArgs } = getContext('FlowEditorContext') + export let previousModuleId: string | undefined export let flowModule: FlowModule export let parentModule: FlowModule | undefined @@ -58,6 +59,7 @@ Stop condition expression
{ editor?.insertAtCursor(detail) diff --git a/frontend/src/lib/components/flows/content/FlowModuleSuspend.svelte b/frontend/src/lib/components/flows/content/FlowModuleSuspend.svelte index 087aaab356..997bc5336d 100644 --- a/frontend/src/lib/components/flows/content/FlowModuleSuspend.svelte +++ b/frontend/src/lib/components/flows/content/FlowModuleSuspend.svelte @@ -11,6 +11,7 @@ import type { FlowEditorContext } from '../types' export let flowModule: FlowModule + export let previousModuleId: string | undefined const { selectedId } = getContext('FlowEditorContext') @@ -86,6 +87,7 @@ {#if flowModule.sleep && schema.properties['sleep']}
{ diff --git a/frontend/src/lib/components/flows/content/FlowModuleWrapper.svelte b/frontend/src/lib/components/flows/content/FlowModuleWrapper.svelte index be3114562d..391847db79 100644 --- a/frontend/src/lib/components/flows/content/FlowModuleWrapper.svelte +++ b/frontend/src/lib/components/flows/content/FlowModuleWrapper.svelte @@ -33,9 +33,9 @@ {#if flowModule.value.type === 'forloopflow'} {:else if flowModule.value.type === 'branchone'} - + {:else if flowModule.value.type === 'branchall'} - + {:else if flowModule.value.type === 'identity'} ({ extra_perms: {} }) +function dfs(modules: FlowModule[]): string[] { + let result: string[] = [] + for (const module of modules) { + if (module.value.type == 'forloopflow') { + result = result.concat(dfs(module.value.modules)).concat(module.id) + } else if (module.value.type == 'branchone') { + result = result.concat(dfs(module.value.branches.map((b) => b.modules).flat().concat(module.value.default)).concat(module.id)) + } else if (module.value.type == 'branchall') { + result = result.concat(dfs(module.value.branches.map((b) => b.modules).flat()).concat(module.id)) + } else { + result.push(module.id) + } + } + return result +} +export const flowIds = derived(flowStore, flow => dfs(flow.value.modules)) + export async function initFlow(flow: Flow) { let counter = 40 diff --git a/frontend/src/lib/components/flows/propPicker/PropPickerWrapper.svelte b/frontend/src/lib/components/flows/propPicker/PropPickerWrapper.svelte index f1d98ecbeb..9d641783df 100644 --- a/frontend/src/lib/components/flows/propPicker/PropPickerWrapper.svelte +++ b/frontend/src/lib/components/flows/propPicker/PropPickerWrapper.svelte @@ -24,6 +24,7 @@ export let pickableProperties: Object = {} export let displayContext = true + export let priorId: string | undefined const propPickerConfig = writable(undefined) const dispatch = createEventDispatcher() @@ -49,6 +50,7 @@ { diff --git a/frontend/src/lib/components/flows/utils.ts b/frontend/src/lib/components/flows/utils.ts index 85d99892d4..8137a3b3b3 100644 --- a/frontend/src/lib/components/flows/utils.ts +++ b/frontend/src/lib/components/flows/utils.ts @@ -205,6 +205,16 @@ export function numberToChars(n: number) { return out } +export function charsToNumber(n: string): number { + let b = 1 + let res = 0 + for (let c of n) { + b = b * 26 + res += (c.charCodeAt(0) - charCode) * b + } + return res +} + export function isEmptyFlowModule(flowModule: FlowModule): boolean { return flowModule.value.type === 'identity' } diff --git a/frontend/src/lib/components/propertyPicker/ObjectViewer.svelte b/frontend/src/lib/components/propertyPicker/ObjectViewer.svelte index 8d8eeb38d8..0613fe0459 100644 --- a/frontend/src/lib/components/propertyPicker/ObjectViewer.svelte +++ b/frontend/src/lib/components/propertyPicker/ObjectViewer.svelte @@ -81,7 +81,11 @@ {/each} - + {openBracket}{collapsedSymbol}{closeBracket} {#if !isLast && collapsed} diff --git a/frontend/src/lib/components/propertyPicker/PropPicker.svelte b/frontend/src/lib/components/propertyPicker/PropPicker.svelte index ca8757923d..33a0a64258 100644 --- a/frontend/src/lib/components/propertyPicker/PropPicker.svelte +++ b/frontend/src/lib/components/propertyPicker/PropPicker.svelte @@ -10,9 +10,12 @@ import ObjectViewer from './ObjectViewer.svelte' import { keepByKey } from './utils' + import { flowStateStore } from '../flows/flowState' + import { flowIds } from '../flows/flowStore' export let pickableProperties: Object = {} export let displayContext = true + export let priorId: string | undefined let variables: Record = {} let resources: Record = {} let displayVariable = false @@ -28,6 +31,20 @@ $: propsFiltered = search === EMPTY_STRING ? pickableProperties : keepByKey(pickableProperties, search) + let priorIds = {} + $: { + if (priorId) { + const allState = $flowStateStore + priorIds = Object.fromEntries( + Object.entries(allState) + .filter( + (o) => + $flowIds.includes(o[0]) && $flowIds.indexOf(o[0]) <= $flowIds.indexOf(priorId ?? '') + ) + .map((o) => [o[0], o[1].previewResult]) + ) + } + } async function loadVariables() { variables = Object.fromEntries( ( @@ -82,6 +99,16 @@
+{#if priorId} + Result by id +
+ dispatch('select', `result_by_id('${e.detail}')`)} + /> +
+{/if} {#if displayContext} Variables