windmill-components 1.394.7 → 1.405.0
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/ata/edgeCases.d.ts +0 -1
- package/package/ata/edgeCases.js +2 -8
- package/package/ata/index.js +4 -3
- package/package/common.d.ts +1 -1
- package/package/common.js +2 -2
- package/package/components/ApiConnectForm.svelte +33 -7
- package/package/components/ArgInput.svelte +4 -2
- package/package/components/CenteredModal.svelte +4 -1
- package/package/components/CenteredModal.svelte.d.ts +1 -0
- package/package/components/DateInput.svelte +2 -0
- package/package/components/DateInput.svelte.d.ts +1 -0
- package/package/components/DefaultScripts.svelte +8 -3
- package/package/components/DefaultScripts.svelte.d.ts +5 -1
- package/package/components/DefaultScriptsInner.svelte +16 -7
- package/package/components/DefaultScriptsInner.svelte.d.ts +3 -1
- package/package/components/Dev.svelte +68 -11
- package/package/components/DropdownV2.svelte.d.ts +3 -3
- package/package/components/DropdownV2Inner.svelte.d.ts +3 -3
- package/package/components/EditableSchemaForm.svelte +1 -0
- package/package/components/Editor.svelte +3 -2
- package/package/components/Editor.svelte.d.ts +1 -1
- package/package/components/ExecutionDuration.svelte +44 -0
- package/package/components/ExecutionDuration.svelte.d.ts +24 -0
- package/package/components/FlowBuilder.svelte +20 -12
- package/package/components/FlowGraphViewer.svelte +9 -2
- package/package/components/FlowGraphViewerStep.svelte +23 -10
- package/package/components/FlowJobResult.svelte +0 -1
- package/package/components/FlowStatusViewerInner.svelte +17 -4
- package/package/components/FlowTimeline.svelte +3 -3
- package/package/components/HighlightCode.svelte +3 -0
- package/package/components/IconedResourceType.svelte +17 -10
- package/package/components/IconedResourceType.svelte.d.ts +2 -0
- package/package/components/IdEditorInput.svelte +0 -1
- package/package/components/InstanceSettings.svelte +247 -129
- package/package/components/InstanceSettings.svelte.d.ts +2 -0
- package/package/components/JobArgs.svelte +3 -1
- package/package/components/LightweightArgInput.svelte +35 -10
- package/package/components/LightweightArgInput.svelte.d.ts +1 -0
- package/package/components/LightweightObjectResourceInput.svelte +2 -0
- package/package/components/LightweightObjectResourceInput.svelte.d.ts +1 -0
- package/package/components/LightweightSchemaForm.svelte +2 -0
- package/package/components/LightweightSchemaForm.svelte.d.ts +1 -0
- package/package/components/Login.svelte +10 -5
- package/package/components/Login.svelte.d.ts +1 -0
- package/package/components/ModulePreview.svelte +21 -2
- package/package/components/ModuleStatus.svelte +3 -0
- package/package/components/ModuleStatus.svelte.d.ts +1 -0
- package/package/components/OAuthSetting.svelte +40 -15
- package/package/components/ObjectStoreConfigSettings.svelte +78 -76
- package/package/components/ParqetCsvTableRenderer.svelte +25 -3
- package/package/components/Password.svelte.d.ts +1 -1
- package/package/components/Path.svelte +74 -54
- package/package/components/Path.svelte.d.ts +2 -1
- package/package/components/ResourceEditor.svelte +38 -9
- package/package/components/ResultJobLoader.svelte +6 -3
- package/package/components/ResultJobLoader.svelte.d.ts +1 -1
- package/package/components/ScheduleEditorInner.svelte +2 -2
- package/package/components/SchemaForm.svelte +6 -1
- package/package/components/ScriptBuilder.svelte +12 -5
- package/package/components/ScriptEditor.svelte +33 -3
- package/package/components/ScriptEditor.svelte.d.ts +1 -1
- package/package/components/Scrollable.svelte +47 -0
- package/package/components/Scrollable.svelte.d.ts +21 -0
- package/package/components/ShareModal.svelte.d.ts +2 -2
- package/package/components/SuperadminSettings.svelte +5 -7
- package/package/components/TestJobLoader.svelte +46 -5
- package/package/components/TestJobLoader.svelte.d.ts +2 -1
- package/package/components/ToggleHubWorkspaceQuick.svelte +14 -0
- package/package/components/ToggleHubWorkspaceQuick.svelte.d.ts +16 -0
- package/package/components/WorkspaceGroup.svelte +3 -2
- package/package/components/apps/components/helpers/DebouncedInput.svelte +9 -1
- package/package/components/apps/components/inputs/AppSelect.svelte +1 -1
- package/package/components/apps/editor/component/components.d.ts +79 -79
- package/package/components/apps/svelte-select/lib/Select.svelte +1 -1
- package/package/components/common/fileUpload/FileUpload.svelte +1 -1
- package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
- package/package/components/common/menu/Menu.svelte +2 -1
- package/package/components/common/menu/MenuV2.svelte +3 -1
- package/package/components/common/menu/MenuV2.svelte.d.ts +1 -0
- package/package/components/common/popup/Popup.svelte +22 -12
- package/package/components/common/popup/Popup.svelte.d.ts +2 -0
- package/package/components/common/popup/PopupV2.svelte +58 -0
- package/package/components/common/popup/PopupV2.svelte.d.ts +27 -0
- package/package/components/copilot/CronGen.svelte +1 -1
- package/package/components/copilot/RegexGen.svelte +4 -4
- package/package/components/copilot/StepGen.svelte +6 -6
- package/package/components/copilot/StepGenQuick.svelte +57 -0
- package/package/components/copilot/StepGenQuick.svelte.d.ts +23 -0
- package/package/components/copilot/flow.d.ts +2 -0
- package/package/components/copilot/flow.js +55 -0
- package/package/components/details/DetailPageDetailPanel.svelte +9 -1
- package/package/components/details/DetailPageDetailPanel.svelte.d.ts +2 -1
- package/package/components/details/DetailPageLayout.svelte +2 -0
- package/package/components/details/DetailPageLayout.svelte.d.ts +3 -0
- package/package/components/details/utils.d.ts +0 -1
- package/package/components/details/utils.js +1 -12
- package/package/components/flows/FlowEditor.svelte +2 -1
- package/package/components/flows/FlowProgressBar.svelte +16 -1
- package/package/components/flows/FlowProgressBar.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowBranchesAllWrapper.svelte +8 -0
- package/package/components/flows/content/FlowBranchesAllWrapper.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowBranchesOneWrapper.svelte +8 -0
- package/package/components/flows/content/FlowBranchesOneWrapper.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowConstants.svelte +1 -1
- package/package/components/flows/content/FlowEditorPanel.svelte +3 -0
- package/package/components/flows/content/FlowInputs.svelte +7 -6
- package/package/components/flows/content/FlowInputs.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowInputsFlowQuick.svelte +65 -0
- package/package/components/flows/content/FlowInputsFlowQuick.svelte.d.ts +19 -0
- package/package/components/flows/content/FlowInputsQuick.svelte +419 -0
- package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +33 -0
- package/package/components/flows/content/FlowLoop.svelte +7 -1
- package/package/components/flows/content/FlowModuleComponent.svelte +12 -3
- package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowModuleSkip.svelte +69 -0
- package/package/components/flows/content/FlowModuleSkip.svelte.d.ts +20 -0
- package/package/components/flows/content/FlowModuleWrapper.svelte +17 -4
- package/package/components/flows/content/FlowPreprocessorModule.svelte +16 -0
- package/package/components/flows/content/FlowPreprocessorModule.svelte.d.ts +16 -0
- package/package/components/flows/content/FlowWhileLoop.svelte +9 -0
- package/package/components/flows/content/FlowWhileLoop.svelte.d.ts +1 -0
- package/package/components/flows/content/GenAiQuick.svelte +30 -0
- package/package/components/flows/content/GenAiQuick.svelte.d.ts +20 -0
- package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -2
- package/package/components/flows/flowInfers.js +1 -1
- package/package/components/flows/header/FlowPreviewButtons.svelte +1 -0
- package/package/components/flows/idUtils.js +3 -1
- package/package/components/flows/map/FlowCopilotButton.svelte +55 -0
- package/package/components/flows/map/FlowCopilotButton.svelte.d.ts +16 -0
- package/package/components/flows/map/FlowErrorHandlerItem.svelte +77 -47
- package/package/components/flows/map/FlowJobsMenu.svelte +1 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +25 -12
- package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +61 -18
- package/package/components/flows/map/InsertModuleButton.svelte +161 -138
- package/package/components/flows/map/InsertModuleButton.svelte.d.ts +7 -4
- package/package/components/flows/map/MapItem.svelte +11 -0
- package/package/components/flows/map/MapItem.svelte.d.ts +1 -0
- package/package/components/flows/pickers/FlowScriptPickerQuick.svelte +48 -0
- package/package/components/flows/pickers/FlowScriptPickerQuick.svelte.d.ts +23 -0
- package/package/components/flows/pickers/FlowToplevelNode.svelte +19 -0
- package/package/components/flows/pickers/FlowToplevelNode.svelte.d.ts +19 -0
- package/package/components/flows/pickers/PickHubScriptQuick.svelte +138 -0
- package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +33 -0
- package/package/components/flows/pickers/TopLevelNode.svelte +58 -0
- package/package/components/flows/pickers/TopLevelNode.svelte.d.ts +21 -0
- package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +120 -0
- package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +35 -0
- package/package/components/flows/types.d.ts +1 -0
- package/package/components/graph/FlowGraphV2.svelte +93 -58
- package/package/components/graph/FlowGraphV2.svelte.d.ts +2 -1
- package/package/components/graph/graphBuilder.d.ts +2 -1
- package/package/components/graph/graphBuilder.js +345 -280
- package/package/components/graph/model.d.ts +1 -0
- package/package/components/graph/renderers/edges/BaseEdge.svelte +36 -14
- package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
- package/package/components/graph/renderers/nodes/InputNode.svelte +31 -51
- package/package/components/graph/renderers/nodes/InputNode.svelte.d.ts +6 -1
- package/package/components/graph/renderers/nodes/ModuleNode.svelte +2 -1
- package/package/components/graph/util.d.ts +1 -1
- package/package/components/graph/util.js +7 -2
- package/package/components/home/ListFiltersQuick.svelte +51 -0
- package/package/components/home/ListFiltersQuick.svelte.d.ts +23 -0
- package/package/components/icons/AnsibleIcon.svelte +42 -0
- package/package/components/icons/AnsibleIcon.svelte.d.ts +25 -0
- package/package/components/icons/WindmillIcon2.svelte +141 -0
- package/package/components/icons/WindmillIcon2.svelte.d.ts +20 -0
- package/package/components/icons/index.d.ts +2 -1
- package/package/components/icons/index.js +2 -1
- package/package/components/instanceSettings.d.ts +2 -2
- package/package/components/instanceSettings.js +25 -58
- package/package/components/jobs/JobProgressBar.svelte +52 -0
- package/package/components/jobs/JobProgressBar.svelte.d.ts +23 -0
- package/package/components/progressBar/ProgressBar.svelte +18 -1
- package/package/components/progressBar/ProgressBar.svelte.d.ts +3 -0
- package/package/components/runs/JobPreview.svelte +1 -0
- package/package/components/runs/PreprocessedArgsDisplay.svelte +71 -0
- package/package/components/runs/PreprocessedArgsDisplay.svelte.d.ts +16 -0
- package/package/components/schema/AddProperty.svelte +1 -0
- package/package/components/schema/EditableSchemaWrapper.svelte +142 -19
- package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +1 -0
- package/package/components/schema/FlowPropertyEditor.svelte +12 -0
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -0
- package/package/components/scriptEditor/LogPanel.svelte +1 -0
- package/package/components/scriptEditor/LogPanel.svelte.d.ts +3 -1
- package/package/components/search/GlobalSearchModal.svelte +2 -1
- package/package/components/sidebar/SidebarContent.svelte +69 -8
- package/package/components/sidebar/changelogs.js +10 -0
- package/package/components/triggers/RouteEditor.svelte +19 -0
- package/package/components/triggers/RouteEditor.svelte.d.ts +21 -0
- package/package/components/triggers/RouteEditorInner.svelte +327 -0
- package/package/components/triggers/RouteEditorInner.svelte.d.ts +21 -0
- package/package/components/triggers/RoutesPanel.svelte +74 -0
- package/package/components/triggers/RoutesPanel.svelte.d.ts +17 -0
- package/package/editorUtils.js +2 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +159 -8
- package/package/gen/schemas.gen.js +161 -8
- package/package/gen/services.gen.d.ts +139 -1
- package/package/gen/services.gen.js +282 -1
- package/package/gen/types.gen.d.ts +455 -12
- package/package/hubPaths.json +6 -8
- package/package/infer.d.ts +4 -2
- package/package/infer.js +25 -23
- package/package/inferArgSig.js +8 -2
- package/package/monaco_workers/build_workers.js +8 -13
- package/package/monaco_workers/graphql.worker.bundle.js +45440 -174
- package/package/relative_imports.d.ts +3 -0
- package/package/relative_imports.js +25 -0
- package/package/script_helpers.d.ts +7 -2
- package/package/script_helpers.js +151 -3
- package/package/scripts.d.ts +1 -1
- package/package/scripts.js +5 -1
- package/package/stores.d.ts +1 -0
- package/package/stores.js +1 -0
- package/package/utils.d.ts +1 -0
- package/package/utils.js +4 -0
- package/package.json +16 -7
- package/package/components/flows/map/InsertTriggerButton.svelte +0 -48
- package/package/components/flows/map/InsertTriggerButton.svelte.d.ts +0 -24
- package/package/monaco_workers/cssWorker-es.js +0 -43763
- package/package/monaco_workers/editorWorker-es.d.ts +0 -2
- package/package/monaco_workers/editorWorker-es.js +0 -8066
- package/package/monaco_workers/htmlWorker-es.js +0 -21551
- package/package/monaco_workers/jsonWorker-es.js +0 -13523
- package/package/monaco_workers/tsWorker-es.d.ts +0 -103
- package/package/monaco_workers/tsWorker-es.js +0 -212193
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
<script>import { isCloudHosted } from '../../../cloud';
|
|
2
|
+
import { sendUserToast } from '../../../toast';
|
|
3
|
+
import FlowScriptPickerQuick from '../pickers/FlowScriptPickerQuick.svelte';
|
|
4
|
+
import WorkspaceScriptPickerQuick from '../pickers/WorkspaceScriptPickerQuick.svelte';
|
|
5
|
+
import { defaultScriptLanguages, processLangs } from '../../../scripts';
|
|
6
|
+
import { defaultScripts, enterpriseLicense, userStore } from '../../../stores';
|
|
7
|
+
import { createEventDispatcher, getContext, onDestroy, onMount } from 'svelte';
|
|
8
|
+
import PickHubScriptQuick from '../pickers/PickHubScriptQuick.svelte';
|
|
9
|
+
import {} from '../../../gen';
|
|
10
|
+
import ListFiltersQuick from '../../home/ListFiltersQuick.svelte';
|
|
11
|
+
import { Folder, User } from 'lucide-svelte';
|
|
12
|
+
import { copilotInfo } from '../../../stores';
|
|
13
|
+
import { nextId } from '../../flows/flowModuleNextId';
|
|
14
|
+
import { twMerge } from 'tailwind-merge';
|
|
15
|
+
import { fade } from 'svelte/transition';
|
|
16
|
+
import { flip } from 'svelte/animate';
|
|
17
|
+
import Scrollable from '../../Scrollable.svelte';
|
|
18
|
+
import { Button } from '../../common';
|
|
19
|
+
import { SettingsIcon } from 'lucide-svelte';
|
|
20
|
+
import DefaultScriptsInner from '../../DefaultScriptsInner.svelte';
|
|
21
|
+
import GenAiQuick from './GenAiQuick.svelte';
|
|
22
|
+
import FlowToplevelNode from '../pickers/FlowToplevelNode.svelte';
|
|
23
|
+
const dispatch = createEventDispatcher();
|
|
24
|
+
export let summary = undefined;
|
|
25
|
+
export let filter = '';
|
|
26
|
+
export let disableAi = false;
|
|
27
|
+
export let preFilter = 'hub';
|
|
28
|
+
export let funcDesc;
|
|
29
|
+
export let index;
|
|
30
|
+
export let modules;
|
|
31
|
+
export let owners = [];
|
|
32
|
+
export let loading = false;
|
|
33
|
+
export let small = false;
|
|
34
|
+
export let kind;
|
|
35
|
+
export let selectedKind = kind;
|
|
36
|
+
let lang = undefined;
|
|
37
|
+
let selectedCompletion = undefined;
|
|
38
|
+
let filteredWorkspaceItems = [];
|
|
39
|
+
let hubCompletions = [];
|
|
40
|
+
const { flowStore, flowStateStore, insertButtonOpen } = getContext('FlowEditorContext');
|
|
41
|
+
const { modulesStore: copilotModulesStore, genFlow } = getContext('FlowCopilotContext');
|
|
42
|
+
let selected = undefined;
|
|
43
|
+
let integrations = [];
|
|
44
|
+
let customUi = getContext('customUi');
|
|
45
|
+
$: langs = processLangs(undefined, $defaultScripts?.order ?? Object.keys(defaultScriptLanguages))
|
|
46
|
+
.map((l) => [defaultScriptLanguages[l], l])
|
|
47
|
+
.filter((x) => $defaultScripts?.hidden == undefined || !$defaultScripts.hidden.includes(x[1]));
|
|
48
|
+
function displayLang(lang, kind) {
|
|
49
|
+
if (kind == 'trigger') {
|
|
50
|
+
return ['python3', 'bun', 'deno', 'go'].includes(lang);
|
|
51
|
+
}
|
|
52
|
+
else if (kind == 'script') {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
else if (kind == 'approval') {
|
|
56
|
+
return ['python3', 'bun', 'deno'].includes(lang);
|
|
57
|
+
}
|
|
58
|
+
else if (kind == 'flow') {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
else if (kind == 'preprocessor') {
|
|
62
|
+
return ['python3', 'bun', 'deno'].includes(lang);
|
|
63
|
+
}
|
|
64
|
+
else if (kind == 'failure') {
|
|
65
|
+
return ['python3', 'bun', 'deno', 'go'].includes(lang);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async function onGenerate() {
|
|
69
|
+
if (!selectedCompletion && !$copilotInfo.exists_openai_resource_path) {
|
|
70
|
+
sendUserToast('Windmill AI is not enabled, you can activate it in the workspace settings', true);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
$copilotModulesStore = [
|
|
74
|
+
{
|
|
75
|
+
id: nextId($flowStateStore, $flowStore),
|
|
76
|
+
type: selectedKind == 'trigger' ? 'trigger' : 'script',
|
|
77
|
+
description: funcDesc,
|
|
78
|
+
code: '',
|
|
79
|
+
source: selectedCompletion ? 'hub' : 'custom',
|
|
80
|
+
hubCompletions,
|
|
81
|
+
selectedCompletion,
|
|
82
|
+
editor: undefined,
|
|
83
|
+
lang
|
|
84
|
+
}
|
|
85
|
+
];
|
|
86
|
+
genFlow?.(index, modules, true);
|
|
87
|
+
dispatch('close');
|
|
88
|
+
}
|
|
89
|
+
let openScriptSettings = false;
|
|
90
|
+
let selectedByKeyboard = 0;
|
|
91
|
+
$: onSelectedKindChange(selectedKind);
|
|
92
|
+
function onSelectedKindChange(_selectedKind) {
|
|
93
|
+
selectedByKeyboard = 0;
|
|
94
|
+
}
|
|
95
|
+
let inlineScripts = [];
|
|
96
|
+
const enterpriseLangs = ['bigquery', 'snowflake', 'mssql'];
|
|
97
|
+
function computeInlineScriptChoices(funcDesc, selected, preFilter, selectedKind) {
|
|
98
|
+
if (['script', 'trigger', 'failure', 'approval', 'preprocessor'].includes(selectedKind)) {
|
|
99
|
+
if (!selected && preFilter == 'all') {
|
|
100
|
+
inlineScripts = langs.filter((lang) => {
|
|
101
|
+
return ((customUi?.languages == undefined || customUi?.languages?.includes(lang?.[1])) &&
|
|
102
|
+
(funcDesc?.length == 0 ||
|
|
103
|
+
lang?.[0]?.toLowerCase()?.includes(funcDesc?.toLowerCase())) &&
|
|
104
|
+
displayLang(lang?.[1], selectedKind));
|
|
105
|
+
});
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
inlineScripts = [];
|
|
110
|
+
}
|
|
111
|
+
const allToplevelNodes = [
|
|
112
|
+
['For Loop', 'forloop'],
|
|
113
|
+
['While Loop', 'whileloop'],
|
|
114
|
+
['Branch to one', 'branchone'],
|
|
115
|
+
['Branch to all', 'branchall']
|
|
116
|
+
];
|
|
117
|
+
let topLevelNodes = [];
|
|
118
|
+
function computeToplevelNodeChoices(funcDesc, preFilter) {
|
|
119
|
+
if (funcDesc.length > 0 && preFilter == 'all' && kind == 'script') {
|
|
120
|
+
topLevelNodes = allToplevelNodes.filter((node) => node[0].toLowerCase().startsWith(funcDesc.toLowerCase()));
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
topLevelNodes = [];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
$: computeToplevelNodeChoices(funcDesc, preFilter);
|
|
127
|
+
$: computeInlineScriptChoices(funcDesc, selected, preFilter, selectedKind);
|
|
128
|
+
$: onPrefilterChange(preFilter);
|
|
129
|
+
function onPrefilterChange(preFilter) {
|
|
130
|
+
if (preFilter == 'workspace') {
|
|
131
|
+
hubCompletions = [];
|
|
132
|
+
}
|
|
133
|
+
else if (preFilter == 'hub') {
|
|
134
|
+
filteredWorkspaceItems = [];
|
|
135
|
+
}
|
|
136
|
+
selectedByKeyboard = 0;
|
|
137
|
+
}
|
|
138
|
+
$: aiLength =
|
|
139
|
+
funcDesc?.length > 0 && !disableAi && selectedKind != 'flow' && preFilter == 'all' ? 2 : 0;
|
|
140
|
+
let scrollable;
|
|
141
|
+
function onKeyDown(e) {
|
|
142
|
+
let length = topLevelNodes?.length +
|
|
143
|
+
inlineScripts.length +
|
|
144
|
+
aiLength +
|
|
145
|
+
filteredWorkspaceItems.length +
|
|
146
|
+
hubCompletions.length;
|
|
147
|
+
if (e.key === 'ArrowDown') {
|
|
148
|
+
selectedByKeyboard = (selectedByKeyboard + 1) % length;
|
|
149
|
+
scrollable?.scrollIntoView(selectedByKeyboard * 32);
|
|
150
|
+
e.preventDefault();
|
|
151
|
+
}
|
|
152
|
+
else if (e.key === 'ArrowUp') {
|
|
153
|
+
selectedByKeyboard = (selectedByKeyboard - 1 + length) % length;
|
|
154
|
+
scrollable?.scrollIntoView(selectedByKeyboard * 32);
|
|
155
|
+
e.preventDefault();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
onMount(() => {
|
|
159
|
+
$insertButtonOpen = true;
|
|
160
|
+
});
|
|
161
|
+
onDestroy(() => {
|
|
162
|
+
$insertButtonOpen = false;
|
|
163
|
+
});
|
|
164
|
+
</script>
|
|
165
|
+
|
|
166
|
+
<svelte:window on:keydown={onKeyDown} />
|
|
167
|
+
<div class="flex flex-row grow min-w-0 divide-x relative {!small ? 'shadow-inset' : ''}">
|
|
168
|
+
{#if selectedKind != 'preprocessor'}
|
|
169
|
+
<Scrollable shiftedShadow scrollableClass="w-32 grow-0 shrink-0 ">
|
|
170
|
+
{#if ['script', 'trigger', 'approval', 'preprocessor', 'failure'].includes(selectedKind)}
|
|
171
|
+
{#if (preFilter === 'all' && owners.length > 0) || preFilter === 'workspace'}
|
|
172
|
+
{#if preFilter !== 'workspace'}
|
|
173
|
+
<div class="pb-0 text-2xs font-light text-secondary ml-2">Workspace Folders</div>
|
|
174
|
+
{/if}
|
|
175
|
+
|
|
176
|
+
{#if owners.length > 0}
|
|
177
|
+
{#each owners as owner (owner)}
|
|
178
|
+
<div
|
|
179
|
+
in:fade={{ duration: 50 }}
|
|
180
|
+
animate:flip={{ duration: 100 }}
|
|
181
|
+
class="w-full px-0.5"
|
|
182
|
+
>
|
|
183
|
+
<button
|
|
184
|
+
class={twMerge(
|
|
185
|
+
'w-full text-left text-2xs text-primary font-normal py-2 px-3 hover:bg-surface-hover transition-all whitespace-nowrap flex flex-row gap-2 items-center rounded-md',
|
|
186
|
+
owner === selected?.name ? 'bg-surface-hover' : ''
|
|
187
|
+
)}
|
|
188
|
+
on:click={() => {
|
|
189
|
+
selected = selected?.name == owner ? undefined : { kind: 'owner', name: owner }
|
|
190
|
+
}}
|
|
191
|
+
>
|
|
192
|
+
{#if owner.startsWith('f/')}
|
|
193
|
+
<Folder class="mr-0.5" size={14} />
|
|
194
|
+
{:else}
|
|
195
|
+
<User class="mr-0.5" size={14} />
|
|
196
|
+
{/if}
|
|
197
|
+
{owner.slice(2)}
|
|
198
|
+
</button>
|
|
199
|
+
</div>
|
|
200
|
+
{/each}
|
|
201
|
+
<div class="pb-1.5" />
|
|
202
|
+
{:else}
|
|
203
|
+
<div class="text-2xs text-tertiary font-light text-center py-3 px-3 items-center">
|
|
204
|
+
No items found.
|
|
205
|
+
</div>
|
|
206
|
+
{/if}
|
|
207
|
+
{/if}
|
|
208
|
+
|
|
209
|
+
{#if preFilter === 'hub' || preFilter === 'all'}
|
|
210
|
+
{#if preFilter == 'all'}
|
|
211
|
+
<div class="pb-0 text-2xs font-light text-secondary ml-2 pt-0.5">Integrations</div>
|
|
212
|
+
{/if}
|
|
213
|
+
<ListFiltersQuick
|
|
214
|
+
on:selected={() => {
|
|
215
|
+
filteredWorkspaceItems = []
|
|
216
|
+
selectedByKeyboard = 0
|
|
217
|
+
}}
|
|
218
|
+
filters={integrations}
|
|
219
|
+
bind:selectedFilter={selected}
|
|
220
|
+
resourceType
|
|
221
|
+
/>
|
|
222
|
+
{/if}
|
|
223
|
+
{:else if selectedKind === 'flow'}
|
|
224
|
+
{#if owners.length > 0}
|
|
225
|
+
{#each owners as owner (owner)}
|
|
226
|
+
<div in:fade={{ duration: 50 }} animate:flip={{ duration: 100 }}>
|
|
227
|
+
<button
|
|
228
|
+
class={twMerge(
|
|
229
|
+
'w-full text-left text-2xs text-primary font-normal py-2 px-3 hover:bg-surface-hover transition-all whitespace-nowrap flex flex-row gap-2 items-center rounded-md',
|
|
230
|
+
owner === selected?.name ? 'bg-surface-hover' : ''
|
|
231
|
+
)}
|
|
232
|
+
on:click={() => {
|
|
233
|
+
selected = selected?.name == owner ? undefined : { kind: 'owner', name: owner }
|
|
234
|
+
}}
|
|
235
|
+
>
|
|
236
|
+
{#if owner.startsWith('f/')}
|
|
237
|
+
<Folder class="mr-0.5" size={14} />
|
|
238
|
+
{:else}
|
|
239
|
+
<User class="mr-0.5" size={14} />
|
|
240
|
+
{/if}
|
|
241
|
+
{owner.slice(2)}
|
|
242
|
+
</button>
|
|
243
|
+
</div>
|
|
244
|
+
{/each}
|
|
245
|
+
{/if}
|
|
246
|
+
{/if}
|
|
247
|
+
</Scrollable>
|
|
248
|
+
{/if}
|
|
249
|
+
<Scrollable bind:this={scrollable} scrollableClass="grow min-w-0">
|
|
250
|
+
{#if kind == 'script'}
|
|
251
|
+
{#each topLevelNodes as [label, kind], i (label)}
|
|
252
|
+
<FlowToplevelNode
|
|
253
|
+
on:click={() => {
|
|
254
|
+
dispatch('new', { kind })
|
|
255
|
+
}}
|
|
256
|
+
{label}
|
|
257
|
+
selected={selectedByKeyboard === i}
|
|
258
|
+
/>
|
|
259
|
+
{/each}
|
|
260
|
+
{/if}
|
|
261
|
+
|
|
262
|
+
{#if inlineScripts?.length > 0}
|
|
263
|
+
<div class="pb-0 flex flex-row items-center gap-2">
|
|
264
|
+
<div class=" text-2xs font-light text-secondary ml-2"
|
|
265
|
+
>New {selectedKind != 'script' ? selectedKind + ' ' : ''}script</div
|
|
266
|
+
>
|
|
267
|
+
{#if $userStore?.is_admin || $userStore?.is_super_admin}
|
|
268
|
+
{#if !openScriptSettings}
|
|
269
|
+
<Button
|
|
270
|
+
on:click={() => (openScriptSettings = true)}
|
|
271
|
+
startIcon={{ icon: SettingsIcon }}
|
|
272
|
+
color="light"
|
|
273
|
+
size="xs2"
|
|
274
|
+
btnClasses="!text-tertiary"
|
|
275
|
+
variant="contained"
|
|
276
|
+
title="Edit global default scripts"
|
|
277
|
+
/>
|
|
278
|
+
{:else}
|
|
279
|
+
<Button
|
|
280
|
+
on:click={() => (openScriptSettings = false)}
|
|
281
|
+
startIcon={{ icon: SettingsIcon }}
|
|
282
|
+
color="dark"
|
|
283
|
+
size="xs2"
|
|
284
|
+
variant="contained"
|
|
285
|
+
>
|
|
286
|
+
Close
|
|
287
|
+
</Button>
|
|
288
|
+
{/if}
|
|
289
|
+
{/if}
|
|
290
|
+
</div>
|
|
291
|
+
{#if openScriptSettings}
|
|
292
|
+
<div class="p-2">
|
|
293
|
+
<DefaultScriptsInner small />
|
|
294
|
+
</div>
|
|
295
|
+
{/if}
|
|
296
|
+
{#each inlineScripts as [label, lang], i (lang)}
|
|
297
|
+
<FlowScriptPickerQuick
|
|
298
|
+
eeRestricted={!$enterpriseLicense && enterpriseLangs.includes(lang)}
|
|
299
|
+
selected={selectedByKeyboard === i + topLevelNodes.length}
|
|
300
|
+
{enterpriseLangs}
|
|
301
|
+
{label}
|
|
302
|
+
lang={lang == 'docker' ? 'bash' : lang}
|
|
303
|
+
on:click={() => {
|
|
304
|
+
if (lang == 'docker') {
|
|
305
|
+
if (isCloudHosted()) {
|
|
306
|
+
sendUserToast(
|
|
307
|
+
'You cannot use Docker scripts on the multi-tenant platform. Use a dedicated instance or self-host windmill instead.',
|
|
308
|
+
true,
|
|
309
|
+
[
|
|
310
|
+
{
|
|
311
|
+
label: 'Learn more',
|
|
312
|
+
callback: () => {
|
|
313
|
+
window.open('https://www.windmill.dev/docs/advanced/docker', '_blank')
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
]
|
|
317
|
+
)
|
|
318
|
+
return
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
dispatch('new', {
|
|
323
|
+
kind: 'script',
|
|
324
|
+
inlineScript: {
|
|
325
|
+
language: lang == 'docker' ? 'bash' : lang,
|
|
326
|
+
kind: selectedKind,
|
|
327
|
+
subkind:
|
|
328
|
+
lang == 'docker'
|
|
329
|
+
? 'docker'
|
|
330
|
+
: selectedKind == 'preprocessor'
|
|
331
|
+
? 'preprocessor'
|
|
332
|
+
: 'flow',
|
|
333
|
+
summary
|
|
334
|
+
}
|
|
335
|
+
})
|
|
336
|
+
}}
|
|
337
|
+
/>
|
|
338
|
+
{/each}
|
|
339
|
+
{/if}
|
|
340
|
+
|
|
341
|
+
{#if !disableAi && funcDesc?.length > 0 && kind != 'failure' && kind != 'preprocessor' && (selectedKind == 'script' || selectedKind == 'trigger') && preFilter == 'all'}
|
|
342
|
+
<ul class="transition-all">
|
|
343
|
+
<li
|
|
344
|
+
><GenAiQuick
|
|
345
|
+
{funcDesc}
|
|
346
|
+
lang="TypeScript"
|
|
347
|
+
selected={selectedByKeyboard === inlineScripts?.length + topLevelNodes.length}
|
|
348
|
+
on:click={() => {
|
|
349
|
+
lang = 'bun'
|
|
350
|
+
onGenerate()
|
|
351
|
+
}}
|
|
352
|
+
/>
|
|
353
|
+
</li>
|
|
354
|
+
<li>
|
|
355
|
+
<GenAiQuick
|
|
356
|
+
{funcDesc}
|
|
357
|
+
lang="Python"
|
|
358
|
+
selected={selectedByKeyboard === inlineScripts?.length + topLevelNodes.length + 1}
|
|
359
|
+
on:click={() => {
|
|
360
|
+
lang = 'python3'
|
|
361
|
+
onGenerate()
|
|
362
|
+
}}
|
|
363
|
+
/>
|
|
364
|
+
</li>
|
|
365
|
+
</ul>
|
|
366
|
+
{/if}
|
|
367
|
+
|
|
368
|
+
{#if (!selected || selected?.kind === 'owner') && (preFilter === 'workspace' || preFilter === 'all')}
|
|
369
|
+
{#if !selected && (preFilter !== 'workspace' || funcDesc?.length > 0)}
|
|
370
|
+
<div class="pt-2 pb-0 text-2xs font-light text-secondary ml-2">Workspace</div>
|
|
371
|
+
{/if}
|
|
372
|
+
<WorkspaceScriptPickerQuick
|
|
373
|
+
bind:owners
|
|
374
|
+
bind:ownerFilter={selected}
|
|
375
|
+
bind:filteredWithOwner={filteredWorkspaceItems}
|
|
376
|
+
{filter}
|
|
377
|
+
kind={selectedKind}
|
|
378
|
+
selected={selectedByKeyboard - inlineScripts?.length - aiLength - topLevelNodes.length}
|
|
379
|
+
on:pickScript
|
|
380
|
+
on:pickFlow
|
|
381
|
+
/>
|
|
382
|
+
{/if}
|
|
383
|
+
|
|
384
|
+
{#if selectedKind != 'preprocessor' && selectedKind != 'flow'}
|
|
385
|
+
{#if (!selected || selected?.kind === 'integrations') && (preFilter === 'hub' || preFilter === 'all')}
|
|
386
|
+
{#if !selected && preFilter !== 'hub'}
|
|
387
|
+
<div class=" pb-0 text-2xs font-light text-secondary ml-2">Hub</div>
|
|
388
|
+
{/if}
|
|
389
|
+
|
|
390
|
+
<PickHubScriptQuick
|
|
391
|
+
bind:items={hubCompletions}
|
|
392
|
+
bind:filter
|
|
393
|
+
bind:apps={integrations}
|
|
394
|
+
appFilter={selected?.name}
|
|
395
|
+
kind={selectedKind}
|
|
396
|
+
selected={selectedByKeyboard -
|
|
397
|
+
inlineScripts?.length -
|
|
398
|
+
aiLength -
|
|
399
|
+
filteredWorkspaceItems?.length -
|
|
400
|
+
topLevelNodes.length}
|
|
401
|
+
on:pickScript
|
|
402
|
+
bind:loading
|
|
403
|
+
/>
|
|
404
|
+
{/if}
|
|
405
|
+
{/if}
|
|
406
|
+
</Scrollable>
|
|
407
|
+
</div>
|
|
408
|
+
|
|
409
|
+
<style>
|
|
410
|
+
.shadow-inset::before {
|
|
411
|
+
box-shadow: inset 25px 0px 12px -30px rgba(94, 129, 172, 0.5);
|
|
412
|
+
position: absolute;
|
|
413
|
+
top: 0;
|
|
414
|
+
left: 0;
|
|
415
|
+
right: 0;
|
|
416
|
+
bottom: 0;
|
|
417
|
+
content: '';
|
|
418
|
+
pointer-events: none;
|
|
419
|
+
}</style>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
import { type FlowModule } from '../../../gen';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
summary?: string | undefined;
|
|
6
|
+
filter?: string | undefined;
|
|
7
|
+
disableAi?: boolean | undefined;
|
|
8
|
+
preFilter?: "workspace" | "all" | "hub" | undefined;
|
|
9
|
+
funcDesc: string;
|
|
10
|
+
index: number;
|
|
11
|
+
modules: FlowModule[];
|
|
12
|
+
owners?: string[] | undefined;
|
|
13
|
+
loading?: boolean | undefined;
|
|
14
|
+
small?: boolean | undefined;
|
|
15
|
+
kind: 'trigger' | 'script' | 'preprocessor' | 'failure' | 'approval';
|
|
16
|
+
selectedKind?: "script" | "failure" | "trigger" | "approval" | "flow" | "preprocessor" | undefined;
|
|
17
|
+
};
|
|
18
|
+
events: {
|
|
19
|
+
pickScript: CustomEvent<any>;
|
|
20
|
+
pickFlow: CustomEvent<any>;
|
|
21
|
+
new: CustomEvent<any>;
|
|
22
|
+
close: CustomEvent<any>;
|
|
23
|
+
} & {
|
|
24
|
+
[evt: string]: CustomEvent<any>;
|
|
25
|
+
};
|
|
26
|
+
slots: {};
|
|
27
|
+
};
|
|
28
|
+
export type FlowInputsQuickProps = typeof __propDef.props;
|
|
29
|
+
export type FlowInputsQuickEvents = typeof __propDef.events;
|
|
30
|
+
export type FlowInputsQuickSlots = typeof __propDef.slots;
|
|
31
|
+
export default class FlowInputsQuick extends SvelteComponent<FlowInputsQuickProps, FlowInputsQuickEvents, FlowInputsQuickSlots> {
|
|
32
|
+
}
|
|
33
|
+
export {};
|
|
@@ -17,6 +17,7 @@ import { Play } from 'lucide-svelte';
|
|
|
17
17
|
import FlowLoopIterationPreview from '../../FlowLoopIterationPreview.svelte';
|
|
18
18
|
import FlowModuleDeleteAfterUse from './FlowModuleDeleteAfterUse.svelte';
|
|
19
19
|
import IteratorGen from '../../copilot/IteratorGen.svelte';
|
|
20
|
+
import FlowModuleSkip from './FlowModuleSkip.svelte';
|
|
20
21
|
const { previewArgs, flowStateStore, flowStore } = getContext('FlowEditorContext');
|
|
21
22
|
export let mod;
|
|
22
23
|
export let parentModule;
|
|
@@ -190,6 +191,7 @@ $: previewIterationArgs = $flowStateStore[mod.id]?.previewArgs ?? {};
|
|
|
190
191
|
<Tabs bind:selected>
|
|
191
192
|
<!-- <Tab value="retries">Retries</Tab> -->
|
|
192
193
|
<Tab value="early-stop">Early Stop/Break</Tab>
|
|
194
|
+
<Tab value="skip">Skip</Tab>
|
|
193
195
|
<Tab value="suspend">Suspend/Approval/Prompt</Tab>
|
|
194
196
|
<Tab value="sleep">Sleep</Tab>
|
|
195
197
|
<Tab value="mock">Mock</Tab>
|
|
@@ -208,7 +210,11 @@ $: previewIterationArgs = $flowStateStore[mod.id]?.previewArgs ?? {};
|
|
|
208
210
|
<FlowModuleEarlyStop bind:flowModule={mod} />
|
|
209
211
|
</div>
|
|
210
212
|
</TabContent>
|
|
211
|
-
|
|
213
|
+
<TabContent value="skip" class="flex flex-col flex-1 h-full">
|
|
214
|
+
<div class="p-4 overflow-y-auto">
|
|
215
|
+
<FlowModuleSkip bind:flowModule={mod} {parentModule} {previousModule} />
|
|
216
|
+
</div>
|
|
217
|
+
</TabContent>
|
|
212
218
|
<TabContent value="suspend" class="flex flex-col flex-1 h-full">
|
|
213
219
|
<div class="p-4 overflow-y-auto">
|
|
214
220
|
<FlowModuleSuspend previousModuleId={previousModule?.id} bind:flowModule={mod} />
|
|
@@ -41,9 +41,11 @@ import { loadSchemaFromModule } from '../flowInfers';
|
|
|
41
41
|
import { computeFlowStepWarning, initFlowStepWarnings } from '../utils';
|
|
42
42
|
import { debounce } from '../../../utils';
|
|
43
43
|
import { dfs } from '../dfs';
|
|
44
|
+
import FlowModuleSkip from './FlowModuleSkip.svelte';
|
|
44
45
|
const { selectedId, previewArgs, flowStateStore, flowStore, pathStore, saveDraft, flowInputsStore, customUi } = getContext('FlowEditorContext');
|
|
45
46
|
export let flowModule;
|
|
46
47
|
export let failureModule = false;
|
|
48
|
+
export let preprocessorModule = false;
|
|
47
49
|
export let parentModule = undefined;
|
|
48
50
|
export let previousModule;
|
|
49
51
|
export let scriptKind = 'script';
|
|
@@ -60,7 +62,7 @@ let websocketAlive = {
|
|
|
60
62
|
ruff: false,
|
|
61
63
|
shellcheck: false
|
|
62
64
|
};
|
|
63
|
-
let selected = 'inputs';
|
|
65
|
+
let selected = preprocessorModule ? 'test' : 'inputs';
|
|
64
66
|
let advancedSelected = 'retries';
|
|
65
67
|
let advancedRuntimeSelected = 'concurrency';
|
|
66
68
|
let s3Kind = 's3_client';
|
|
@@ -310,9 +312,13 @@ function setFlowInput(argName) {
|
|
|
310
312
|
</Pane>
|
|
311
313
|
<Pane bind:size={editorSettingsPanelSize} minSize={20}>
|
|
312
314
|
<Tabs bind:selected>
|
|
313
|
-
|
|
315
|
+
{#if !preprocessorModule}
|
|
316
|
+
<Tab value="inputs">Step Input</Tab>
|
|
317
|
+
{/if}
|
|
314
318
|
<Tab value="test">Test this step</Tab>
|
|
315
|
-
|
|
319
|
+
{#if !preprocessorModule}
|
|
320
|
+
<Tab value="advanced">Advanced</Tab>
|
|
321
|
+
{/if}
|
|
316
322
|
</Tabs>
|
|
317
323
|
<div
|
|
318
324
|
class={advancedSelected === 'runtime' ? 'h-[calc(100%-68px)]' : 'h-[calc(100%-34px)]'}
|
|
@@ -363,6 +369,7 @@ function setFlowInput(argName) {
|
|
|
363
369
|
>
|
|
364
370
|
Early Stop
|
|
365
371
|
</Tab>
|
|
372
|
+
<Tab value="skip" active={Boolean(flowModule.skip_if)}>Skip</Tab>
|
|
366
373
|
<Tab value="suspend" active={Boolean(flowModule.suspend)}>Suspend</Tab>
|
|
367
374
|
<Tab value="sleep" active={Boolean(flowModule.sleep)}>Sleep</Tab>
|
|
368
375
|
<Tab value="mock" active={Boolean(flowModule.mock?.enabled)}>Mock</Tab>
|
|
@@ -526,6 +533,8 @@ function setFlowInput(argName) {
|
|
|
526
533
|
</div>
|
|
527
534
|
{:else if advancedSelected === 'early-stop'}
|
|
528
535
|
<FlowModuleEarlyStop bind:flowModule />
|
|
536
|
+
{:else if advancedSelected === 'skip'}
|
|
537
|
+
<FlowModuleSkip bind:flowModule {parentModule} {previousModule} />
|
|
529
538
|
{:else if advancedSelected === 'suspend'}
|
|
530
539
|
<div>
|
|
531
540
|
<FlowModuleSuspend previousModuleId={previousModule?.id} bind:flowModule />
|
|
@@ -4,6 +4,7 @@ declare const __propDef: {
|
|
|
4
4
|
props: {
|
|
5
5
|
flowModule: FlowModule;
|
|
6
6
|
failureModule?: boolean | undefined;
|
|
7
|
+
preprocessorModule?: boolean | undefined;
|
|
7
8
|
parentModule?: FlowModule | undefined;
|
|
8
9
|
previousModule: FlowModule | undefined;
|
|
9
10
|
scriptKind?: "script" | "trigger" | "approval" | undefined;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<script>import SimpleEditor from '../../SimpleEditor.svelte';
|
|
2
|
+
import Toggle from '../../Toggle.svelte';
|
|
3
|
+
import PropPickerWrapper from '../propPicker/PropPickerWrapper.svelte';
|
|
4
|
+
import Tooltip from '../../Tooltip.svelte';
|
|
5
|
+
import { getContext } from 'svelte';
|
|
6
|
+
import Section from '../../Section.svelte';
|
|
7
|
+
import { getStepPropPicker } from '../previousResults';
|
|
8
|
+
const { flowStateStore, flowStore, previewArgs } = getContext('FlowEditorContext');
|
|
9
|
+
export let flowModule;
|
|
10
|
+
export let parentModule;
|
|
11
|
+
export let previousModule;
|
|
12
|
+
let editor = undefined;
|
|
13
|
+
$: stepPropPicker = getStepPropPicker($flowStateStore, parentModule, previousModule, flowModule.id, $flowStore, $previewArgs, false);
|
|
14
|
+
$: isSkipEnabled = Boolean(flowModule.skip_if);
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<div class="flex flex-col items-start space-y-2 {$$props.class}">
|
|
18
|
+
<Section label="Skip" class="w-full">
|
|
19
|
+
<svelte:fragment slot="header">
|
|
20
|
+
<Tooltip>
|
|
21
|
+
If the condition is met, the step will behave as an identity step, passing the previous
|
|
22
|
+
step's result through unchanged.
|
|
23
|
+
</Tooltip>
|
|
24
|
+
</svelte:fragment>
|
|
25
|
+
|
|
26
|
+
<Toggle
|
|
27
|
+
checked={isSkipEnabled}
|
|
28
|
+
on:change={() => {
|
|
29
|
+
if (isSkipEnabled && flowModule.skip_if) {
|
|
30
|
+
flowModule.skip_if = undefined
|
|
31
|
+
} else {
|
|
32
|
+
flowModule.skip_if = {
|
|
33
|
+
expr: 'false'
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}}
|
|
37
|
+
options={{
|
|
38
|
+
right: 'Skip step if condition is met'
|
|
39
|
+
}}
|
|
40
|
+
/>
|
|
41
|
+
|
|
42
|
+
<div class="w-full border p-2 flex flex-col {flowModule.skip_if ? '' : 'bg-surface-secondary'}">
|
|
43
|
+
{#if flowModule.skip_if}
|
|
44
|
+
<span class="mt-2 text-xs font-bold">Skip condition expression</span>
|
|
45
|
+
<div class="border w-full">
|
|
46
|
+
<PropPickerWrapper
|
|
47
|
+
notSelectable
|
|
48
|
+
pickableProperties={stepPropPicker.pickableProperties}
|
|
49
|
+
on:select={({ detail }) => {
|
|
50
|
+
editor?.insertAtCursor(detail)
|
|
51
|
+
editor?.focus()
|
|
52
|
+
}}
|
|
53
|
+
>
|
|
54
|
+
<SimpleEditor
|
|
55
|
+
bind:this={editor}
|
|
56
|
+
lang="javascript"
|
|
57
|
+
bind:code={flowModule.skip_if.expr}
|
|
58
|
+
class="few-lines-editor"
|
|
59
|
+
extraLib={stepPropPicker.extraLib}
|
|
60
|
+
/>
|
|
61
|
+
</PropPickerWrapper>
|
|
62
|
+
</div>
|
|
63
|
+
{:else}
|
|
64
|
+
<span class="mt-2 text-xs font-bold">Skip condition expression</span>
|
|
65
|
+
<textarea disabled rows="3" class="min-h-[80px]" />
|
|
66
|
+
{/if}
|
|
67
|
+
</div>
|
|
68
|
+
</Section>
|
|
69
|
+
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
import type { FlowModule } from '../../../gen';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
[x: string]: any;
|
|
6
|
+
flowModule: FlowModule;
|
|
7
|
+
parentModule: FlowModule | undefined;
|
|
8
|
+
previousModule: FlowModule | undefined;
|
|
9
|
+
};
|
|
10
|
+
events: {
|
|
11
|
+
[evt: string]: CustomEvent<any>;
|
|
12
|
+
};
|
|
13
|
+
slots: {};
|
|
14
|
+
};
|
|
15
|
+
export type FlowModuleSkipProps = typeof __propDef.props;
|
|
16
|
+
export type FlowModuleSkipEvents = typeof __propDef.events;
|
|
17
|
+
export type FlowModuleSkipSlots = typeof __propDef.slots;
|
|
18
|
+
export default class FlowModuleSkip extends SvelteComponent<FlowModuleSkipProps, FlowModuleSkipEvents, FlowModuleSkipSlots> {
|
|
19
|
+
}
|
|
20
|
+
export {};
|