windmill-components 1.352.9 → 1.362.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/assets/app.css +8 -45
- package/package/components/ApiConnectForm.svelte +1 -0
- package/package/components/ArgInput.svelte +5 -1
- package/package/components/ChangeInstanceUsername.svelte +20 -12
- package/package/components/ContentSearchInner.svelte +359 -0
- package/package/components/{ContentSearch.svelte.d.ts → ContentSearchInner.svelte.d.ts} +9 -5
- package/package/components/CustomPopover.svelte +73 -0
- package/package/components/CustomPopover.svelte.d.ts +29 -0
- package/package/components/DateTimeInput.svelte +29 -3
- package/package/components/DateTimeInput.svelte.d.ts +4 -0
- package/package/components/Dev.svelte +8 -3
- package/package/components/DurationMs.svelte +2 -2
- package/package/components/FlowBuilder.svelte +122 -24
- package/package/components/FlowBuilder.svelte.d.ts +1 -0
- package/package/components/FlowGraphViewerStep.svelte +2 -2
- package/package/components/FlowJobResult.svelte +5 -3
- package/package/components/FlowStatusViewer.svelte +4 -3
- package/package/components/FlowStatusViewerInner.svelte +265 -160
- package/package/components/FlowStatusViewerInner.svelte.d.ts +15 -2
- package/package/components/HighlightTheme.svelte +75 -77
- package/package/components/InputTransformForm.svelte +2 -0
- package/package/components/JobArgs.svelte +59 -44
- package/package/components/JobArgs.svelte.d.ts +2 -0
- package/package/components/LightweightArgInput.svelte +27 -2
- package/package/components/Path.svelte +3 -8
- package/package/components/Popover.svelte +1 -1
- package/package/components/ResourceEditor.svelte +3 -2
- package/package/components/ResourceEditorDrawer.svelte +4 -1
- package/package/components/ResourcePicker.svelte +1 -0
- package/package/components/RunChart.svelte +6 -3
- package/package/components/RunChart.svelte.d.ts +1 -0
- package/package/components/RunForm.svelte +24 -23
- package/package/components/RunForm.svelte.d.ts +0 -2
- package/package/components/SavedInputs.svelte +50 -39
- package/package/components/ScheduleEditorInner.svelte +26 -4
- package/package/components/ScriptBuilder.svelte +47 -22
- package/package/components/ScriptBuilder.svelte.d.ts +1 -0
- package/package/components/SearchItems.svelte +5 -4
- package/package/components/Summary.svelte +74 -0
- package/package/components/Summary.svelte.d.ts +16 -0
- package/package/components/apps/components/display/AppMarkdown.svelte +3 -2
- package/package/components/apps/components/display/AppMenu.svelte +2 -2
- package/package/components/apps/components/display/AppNavbar.svelte +94 -0
- package/package/components/apps/components/display/AppNavbar.svelte.d.ts +24 -0
- package/package/components/apps/components/display/AppNavbarItem.svelte +146 -0
- package/package/components/apps/components/display/AppNavbarItem.svelte.d.ts +27 -0
- package/package/components/apps/components/display/ResolveNavbarItemPath.svelte +21 -0
- package/package/components/apps/components/display/ResolveNavbarItemPath.svelte.d.ts +20 -0
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +16 -0
- package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +12 -16
- package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte.d.ts +1 -0
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +5 -0
- package/package/components/apps/components/display/table/AppAggridTable.svelte +28 -6
- package/package/components/apps/components/display/table/AppAggridTableActions.svelte +68 -43
- package/package/components/apps/components/inputs/AppDateSelect.svelte +284 -0
- package/package/components/apps/components/inputs/AppDateSelect.svelte.d.ts +21 -0
- package/package/components/apps/components/inputs/AppDateTimeInput.svelte +2 -0
- package/package/components/apps/components/inputs/AppFileInput.svelte +22 -27
- package/package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -0
- package/package/components/apps/components/inputs/AppTextInput.svelte +1 -1
- package/package/components/apps/components/layout/AppDecisionTree.svelte +32 -30
- package/package/components/apps/components/layout/AppModal.svelte +17 -6
- package/package/components/apps/editor/AppDeploymentHistory.svelte +2 -3
- package/package/components/apps/editor/AppDeploymentHistory.svelte.d.ts +3 -2
- package/package/components/apps/editor/AppEditor.svelte +9 -2
- package/package/components/apps/editor/AppEditorHeader.svelte +7 -10
- package/package/components/apps/editor/AppPreview.svelte +12 -3
- package/package/components/apps/editor/AppPreview.svelte.d.ts +2 -0
- package/package/components/apps/editor/DecisionTreeDebug.svelte +92 -68
- package/package/components/apps/editor/DeploymentHistory.svelte +0 -2
- package/package/components/apps/editor/appUtils.d.ts +1 -0
- package/package/components/apps/editor/appUtils.js +17 -0
- package/package/components/apps/editor/component/Component.svelte +23 -0
- package/package/components/apps/editor/component/components.d.ts +205 -3
- package/package/components/apps/editor/component/components.js +160 -1
- package/package/components/apps/editor/component/default-codes.js +13 -13
- package/package/components/apps/editor/component/sets.js +4 -2
- package/package/components/apps/editor/componentsPanel/ComponentList.svelte +12 -12
- package/package/components/apps/editor/componentsPanel/cssUtils.js +39 -3
- package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +6 -0
- package/package/components/apps/editor/contextPanel/ComponentOutput.svelte +2 -2
- package/package/components/apps/editor/contextPanel/ContextPanel.svelte +6 -0
- package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +11 -0
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +4 -0
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +21 -8
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +64 -20
- package/package/components/apps/editor/settingsPanel/ContextVariables.svelte +48 -15
- package/package/components/apps/editor/settingsPanel/ContextVariables.svelte.d.ts +1 -0
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +25 -5
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +2 -1
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte.d.ts +1 -0
- package/package/components/apps/editor/settingsPanel/DocLink.svelte +33 -0
- package/package/components/apps/editor/settingsPanel/DocLink.svelte.d.ts +19 -0
- package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +192 -0
- package/package/components/apps/editor/settingsPanel/GridNavbar.svelte.d.ts +18 -0
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +2 -2
- package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte +17 -0
- package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte.d.ts +16 -0
- package/package/components/apps/editor/settingsPanel/TableActions.svelte +81 -38
- package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +12 -5
- package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +11 -12
- package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +4 -2
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +4 -1
- package/package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +7 -1
- package/package/components/apps/inputType.d.ts +2 -2
- package/package/components/apps/svelte-select/lib/Select.svelte +2 -3
- package/package/components/apps/types.d.ts +3 -0
- package/package/components/auditLogs/AuditLogsTable.svelte +2 -2
- package/package/components/common/CloseButton.svelte +10 -10
- package/package/components/common/CloseButton.svelte.d.ts +6 -14
- package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -0
- package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +2 -0
- package/package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +7 -1
- package/package/components/common/fileInput/FileInput.svelte +2 -0
- package/package/components/common/fileInput/FileInput.svelte.d.ts +1 -0
- package/package/components/common/popup/Popup.svelte +4 -3
- package/package/components/common/popup/Popup.svelte.d.ts +1 -0
- package/package/components/common/table/AppRow.svelte +3 -10
- package/package/components/common/table/FlowRow.svelte +12 -1
- package/package/components/copilot/IteratorGen.svelte +1 -1
- package/package/components/copilot/PredicateGen.svelte +1 -1
- package/package/components/copilot/StepInputGen.svelte +8 -3
- package/package/components/copilot/StepInputsGen.svelte +5 -2
- package/package/components/details/WebhooksPanel.svelte +32 -1
- package/package/components/details/WebhooksPanel.svelte.d.ts +2 -11
- package/package/components/flows/FlowHistory.svelte +208 -0
- package/package/components/flows/FlowHistory.svelte.d.ts +21 -0
- package/package/components/flows/content/FlowBranchesAllWrapper.svelte +1 -1
- package/package/components/flows/content/FlowBranchesOneWrapper.svelte +1 -1
- package/package/components/flows/content/FlowEditorPanel.svelte +1 -1
- package/package/components/flows/content/FlowLoop.svelte +23 -26
- package/package/components/flows/content/FlowModuleComponent.svelte +2 -18
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +10 -4
- package/package/components/flows/content/FlowModuleHeader.svelte +3 -4
- package/package/components/flows/content/FlowModuleScript.svelte +1 -1
- package/package/components/flows/content/FlowModuleSleep.svelte +1 -0
- package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
- package/package/components/flows/content/SuspendDrawer.svelte +7 -7
- package/package/components/flows/flowStateUtils.js +2 -1
- package/package/components/flows/flowStore.js +1 -1
- package/package/components/flows/header/FlowImportExportMenu.svelte +3 -16
- package/package/components/flows/header/FlowImportExportMenu.svelte.d.ts +4 -1
- package/package/components/flows/map/FlowJobsMenu.svelte +69 -0
- package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +22 -0
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +7 -4
- package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
- package/package/components/flows/map/MapItem.svelte +20 -0
- package/package/components/flows/map/MapItem.svelte.d.ts +9 -0
- package/package/components/flows/map/VirtualItem.svelte +4 -2
- package/package/components/flows/map/VirtualItem.svelte.d.ts +1 -0
- package/package/components/flows/previousResults.d.ts +9 -0
- package/package/components/flows/previousResults.js +42 -8
- package/package/components/flows/propPicker/PropPickerWrapper.svelte +2 -0
- package/package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +1 -0
- package/package/components/flows/types.d.ts +1 -1
- package/package/components/graph/FlowGraph.svelte +80 -42
- package/package/components/graph/FlowGraph.svelte.d.ts +1 -0
- package/package/components/graph/model.d.ts +6 -1
- package/package/components/graph/svelvet/container/controllers/middleware.js +4 -4
- package/package/components/graph/svelvet/container/views/GraphView.svelte +2 -0
- package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +24 -25
- package/package/components/graph/util.d.ts +1 -1
- package/package/components/graph/util.js +1 -2
- package/package/components/home/ItemsList.svelte +22 -19
- package/package/components/jobs/JobPreview.svelte +11 -2
- package/package/components/propertyPicker/PropPicker.svelte +30 -0
- package/package/components/propertyPicker/PropPickerResult.svelte +14 -1
- package/package/components/propertyPicker/PropPickerResult.svelte.d.ts +1 -0
- package/package/components/runs/JobLoader.svelte +21 -8
- package/package/components/runs/JobLoader.svelte.d.ts +2 -0
- package/package/components/runs/JobPreview.svelte +5 -1
- package/package/components/runs/RunRow.svelte +12 -8
- package/package/components/runs/RunsFilter.svelte +2 -4
- package/package/components/runs/RunsFilter.svelte.d.ts +0 -1
- package/package/components/runs/RunsTable.svelte +63 -29
- package/package/components/runs/RunsTable.svelte.d.ts +1 -0
- package/package/components/schema/EditableSchemaWrapper.svelte +9 -1
- package/package/components/schema/PropertyEditor.svelte +1 -1
- package/package/components/search/GlobalSearchModal.svelte +559 -0
- package/package/components/search/GlobalSearchModal.svelte.d.ts +17 -0
- package/package/components/search/QuickMenuItem.svelte +76 -0
- package/package/components/search/QuickMenuItem.svelte.d.ts +27 -0
- package/package/components/sidebar/MenuButton.svelte +11 -0
- package/package/components/sidebar/MenuButton.svelte.d.ts +4 -0
- package/package/components/sidebar/changelogs.js +35 -0
- package/package/components/wizards/AppPicker.svelte +68 -0
- package/package/components/wizards/AppPicker.svelte.d.ts +17 -0
- package/package/components/wizards/NavbarWizard.svelte +131 -0
- package/package/components/wizards/NavbarWizard.svelte.d.ts +19 -0
- package/package/defaults.d.ts +1 -1
- package/package/defaults.js +1 -1
- package/package/es6.d.ts.txt +370 -1
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +42 -3
- package/package/gen/schemas.gen.js +42 -3
- package/package/gen/services.gen.d.ts +80 -5
- package/package/gen/services.gen.js +149 -8
- package/package/gen/types.gen.d.ts +265 -11
- package/package/inferArgSig.js +4 -0
- package/package/script_helpers.d.ts +3 -3
- package/package/script_helpers.js +46 -22
- package/package/stores.d.ts +1 -1
- package/package/stores.js +1 -1
- package/package/utils.d.ts +7 -23
- package/package/utils.js +54 -33
- package/package/windmill_fetch.d.ts.txt +6 -6
- package/package.json +3 -11
- package/package/components/ContentSearch.svelte +0 -355
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<script>import { Menu } from '../../common';
|
|
2
|
+
import { createEventDispatcher } from 'svelte';
|
|
3
|
+
import { ListFilter } from 'lucide-svelte';
|
|
4
|
+
const dispatch = createEventDispatcher();
|
|
5
|
+
export let open = undefined;
|
|
6
|
+
export let index;
|
|
7
|
+
export let flowJobs;
|
|
8
|
+
export let flowJobsSuccess;
|
|
9
|
+
export let selected;
|
|
10
|
+
let filter = undefined;
|
|
11
|
+
function onKeydown(event) {
|
|
12
|
+
if (event.key === 'Enter' &&
|
|
13
|
+
filter != undefined &&
|
|
14
|
+
flowJobs &&
|
|
15
|
+
filter < flowJobs.length &&
|
|
16
|
+
filter > 0) {
|
|
17
|
+
event.preventDefault();
|
|
18
|
+
dispatch('selectedIteration', { index: filter - 1, id: flowJobs[filter - 1] });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<Menu
|
|
24
|
+
transitionDuration={0}
|
|
25
|
+
pointerDown
|
|
26
|
+
bind:show={open}
|
|
27
|
+
noMinW
|
|
28
|
+
placement="bottom-center"
|
|
29
|
+
let:close
|
|
30
|
+
>
|
|
31
|
+
<button
|
|
32
|
+
title="Pick an interation"
|
|
33
|
+
slot="trigger"
|
|
34
|
+
id={`flow-editor-iteration picker-${index}`}
|
|
35
|
+
type="button"
|
|
36
|
+
class=" text-xs bg-surface border-[1px] border-gray-300 dark:border-gray-500 focus:outline-none
|
|
37
|
+
hover:bg-surface-hover focus:ring-4 focus:ring-surface-selected font-medium rounded-sm w-[40px] gap-1 h-[20px]
|
|
38
|
+
flex items-center justify-center {flowJobsSuccess?.[selected] == false
|
|
39
|
+
? 'text-red-400'
|
|
40
|
+
: 'text-secondary'}"
|
|
41
|
+
>
|
|
42
|
+
#{selected == -1 ? '?' : selected + 1}
|
|
43
|
+
<ListFilter size={15} />
|
|
44
|
+
</button>
|
|
45
|
+
<div id="flow-editor-insert-module">
|
|
46
|
+
<div class="font-mono divide-y text-xs w-full text-secondary max-h-[200px] overflow-auto">
|
|
47
|
+
<input autofocus type="number" bind:value={filter} on:keydown={onKeydown} />
|
|
48
|
+
{#each flowJobs ?? [] as id, idx (id)}
|
|
49
|
+
{#if filter == undefined || (idx + 1).toString().includes(filter.toString())}
|
|
50
|
+
<button
|
|
51
|
+
class="w-full text-left py-1 pl-2 min-w-20 hover:bg-surface-hover whitespace-nowrap flex flex-row gap-2 items-center {flowJobsSuccess?.[
|
|
52
|
+
idx
|
|
53
|
+
] == false
|
|
54
|
+
? 'text-red-400'
|
|
55
|
+
: ''}"
|
|
56
|
+
on:pointerdown={() => {
|
|
57
|
+
close()
|
|
58
|
+
dispatch('selectedIteration', { index: idx, id })
|
|
59
|
+
}}
|
|
60
|
+
role="menuitem"
|
|
61
|
+
tabindex="-1"
|
|
62
|
+
>
|
|
63
|
+
#{idx + 1}
|
|
64
|
+
</button>
|
|
65
|
+
{/if}
|
|
66
|
+
{/each}
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</Menu>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
open?: boolean | undefined;
|
|
5
|
+
index: number;
|
|
6
|
+
flowJobs: string[] | undefined;
|
|
7
|
+
flowJobsSuccess: (boolean | undefined)[] | undefined;
|
|
8
|
+
selected: number;
|
|
9
|
+
};
|
|
10
|
+
events: {
|
|
11
|
+
selectedIteration: CustomEvent<any>;
|
|
12
|
+
} & {
|
|
13
|
+
[evt: string]: CustomEvent<any>;
|
|
14
|
+
};
|
|
15
|
+
slots: {};
|
|
16
|
+
};
|
|
17
|
+
export type FlowJobsMenuProps = typeof __propDef.props;
|
|
18
|
+
export type FlowJobsMenuEvents = typeof __propDef.events;
|
|
19
|
+
export type FlowJobsMenuSlots = typeof __propDef.slots;
|
|
20
|
+
export default class FlowJobsMenu extends SvelteComponent<FlowJobsMenuProps, FlowJobsMenuEvents, FlowJobsMenuSlots> {
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
@@ -19,6 +19,7 @@ export let modType = undefined;
|
|
|
19
19
|
export let bgColor = '';
|
|
20
20
|
export let concurrency = false;
|
|
21
21
|
export let retries = undefined;
|
|
22
|
+
export let warningMessage = undefined;
|
|
22
23
|
const { flowInputsStore } = getContext('FlowGraphContext');
|
|
23
24
|
const dispatch = createEventDispatcher();
|
|
24
25
|
const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotContext') || {};
|
|
@@ -29,7 +30,7 @@ const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotCon
|
|
|
29
30
|
<div
|
|
30
31
|
class={classNames(
|
|
31
32
|
'w-full module flex rounded-sm cursor-pointer',
|
|
32
|
-
selected ? 'outline outline-offset-1 outline-2 outline-gray-600' : '',
|
|
33
|
+
selected ? 'outline outline-offset-1 outline-2 outline-gray-600 dark:outline-gray-400' : '',
|
|
33
34
|
'flex relative',
|
|
34
35
|
$copilotCurrentStepStore === id ? 'z-[901]' : ''
|
|
35
36
|
)}
|
|
@@ -120,7 +121,7 @@ const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotCon
|
|
|
120
121
|
|
|
121
122
|
<div
|
|
122
123
|
class="flex gap-1 justify-between items-center w-full overflow-hidden rounded-sm
|
|
123
|
-
border border-gray-400 p-2 text-2xs module text-primary"
|
|
124
|
+
border border-gray-400 dark:border-gray-600 p-2 text-2xs module text-primary"
|
|
124
125
|
>
|
|
125
126
|
{#if $$slots.icon}
|
|
126
127
|
<slot name="icon" />
|
|
@@ -153,10 +154,12 @@ hover:border-blue-700 {selected ? '' : '!hidden'}"
|
|
|
153
154
|
<Move class="mx-[3px]" size={14} strokeWidth={2} />
|
|
154
155
|
</button>
|
|
155
156
|
|
|
156
|
-
{#if id && !Object.values($flowInputsStore?.[id]?.requiredInputsFilled || {}).every(Boolean)}
|
|
157
|
+
{#if (id && !Object.values($flowInputsStore?.[id]?.requiredInputsFilled || {}).every(Boolean)) || Boolean(warningMessage)}
|
|
157
158
|
<div class="absolute -top-[10px] -left-[10px]">
|
|
158
159
|
<Popover>
|
|
159
|
-
<svelte:fragment slot="text"
|
|
160
|
+
<svelte:fragment slot="text"
|
|
161
|
+
>{warningMessage ?? 'At least one required input is not set.'}
|
|
162
|
+
</svelte:fragment>
|
|
160
163
|
<div
|
|
161
164
|
class="flex items-center justify-center h-full w-full rounded-md p-0.5 border border-yellow-600 text-yellow-600 bg-yellow-100 duration-150 hover:bg-yellow-300"
|
|
162
165
|
>
|
|
@@ -8,6 +8,7 @@ import InsertModuleButton from './InsertModuleButton.svelte';
|
|
|
8
8
|
import { prettyLanguage } from '../../../common';
|
|
9
9
|
import { msToSec } from '../../../utils';
|
|
10
10
|
import BarsStaggered from '../../icons/BarsStaggered.svelte';
|
|
11
|
+
import FlowJobsMenu from './FlowJobsMenu.svelte';
|
|
11
12
|
export let mod;
|
|
12
13
|
export let trigger;
|
|
13
14
|
export let insertable;
|
|
@@ -21,6 +22,7 @@ export let duration_ms = undefined;
|
|
|
21
22
|
export let disableAi = false;
|
|
22
23
|
export let wrapperId = undefined;
|
|
23
24
|
export let retries = undefined;
|
|
25
|
+
export let flowJobs;
|
|
24
26
|
$: idx = modules.findIndex((m) => m.id === mod.id);
|
|
25
27
|
const { selectedId } = getContext('FlowGraphContext');
|
|
26
28
|
const dispatch = createEventDispatcher();
|
|
@@ -96,6 +98,19 @@ let openMenu2 = undefined;
|
|
|
96
98
|
{annotation}
|
|
97
99
|
</div>
|
|
98
100
|
{/if}
|
|
101
|
+
{#if flowJobs && !insertable}
|
|
102
|
+
<div class="absolute z-10 right-8 -top-5">
|
|
103
|
+
<FlowJobsMenu
|
|
104
|
+
on:selectedIteration={(e) => {
|
|
105
|
+
dispatch('selectedIteration', e.detail)
|
|
106
|
+
}}
|
|
107
|
+
flowJobsSuccess={flowJobs.flowJobsSuccess}
|
|
108
|
+
flowJobs={flowJobs.flowJobs}
|
|
109
|
+
selected={flowJobs.selected}
|
|
110
|
+
index={idx}
|
|
111
|
+
/>
|
|
112
|
+
</div>
|
|
113
|
+
{/if}
|
|
99
114
|
|
|
100
115
|
<div class={moving == mod.id ? 'opacity-50' : ''}>
|
|
101
116
|
{#if mod.value.type === 'forloopflow' || mod.value.type === 'whileloopflow'}
|
|
@@ -111,6 +126,11 @@ let openMenu2 = undefined;
|
|
|
111
126
|
on:click={() => dispatch('select', mod.id)}
|
|
112
127
|
{...itemProps}
|
|
113
128
|
{bgColor}
|
|
129
|
+
warningMessage={mod?.value?.type === 'forloopflow' &&
|
|
130
|
+
mod?.value?.iterator?.type === 'javascript' &&
|
|
131
|
+
mod?.value?.iterator?.expr === ''
|
|
132
|
+
? 'Iterator expression is empty'
|
|
133
|
+
: ''}
|
|
114
134
|
>
|
|
115
135
|
<div slot="icon">
|
|
116
136
|
<Repeat size={16} />
|
|
@@ -15,6 +15,11 @@ declare const __propDef: {
|
|
|
15
15
|
disableAi?: boolean | undefined;
|
|
16
16
|
wrapperId?: string | undefined;
|
|
17
17
|
retries?: number | undefined;
|
|
18
|
+
flowJobs: {
|
|
19
|
+
flowJobs: string[];
|
|
20
|
+
selected: number;
|
|
21
|
+
flowJobsSuccess: (boolean | undefined)[];
|
|
22
|
+
} | undefined;
|
|
18
23
|
};
|
|
19
24
|
events: {
|
|
20
25
|
delete: CustomEvent<CustomEvent<MouseEvent>>;
|
|
@@ -35,6 +40,10 @@ declare const __propDef: {
|
|
|
35
40
|
move: CustomEvent<{
|
|
36
41
|
module: FlowModule;
|
|
37
42
|
} | undefined>;
|
|
43
|
+
selectedIteration: CustomEvent<{
|
|
44
|
+
index: number;
|
|
45
|
+
id: string;
|
|
46
|
+
}>;
|
|
38
47
|
} & {
|
|
39
48
|
[evt: string]: CustomEvent<any>;
|
|
40
49
|
};
|
|
@@ -19,6 +19,7 @@ export let moving = undefined;
|
|
|
19
19
|
export let center = true;
|
|
20
20
|
export let disableAi = false;
|
|
21
21
|
export let wrapperNode = undefined;
|
|
22
|
+
export let borderColor = undefined;
|
|
22
23
|
const dispatch = createEventDispatcher();
|
|
23
24
|
let openMenu = false;
|
|
24
25
|
let triggerOpenMenu = false;
|
|
@@ -36,7 +37,7 @@ const { drawerStore: copilotDrawerStore, currentStepStore: copilotCurrentStepSto
|
|
|
36
37
|
}
|
|
37
38
|
}}
|
|
38
39
|
type="button"
|
|
39
|
-
class="text-primary bg-surface border mx-[1px] border-gray-300 dark:border-gray-500 focus:outline-none hover:bg-surface-hover focus:ring-4 focus:ring-gray-200 font-medium rounded-full text-sm w-[25px] h-[25px] flex items-center justify-center"
|
|
40
|
+
class="text-primary bg-surface border mx-[1px] 'border-gray-300 dark:border-gray-500 focus:outline-none hover:bg-surface-hover focus:ring-4 focus:ring-gray-200 font-medium rounded-full text-sm w-[25px] h-[25px] flex items-center justify-center"
|
|
40
41
|
>
|
|
41
42
|
<X class="m-[5px]" size={15} />
|
|
42
43
|
</button>
|
|
@@ -64,9 +65,10 @@ const { drawerStore: copilotDrawerStore, currentStepStore: copilotCurrentStepSto
|
|
|
64
65
|
id={`flow-editor-virtual-${label}`}
|
|
65
66
|
>
|
|
66
67
|
<div
|
|
68
|
+
style={borderColor ? `border-color: ${borderColor};` : ''}
|
|
67
69
|
class="flex gap-1 justify-between {center
|
|
68
70
|
? 'items-center'
|
|
69
|
-
: 'items-baseline'} w-full overflow-hidden rounded-sm border p-2 text-2xs module text-primary border-gray-400"
|
|
71
|
+
: 'items-baseline'} w-full overflow-hidden rounded-sm border p-2 text-2xs module text-primary border-gray-400 dark:border-gray-600"
|
|
70
72
|
>
|
|
71
73
|
{#if $$slots.icon}
|
|
72
74
|
<slot name="icon" />
|
|
@@ -12,6 +12,15 @@ type StepPropPicker = {
|
|
|
12
12
|
};
|
|
13
13
|
export declare function dfs(id: string | undefined, flow: OpenFlow, getParents?: boolean): FlowModule[];
|
|
14
14
|
export declare function getPreviousIds(id: string, flow: OpenFlow, include_node: boolean): string[];
|
|
15
|
+
export declare function getFailureStepPropPicker(flowState: FlowState, flow: OpenFlow, args: any): {
|
|
16
|
+
pickableProperties: {
|
|
17
|
+
flow_input: Object;
|
|
18
|
+
priorIds: any;
|
|
19
|
+
previousId: undefined;
|
|
20
|
+
hasResume: boolean;
|
|
21
|
+
};
|
|
22
|
+
extraLib: string;
|
|
23
|
+
};
|
|
15
24
|
export declare function getStepPropPicker(flowState: FlowState, parentModule: FlowModule | undefined, previousModule: FlowModule | undefined, id: string, flow: OpenFlow, args: any, include_node: boolean): StepPropPicker;
|
|
16
25
|
export declare function buildExtraLib(flowInput: Record<string, any>, results: Record<string, any>, resume: boolean): string;
|
|
17
26
|
export {};
|
|
@@ -30,21 +30,22 @@ function getFlowInput(parentModules, flowState, args, schema) {
|
|
|
30
30
|
const topFlowInput = schemaToObject(schema, args);
|
|
31
31
|
const parentState = parentModule ? flowState[parentModule.id] : undefined;
|
|
32
32
|
if (parentState && parentModule) {
|
|
33
|
-
if (parentState.previewArgs
|
|
33
|
+
if (parentState.previewArgs &&
|
|
34
|
+
!(parentModule.value?.type === 'forloopflow' && parentModule.value?.modules?.length === 1)) {
|
|
34
35
|
return { ...topFlowInput, ...parentState.previewArgs };
|
|
35
36
|
}
|
|
36
37
|
else {
|
|
37
38
|
let parentFlowInput = getFlowInput(parentModules, flowState, args, schema);
|
|
38
39
|
if (parentModule.value.type === 'forloopflow') {
|
|
39
40
|
let parentFlowInputIter = { ...parentFlowInput };
|
|
40
|
-
if (parentFlowInputIter.hasOwnProperty(
|
|
41
|
-
parentFlowInputIter[
|
|
42
|
-
delete parentFlowInputIter[
|
|
41
|
+
if (parentFlowInputIter.hasOwnProperty('iter')) {
|
|
42
|
+
parentFlowInputIter['iter_parent'] = parentFlowInputIter['iter'];
|
|
43
|
+
delete parentFlowInputIter['iter'];
|
|
43
44
|
}
|
|
44
45
|
let topFlowInputIter = { ...topFlowInput };
|
|
45
|
-
if (topFlowInputIter.hasOwnProperty(
|
|
46
|
-
topFlowInputIter[
|
|
47
|
-
delete topFlowInputIter[
|
|
46
|
+
if (topFlowInputIter.hasOwnProperty('iter')) {
|
|
47
|
+
topFlowInputIter['iter_parent'] = topFlowInputIter['iter'];
|
|
48
|
+
delete topFlowInputIter['iter'];
|
|
48
49
|
}
|
|
49
50
|
return {
|
|
50
51
|
...topFlowInputIter,
|
|
@@ -52,7 +53,7 @@ function getFlowInput(parentModules, flowState, args, schema) {
|
|
|
52
53
|
iter: {
|
|
53
54
|
value: "Iteration's value",
|
|
54
55
|
index: "Iteration's index"
|
|
55
|
-
}
|
|
56
|
+
}
|
|
56
57
|
};
|
|
57
58
|
}
|
|
58
59
|
else {
|
|
@@ -83,6 +84,39 @@ export function getPreviousIds(id, flow, include_node) {
|
|
|
83
84
|
})
|
|
84
85
|
.flat();
|
|
85
86
|
}
|
|
87
|
+
export function getFailureStepPropPicker(flowState, flow, args) {
|
|
88
|
+
const allIds = flow.value.modules.map((x) => x.id);
|
|
89
|
+
let priorIds = Object.fromEntries(allIds.map((id) => [id, flowState[id]?.previewResult ?? {}]).reverse());
|
|
90
|
+
const flowInput = getFlowInput(dfs(flow.value.modules[0].id, flow), flowState, args, flow.schema);
|
|
91
|
+
return {
|
|
92
|
+
pickableProperties: {
|
|
93
|
+
flow_input: schemaToObject(flow.schema, args),
|
|
94
|
+
priorIds: priorIds,
|
|
95
|
+
previousId: undefined,
|
|
96
|
+
hasResume: false
|
|
97
|
+
},
|
|
98
|
+
extraLib: `
|
|
99
|
+
/**
|
|
100
|
+
* Error object
|
|
101
|
+
*/
|
|
102
|
+
declare const error: {
|
|
103
|
+
message: string
|
|
104
|
+
name: string
|
|
105
|
+
stack: string
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* result by id
|
|
110
|
+
*/
|
|
111
|
+
declare const results = ${JSON.stringify(priorIds)}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* flow input as an object
|
|
115
|
+
*/
|
|
116
|
+
declare const flow_input = ${JSON.stringify(flowInput)};
|
|
117
|
+
`
|
|
118
|
+
};
|
|
119
|
+
}
|
|
86
120
|
export function getStepPropPicker(flowState, parentModule, previousModule, id, flow, args, include_node) {
|
|
87
121
|
const flowInput = getFlowInput(dfs(parentModule?.id, flow), flowState, args, flow.schema);
|
|
88
122
|
const previousIds = getPreviousIds(id, flow, include_node);
|
|
@@ -10,6 +10,7 @@ import { writable } from 'svelte/store';
|
|
|
10
10
|
import { twMerge } from 'tailwind-merge';
|
|
11
11
|
export let pickableProperties;
|
|
12
12
|
export let result = undefined;
|
|
13
|
+
export let flow_input = undefined;
|
|
13
14
|
export let error = false;
|
|
14
15
|
export let displayContext = true;
|
|
15
16
|
export let notSelectable = false;
|
|
@@ -52,6 +53,7 @@ setContext('PropPickerWrapper', {
|
|
|
52
53
|
{#if result}
|
|
53
54
|
<PropPickerResult
|
|
54
55
|
{result}
|
|
56
|
+
{flow_input}
|
|
55
57
|
on:select={({ detail }) => {
|
|
56
58
|
if (!notSelectable && !$propPickerConfig) {
|
|
57
59
|
sendUserToast('Set cursor within an input or click on the plug first', true)
|
|
@@ -54,6 +54,7 @@ $: {
|
|
|
54
54
|
}
|
|
55
55
|
$: rebuildOnChange && triggerRebuild();
|
|
56
56
|
let oldRebuildOnChange = rebuildOnChange ? JSON.parse(JSON.stringify(rebuildOnChange)) : undefined;
|
|
57
|
+
let darkMode = false;
|
|
57
58
|
function triggerRebuild() {
|
|
58
59
|
if (!deepEqual(oldRebuildOnChange, rebuildOnChange)) {
|
|
59
60
|
oldRebuildOnChange = JSON.parse(JSON.stringify(rebuildOnChange));
|
|
@@ -75,12 +76,12 @@ async function createGraph() {
|
|
|
75
76
|
return;
|
|
76
77
|
}
|
|
77
78
|
nestedNodes = nodes = [];
|
|
78
|
-
nestedNodes.push(createVirtualNode(getParentIds(), 'Input', modules, undefined, undefined, 0, 0, true, undefined, undefined, 'Input'));
|
|
79
|
+
nestedNodes.push(createVirtualNode(getParentIds(), 'Input', modules, undefined, undefined, 0, 0, true, undefined, undefined, 'Input', undefined, undefined));
|
|
79
80
|
modules.forEach((m, i) => {
|
|
80
81
|
const item = getConvertedFlowModule(m, undefined, undefined, 0, i + 1 == modules?.length, modules);
|
|
81
82
|
item && nestedNodes.push(item);
|
|
82
83
|
});
|
|
83
|
-
nestedNodes.push(createVirtualNode(getParentIds(), 'Result', undefined, undefined, undefined, 0, modules.length, true, undefined, undefined, undefined));
|
|
84
|
+
nestedNodes.push(createVirtualNode(getParentIds(), 'Result', undefined, undefined, undefined, 0, modules.length, true, undefined, undefined, undefined, success == undefined ? undefined : success ? 'Success' : 'Failure', undefined));
|
|
84
85
|
if (!flowModuleStates) {
|
|
85
86
|
if (failureModule)
|
|
86
87
|
nestedNodes.push(createErrorHandler(failureModule));
|
|
@@ -89,7 +90,7 @@ async function createGraph() {
|
|
|
89
90
|
Object.entries(flowModuleStates ?? [])
|
|
90
91
|
.filter(([k, v]) => k.startsWith('failure'))
|
|
91
92
|
.forEach(([k, v]) => {
|
|
92
|
-
nestedNodes.push(createErrorHandler({ id: k }, v.parent_module));
|
|
93
|
+
nestedNodes.push(createErrorHandler({ id: k }, v.parent_module, k));
|
|
93
94
|
});
|
|
94
95
|
}
|
|
95
96
|
const flatNodes = flattenNestedNodes(nestedNodes);
|
|
@@ -109,7 +110,8 @@ async function createGraph() {
|
|
|
109
110
|
id: `dep-${pid}-${$selectedId}`,
|
|
110
111
|
source: pid,
|
|
111
112
|
target: $selectedId,
|
|
112
|
-
labelBgColor: 'white',
|
|
113
|
+
labelBgColor: darkMode ? '#999' : 'white',
|
|
114
|
+
edgeColor: darkMode ? 'white' : 'black',
|
|
113
115
|
arrow: false,
|
|
114
116
|
animate: true,
|
|
115
117
|
noHandle: true,
|
|
@@ -124,7 +126,8 @@ async function createGraph() {
|
|
|
124
126
|
id: `dep-${pid}-${$selectedId}`,
|
|
125
127
|
source: $selectedId,
|
|
126
128
|
target: pid,
|
|
127
|
-
labelBgColor: 'white',
|
|
129
|
+
labelBgColor: darkMode ? '#999' : 'white',
|
|
130
|
+
edgeColor: darkMode ? 'white' : 'black',
|
|
128
131
|
arrow: false,
|
|
129
132
|
animate: true,
|
|
130
133
|
noHandle: true,
|
|
@@ -169,7 +172,7 @@ function getConvertedFlowModule(module, parent, edgeLabel, loopDepth, insertable
|
|
|
169
172
|
}));
|
|
170
173
|
return flowModuleToBranch(module, modules, branches, [], parent, loopDepth, true);
|
|
171
174
|
}
|
|
172
|
-
return flowModuleToNode(parentIds, module, edgeLabel, undefined, loopDepth, insertableEnd, false, modules, wrapper);
|
|
175
|
+
return flowModuleToNode(parentIds, module, edgeLabel, undefined, loopDepth, insertableEnd, false, modules, wrapper, undefined);
|
|
173
176
|
}
|
|
174
177
|
function getParentIds(items = undefined) {
|
|
175
178
|
if (typeof items == 'string') {
|
|
@@ -190,18 +193,11 @@ function getParentIds(items = undefined) {
|
|
|
190
193
|
}
|
|
191
194
|
return [];
|
|
192
195
|
}
|
|
193
|
-
function
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
return getStateColor('Success');
|
|
198
|
-
case false:
|
|
199
|
-
return getStateColor('Failure');
|
|
200
|
-
default:
|
|
201
|
-
return isDark ? '#2e3440' : '#fff';
|
|
196
|
+
function flowModuleToNode(parentIds, mod, edgeLabel, annotation, loopDepth, insertableEnd, branchable, modules, wrapper, flowJobs) {
|
|
197
|
+
let type = flowModuleStates?.[mod.id]?.type;
|
|
198
|
+
if (!type && flowJobs) {
|
|
199
|
+
type = 'InProgress';
|
|
202
200
|
}
|
|
203
|
-
}
|
|
204
|
-
function flowModuleToNode(parentIds, mod, edgeLabel, annotation, loopDepth, insertableEnd, branchable, modules, wrapper = undefined) {
|
|
205
201
|
return {
|
|
206
202
|
type: 'node',
|
|
207
203
|
id: mod.id,
|
|
@@ -217,12 +213,13 @@ function flowModuleToNode(parentIds, mod, edgeLabel, annotation, loopDepth, inse
|
|
|
217
213
|
branchable,
|
|
218
214
|
retries: flowModuleStates?.[mod.id]?.retries,
|
|
219
215
|
duration_ms: flowModuleStates?.[mod.id]?.duration_ms,
|
|
220
|
-
bgColor: getStateColor(
|
|
221
|
-
annotation,
|
|
216
|
+
bgColor: getStateColor(type, darkMode),
|
|
217
|
+
annotation: annotation,
|
|
222
218
|
modules,
|
|
223
219
|
moving,
|
|
224
220
|
disableAi,
|
|
225
|
-
wrapperId: wrapper?.id
|
|
221
|
+
wrapperId: wrapper?.id,
|
|
222
|
+
flowJobs
|
|
226
223
|
},
|
|
227
224
|
cb: (e, detail) => {
|
|
228
225
|
if (e == 'delete') {
|
|
@@ -245,6 +242,9 @@ function flowModuleToNode(parentIds, mod, edgeLabel, annotation, loopDepth, inse
|
|
|
245
242
|
else if (e == 'move') {
|
|
246
243
|
dispatch('move', { module: mod, modules });
|
|
247
244
|
}
|
|
245
|
+
else if (e == 'selectedIteration') {
|
|
246
|
+
dispatch('selectedIteration', { ...detail, moduleId: mod.id });
|
|
247
|
+
}
|
|
248
248
|
}
|
|
249
249
|
}
|
|
250
250
|
},
|
|
@@ -258,39 +258,69 @@ function flowModuleToNode(parentIds, mod, edgeLabel, annotation, loopDepth, inse
|
|
|
258
258
|
};
|
|
259
259
|
}
|
|
260
260
|
function flowModuleToLoop(modules, module, parent, loopDepth) {
|
|
261
|
+
let state = flowModuleStates?.[module.id];
|
|
261
262
|
const loop = {
|
|
262
263
|
type: 'loop',
|
|
263
264
|
items: [
|
|
264
|
-
flowModuleToNode(getParentIds(parent), module, undefined,
|
|
265
|
-
? '
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
265
|
+
flowModuleToNode(getParentIds(parent), module, undefined, state?.flow_jobs
|
|
266
|
+
? 'iterations ' + state?.flow_jobs?.length + '/' + (state?.iteration_total ?? '?')
|
|
267
|
+
: '', loopDepth, false, false, modules, undefined, state?.flow_jobs
|
|
268
|
+
? {
|
|
269
|
+
flowJobs: state?.flow_jobs,
|
|
270
|
+
selected: state?.selectedForloopIndex ?? -1,
|
|
271
|
+
flowJobsSuccess: state?.flow_jobs_success
|
|
272
|
+
}
|
|
273
|
+
: undefined)
|
|
270
274
|
]
|
|
271
275
|
};
|
|
272
276
|
const innerModules = module.value.modules;
|
|
273
|
-
|
|
277
|
+
let borderStatus = undefined;
|
|
278
|
+
let success = state?.flow_jobs_success?.[state?.selectedForloopIndex ?? 0];
|
|
279
|
+
if (success != undefined) {
|
|
280
|
+
borderStatus = success ? 'Success' : 'Failure';
|
|
281
|
+
}
|
|
282
|
+
loop.items.push(createVirtualNode(getParentIds(loop.items), `Do one iteration`, innerModules, undefined, 1000, loopDepth + 1, 0, false, undefined, undefined, undefined, undefined, borderStatus, true, module));
|
|
274
283
|
innerModules.forEach((innerModule, i) => {
|
|
275
284
|
const item = getConvertedFlowModule(innerModule, loop.items, undefined, loopDepth + 1, i + 1 == innerModules?.length, innerModules, module);
|
|
276
285
|
item && loop.items.push(item);
|
|
277
286
|
});
|
|
278
|
-
loop.items.push(createVirtualNode(getParentIds(loop.items), `Collect result of each iteration`, modules, undefined, 1000, loopDepth, modules.findIndex((m) => m.id == module.id) + 1, true, undefined, module.id, undefined));
|
|
287
|
+
loop.items.push(createVirtualNode(getParentIds(loop.items), `Collect result of each iteration`, modules, undefined, 1000, loopDepth, modules.findIndex((m) => m.id == module.id) + 1, true, undefined, module.id, undefined, undefined, flowModuleStates?.[module.id]?.type));
|
|
279
288
|
return loop;
|
|
280
289
|
}
|
|
281
290
|
function flowModuleToBranch(module, modules, branches, edgesLabel, parent = undefined, loopDepth, branchall) {
|
|
282
291
|
const wrapper = JSON.parse(JSON.stringify(module));
|
|
283
|
-
const node = flowModuleToNode(getParentIds(parent), module, undefined, undefined, loopDepth, false, true, modules);
|
|
292
|
+
const node = flowModuleToNode(getParentIds(parent), module, undefined, undefined, loopDepth, false, true, modules, undefined, undefined);
|
|
284
293
|
const bitems = [];
|
|
285
294
|
const branchParent = [node.id];
|
|
286
295
|
if (branches.length == 0) {
|
|
287
296
|
bitems.push([
|
|
288
|
-
createVirtualNode(branchParent, 'No branches', undefined, undefined, 0, loopDepth, 0, false, undefined, undefined, undefined)
|
|
297
|
+
createVirtualNode(branchParent, 'No branches', undefined, undefined, 0, loopDepth, 0, false, undefined, undefined, undefined, undefined, undefined)
|
|
289
298
|
]);
|
|
290
299
|
}
|
|
291
300
|
branches.forEach(({ summary, modules, removable }, i) => {
|
|
292
301
|
const items = [];
|
|
293
|
-
|
|
302
|
+
let borderStatus = undefined;
|
|
303
|
+
if (module.value.type == 'branchall' || module.value.type == 'forloopflow') {
|
|
304
|
+
let flow_jobs_success = flowModuleStates?.[module.id]?.flow_jobs_success;
|
|
305
|
+
if (!flow_jobs_success) {
|
|
306
|
+
borderStatus = 'WaitingForPriorSteps';
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
let status = flow_jobs_success?.[i];
|
|
310
|
+
if (status == undefined) {
|
|
311
|
+
borderStatus = 'WaitingForExecutor';
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
borderStatus = status ? 'Success' : 'Failure';
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
else if (module.value.type == 'branchone') {
|
|
319
|
+
if (flowModuleStates?.[module.id]?.branchChosen == i) {
|
|
320
|
+
borderStatus = flowModuleStates?.[module.id]?.type;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
items.push(createVirtualNode(branchParent, summary, modules, edgesLabel[i], undefined, loopDepth, 0, false, removable ? { module, index: i } : undefined, undefined, undefined, undefined, borderStatus, false, wrapper));
|
|
294
324
|
if (modules.length) {
|
|
295
325
|
modules.forEach((innerModule, j) => {
|
|
296
326
|
const item = getConvertedFlowModule(innerModule, items, undefined, loopDepth, j + 1 == modules?.length, modules, module);
|
|
@@ -302,7 +332,7 @@ function flowModuleToBranch(module, modules, branches, edgesLabel, parent = unde
|
|
|
302
332
|
return {
|
|
303
333
|
type: 'branch',
|
|
304
334
|
node,
|
|
305
|
-
nodeEnd: createVirtualNode(bitems.map((i) => getParentIds(i)).flat(), branchall ? 'Collect result of each branch' : 'Result of the chosen branch', modules, undefined, 0, loopDepth, modules.findIndex((m) => m.id == module.id) + 1, true, undefined, module.id, undefined),
|
|
335
|
+
nodeEnd: createVirtualNode(bitems.map((i) => getParentIds(i)).flat(), branchall ? 'Collect result of each branch' : 'Result of the chosen branch', modules, undefined, 0, loopDepth, modules.findIndex((m) => m.id == module.id) + 1, true, undefined, module.id, undefined, undefined, flowModuleStates?.[module.id]?.type),
|
|
306
336
|
items: bitems
|
|
307
337
|
};
|
|
308
338
|
}
|
|
@@ -418,8 +448,15 @@ function createEdges(nodes) {
|
|
|
418
448
|
});
|
|
419
449
|
return edges;
|
|
420
450
|
}
|
|
421
|
-
function createVirtualNode(parentIds, label, modules, edgeLabel, offset, loopDepth, index, selectable, deleteBranch, mid, fixed_id, center = true, wrapperNode = undefined) {
|
|
451
|
+
function createVirtualNode(parentIds, label, modules, edgeLabel, offset, loopDepth, index, selectable, deleteBranch, mid, fixed_id, module_status, borderStatus, center = true, wrapperNode = undefined) {
|
|
422
452
|
const id = fixed_id ?? -idGenerator.next().value - 2 + (offset ?? 0);
|
|
453
|
+
let bgColor;
|
|
454
|
+
if (module_status) {
|
|
455
|
+
bgColor = getStateColor(module_status, darkMode);
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
bgColor = darkMode ? '#2e3440' : '#dfe6ee';
|
|
459
|
+
}
|
|
423
460
|
return {
|
|
424
461
|
type: 'node',
|
|
425
462
|
id: id.toString(),
|
|
@@ -436,11 +473,10 @@ function createVirtualNode(parentIds, label, modules, edgeLabel, offset, loopDep
|
|
|
436
473
|
label,
|
|
437
474
|
insertable,
|
|
438
475
|
modules,
|
|
439
|
-
bgColor
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
: '#dfe6ee',
|
|
476
|
+
bgColor,
|
|
477
|
+
borderColor: borderStatus
|
|
478
|
+
? getStateColor(borderStatus, darkMode) + (!darkMode ? '; border-width: 3px' : '')
|
|
479
|
+
: undefined,
|
|
444
480
|
selected: $selectedId == label,
|
|
445
481
|
index,
|
|
446
482
|
selectable,
|
|
@@ -476,8 +512,10 @@ function createVirtualNode(parentIds, label, modules, edgeLabel, offset, loopDep
|
|
|
476
512
|
loopDepth
|
|
477
513
|
};
|
|
478
514
|
}
|
|
479
|
-
function createErrorHandler(mod, parent_module) {
|
|
480
|
-
|
|
515
|
+
function createErrorHandler(mod, parent_module, customNodeId) {
|
|
516
|
+
// When needed, we can add a custom node id to the error handler
|
|
517
|
+
// used for nested error handlers in for loop for example
|
|
518
|
+
const nId = customNodeId ?? 'failure';
|
|
481
519
|
parent_module && (errorHandlers[parent_module] = nId);
|
|
482
520
|
let label = 'Error handler';
|
|
483
521
|
return {
|
|
@@ -491,7 +529,7 @@ function createErrorHandler(mod, parent_module) {
|
|
|
491
529
|
label,
|
|
492
530
|
insertable: false,
|
|
493
531
|
modules: undefined,
|
|
494
|
-
bgColor: getStateColor(flowModuleStates?.[mod.id]?.type),
|
|
532
|
+
bgColor: getStateColor(flowModuleStates?.[mod.id]?.type, darkMode),
|
|
495
533
|
selected: $selectedId == mod.id,
|
|
496
534
|
index: 0,
|
|
497
535
|
selectable: true,
|
|
@@ -522,7 +560,7 @@ onMount(() => {
|
|
|
522
560
|
});
|
|
523
561
|
</script>
|
|
524
562
|
|
|
525
|
-
<DarkModeObserver on:change={onThemeChange} />
|
|
563
|
+
<DarkModeObserver bind:darkMode on:change={onThemeChange} />
|
|
526
564
|
|
|
527
565
|
<!-- {JSON.stringify(flowModuleStates)} -->
|
|
528
566
|
<div
|