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'}
-
+
Move the focus outside of the text editor to recompute the inputs or press
Ctrl/Cmd+S
@@ -209,13 +212,14 @@
{:else if selected === 'early-stop'}
{:else if selected === 'suspend'}
-
+
{/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