windmill-components 1.339.2 → 1.352.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 +0 -12
- package/package/ata/index.js +1 -0
- package/package/autosize.js +1 -1
- package/package/common.d.ts +6 -2
- package/package/common.js +2 -1
- package/package/components/AppConnectDrawer.svelte +1 -1
- package/package/components/AppConnectInner.svelte +9 -15
- package/package/components/ArgEnum.svelte +4 -1
- package/package/components/ArgEnum.svelte.d.ts +3 -1
- package/package/components/ArgInput.svelte +184 -141
- package/package/components/ArgInput.svelte.d.ts +7 -7
- package/package/components/ArrayTypeNarrowing.svelte +29 -27
- package/package/components/CenteredPage.svelte +2 -2
- package/package/components/DefaultTagsInner.svelte +1 -1
- package/package/components/Dev.svelte +2 -1
- package/package/components/DiffDrawer.svelte +1 -2
- package/package/components/DisplayResult.svelte +293 -233
- package/package/components/DurationMs.svelte +11 -3
- package/package/components/DurationMs.svelte.d.ts +2 -0
- package/package/components/EditableSchemaForm.svelte +447 -103
- package/package/components/EditableSchemaForm.svelte.d.ts +16 -6
- package/package/components/Editor.svelte +3 -1
- package/package/components/EditorBar.svelte +2 -2
- package/package/components/FlowBuilder.svelte +14 -6
- package/package/components/FlowGraphViewer.svelte +1 -1
- package/package/components/FlowGraphViewerStep.svelte +37 -9
- package/package/components/FlowGraphViewerStep.svelte.d.ts +2 -7
- package/package/components/FlowJobResult.svelte +1 -3
- package/package/components/FlowMetadata.svelte +1 -1
- package/package/components/FlowPreviewContent.svelte +5 -3
- package/package/components/FlowStatusViewer.svelte +4 -0
- package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
- package/package/components/FlowStatusViewerInner.svelte +50 -17
- package/package/components/FlowStatusViewerInner.svelte.d.ts +3 -0
- package/package/components/FlowTimeline.svelte +13 -0
- package/package/components/FlowTimeline.svelte.d.ts +2 -0
- package/package/components/FlowViewer.svelte +0 -5
- package/package/components/FolderEditor.svelte +25 -0
- package/package/components/FolderEditor.svelte.d.ts +2 -0
- package/package/components/GroupEditor.svelte +36 -91
- package/package/components/GroupInfo.svelte +1 -1
- package/package/components/InputTransformForm.svelte +16 -1
- package/package/components/InputTransformForm.svelte.d.ts +2 -0
- package/package/components/InputTransformSchemaForm.svelte +6 -0
- package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
- package/package/components/InstanceSettings.svelte +36 -3
- package/package/components/InstanceSettings.svelte.d.ts +2 -0
- package/package/components/JobStatus.svelte +2 -2
- package/package/components/LightweightArgInput.svelte +66 -14
- package/package/components/LightweightArgInput.svelte.d.ts +3 -2
- package/package/components/LightweightSchemaForm.svelte +24 -15
- package/package/components/ModulePreviewForm.svelte +1 -0
- package/package/components/NumberTypeNarrowing.svelte +71 -44
- package/package/components/ObjectResourceInput.svelte +2 -0
- package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
- package/package/components/ObjectTypeNarrowing.svelte +0 -1
- package/package/components/ParqetCsvTableRenderer.svelte +181 -0
- package/package/components/ParqetCsvTableRenderer.svelte.d.ts +21 -0
- package/package/components/Path.svelte +2 -2
- package/package/components/PersistentScriptDrawer.svelte +6 -3
- package/package/components/Range.svelte +88 -286
- package/package/components/Range.svelte.d.ts +9 -23
- package/package/components/ResourceEditor.svelte +138 -141
- package/package/components/ResourceEditor.svelte.d.ts +9 -2
- package/package/components/ResourceEditorDrawer.svelte +45 -0
- package/package/components/ResourceEditorDrawer.svelte.d.ts +21 -0
- package/package/components/ResourcePicker.svelte +5 -2
- package/package/components/ResourceTypePicker.svelte +88 -36
- package/package/components/RunChart.svelte +55 -5
- package/package/components/RunChart.svelte.d.ts +1 -0
- package/package/components/RunForm.svelte +1 -1
- package/package/components/S3FilePicker.svelte +20 -8
- package/package/components/S3FilePicker.svelte.d.ts +2 -0
- package/package/components/ScheduleEditorInner.svelte +40 -37
- package/package/components/SchemaForm.svelte +192 -103
- package/package/components/SchemaForm.svelte.d.ts +16 -2
- package/package/components/ScriptBuilder.svelte +13 -8
- package/package/components/ScriptSchedules.svelte +11 -8
- package/package/components/ScriptSchema.svelte +3 -21
- package/package/components/ScriptVersionHistory.svelte +1 -1
- package/package/components/StringTypeNarrowing.svelte +217 -174
- package/package/components/StringTypeNarrowing.svelte.d.ts +5 -1
- package/package/components/Toggle.svelte +6 -3
- package/package/components/Toggle.svelte.d.ts +1 -0
- package/package/components/UserSettings.svelte +24 -1
- package/package/components/WorkspaceGroup.svelte +11 -13
- package/package/components/apps/components/buttons/AppButton.svelte +2 -0
- package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
- package/package/components/apps/components/display/AppFlowStatusComponent.svelte +13 -70
- package/package/components/apps/components/display/AppFlowStatusComponent.svelte.d.ts +1 -9
- package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +21 -8
- package/package/components/apps/components/display/AppJobIdFlowStatus.svelte.d.ts +1 -3
- package/package/components/apps/components/display/AppJobIdLogComponent.svelte +19 -7
- package/package/components/apps/components/display/AppJobIdLogComponent.svelte.d.ts +1 -3
- package/package/components/apps/components/display/AppLogsComponent.svelte +13 -70
- package/package/components/apps/components/display/AppLogsComponent.svelte.d.ts +1 -9
- package/package/components/apps/components/display/charts/AppAgCharts.svelte +25 -15
- package/package/components/apps/components/display/table/AppAggridTableActions.svelte +2 -0
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte +1 -1
- package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte +18 -8
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -0
- package/package/components/apps/components/helpers/RunnableWrapper.svelte +2 -0
- package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
- package/package/components/apps/components/helpers/eval.js +1 -36
- package/package/components/apps/components/inputs/AppFileInput.svelte +3 -1
- package/package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -0
- package/package/components/apps/components/inputs/AppS3FileInput.svelte +3 -1
- package/package/components/apps/components/inputs/AppS3FileInput.svelte.d.ts +1 -0
- package/package/components/apps/components/layout/AppConditionalWrapper.svelte +3 -1
- package/package/components/apps/components/layout/AppConditionalWrapper.svelte.d.ts +1 -0
- package/package/components/apps/components/layout/AppStepper.svelte +5 -1
- package/package/components/apps/components/layout/AppStepper.svelte.d.ts +2 -0
- package/package/components/apps/components/layout/AppTabs.svelte +3 -1
- package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
- package/package/components/apps/editor/AppEditorHeader.svelte +6 -7
- package/package/components/apps/editor/SettingsPanel.svelte +13 -3
- package/package/components/apps/editor/component/Component.svelte +8 -16
- package/package/components/apps/editor/component/components.d.ts +11 -2
- package/package/components/apps/editor/component/components.js +2 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +5 -34
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +3 -41
- package/package/components/apps/editor/settingsPanel/EventHandlerItem.svelte +33 -0
- package/package/components/apps/editor/settingsPanel/EventHandlerItem.svelte.d.ts +19 -0
- package/package/components/apps/editor/settingsPanel/EventHandlers.svelte +103 -0
- package/package/components/apps/editor/settingsPanel/EventHandlers.svelte.d.ts +18 -0
- package/package/components/apps/editor/settingsPanel/GridCondition.svelte +21 -45
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -23
- package/package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +5 -1
- package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +0 -2
- package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +0 -1
- package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +7 -1
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +7 -14
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +0 -1
- package/package/components/build_workers.js +13 -11
- package/package/components/common/button/ButtonDropdown.svelte +1 -0
- package/package/components/common/drawer/Disposable.svelte +3 -2
- package/package/components/common/drawer/Disposable.svelte.d.ts +1 -0
- package/package/components/common/drawer/Drawer.svelte +12 -2
- package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
- package/package/components/common/fileDownload/FileDownload.svelte +4 -2
- package/package/components/common/fileUpload/FileUpload.svelte +4 -3
- package/package/components/common/modal/Modal.svelte +4 -1
- package/package/components/common/modal/Modal.svelte.d.ts +1 -0
- package/package/components/common/popup/Popup.svelte +1 -1
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +4 -1
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
- package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte +79 -0
- package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte.d.ts +18 -0
- package/package/components/flows/content/FlowEditorPanel.svelte +16 -2
- package/package/components/flows/content/FlowInput.svelte +63 -53
- package/package/components/flows/content/FlowModuleComponent.svelte +26 -3
- package/package/components/flows/content/FlowModuleScript.svelte +40 -1
- package/package/components/flows/content/FlowModuleScript.svelte.d.ts +2 -0
- package/package/components/flows/content/FlowModuleSuspend.svelte +99 -59
- package/package/components/flows/content/FlowModuleWrapper.svelte +16 -1
- package/package/components/flows/content/FlowSchedules.svelte +11 -8
- package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -4
- package/package/components/flows/flowStateUtils.js +4 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +16 -1
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +6 -1
- package/package/components/flows/types.d.ts +4 -0
- package/package/components/flows/utils.d.ts +5 -1
- package/package/components/flows/utils.js +36 -0
- package/package/components/graph/FlowGraph.svelte +5 -2
- package/package/components/graph/FlowGraph.svelte.d.ts +2 -0
- package/package/components/graph/svelvet/container/models/index.d.ts +0 -5
- package/package/components/graph/svelvet/container/models/index.js +1 -1
- package/package/components/graph/svelvet/container/views/Svelvet.svelte +2 -5
- package/package/components/graph/util.d.ts +1 -37
- package/package/components/graph/util.js +0 -34
- package/package/components/instanceSettings.js +2 -1
- package/package/components/jobs/JobPreview.svelte +1 -1
- package/package/components/multiselect/MultiSelect.svelte +4 -3
- package/package/components/multiselect/MultiSelect.svelte.d.ts +1 -0
- package/package/components/multiselect/MultiSelectWrapper.svelte +89 -0
- package/package/components/multiselect/MultiSelectWrapper.svelte.d.ts +20 -0
- package/package/components/propertyPicker/ObjectViewer.svelte +6 -2
- package/package/components/runs/JobPreview.svelte +5 -1
- package/package/components/runs/RunRow.svelte +22 -3
- package/package/components/runs/RunRow.svelte.d.ts +2 -1
- package/package/components/runs/RunsTable.svelte +22 -9
- package/package/components/runs/RunsTable.svelte.d.ts +2 -1
- package/package/components/schema/AddProperty.svelte +149 -0
- package/package/components/schema/AddProperty.svelte.d.ts +23 -0
- package/package/components/schema/AddPropertyForm.svelte +33 -0
- package/package/components/schema/AddPropertyForm.svelte.d.ts +16 -0
- package/package/components/schema/EditableSchemaDrawer.svelte +198 -0
- package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +21 -0
- package/package/components/schema/EditableSchemaWrapper.svelte +31 -0
- package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +22 -0
- package/package/components/schema/FlowPropertyEditor.svelte +393 -0
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +47 -0
- package/package/components/schema/PropertyEditor.svelte +185 -0
- package/package/components/schema/PropertyEditor.svelte.d.ts +46 -0
- package/package/components/schema/SchemaFormDND.svelte +75 -0
- package/package/components/schema/SchemaFormDND.svelte.d.ts +28 -0
- package/package/components/table/AutoDataTable.svelte +90 -104
- package/package/components/table/Cell.svelte +4 -1
- package/package/components/table/Cell.svelte.d.ts +1 -0
- package/package/components/table/DownloadCsv.svelte +30 -0
- package/package/components/table/DownloadCsv.svelte.d.ts +17 -0
- package/package/components/table/tableUtils.d.ts +8 -0
- package/package/components/table/tableUtils.js +37 -0
- package/package/consts.js +3 -1
- package/package/deno_fetch.d.ts.txt +6 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +76 -0
- package/package/gen/schemas.gen.js +76 -0
- package/package/gen/services.gen.d.ts +100 -5
- package/package/gen/services.gen.js +216 -16
- package/package/gen/types.gen.d.ts +378 -5
- package/package/inferArgSig.d.ts +10 -0
- package/package/inferArgSig.js +59 -2
- package/package/scripts.d.ts +2 -0
- package/package/scripts.js +6 -3
- package/package/utils.d.ts +4 -3
- package/package/utils.js +9 -4
- package/package/workspace_settings.d.ts +15 -0
- package/package/workspace_settings.js +81 -0
- package/package.json +17 -7
- package/package/components/ParqetTableRenderer.svelte +0 -117
- package/package/components/ParqetTableRenderer.svelte.d.ts +0 -18
- package/package/components/PropertyRow.svelte +0 -88
- package/package/components/PropertyRow.svelte.d.ts +0 -23
- package/package/components/SchemaEditor.svelte +0 -346
- package/package/components/SchemaEditor.svelte.d.ts +0 -25
- package/package/components/SchemaModal.svelte +0 -443
- package/package/components/SchemaModal.svelte.d.ts +0 -33
- package/package/components/apps/editor/settingsPanel/Recompute.svelte +0 -55
- package/package/components/apps/editor/settingsPanel/Recompute.svelte.d.ts +0 -20
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
<script>import { getContext } from 'svelte';
|
|
1
|
+
<script>import { getContext, onMount } from 'svelte';
|
|
2
2
|
import FlowModuleWrapper from './FlowModuleWrapper.svelte';
|
|
3
3
|
import FlowSettings from './FlowSettings.svelte';
|
|
4
4
|
import FlowInput from './FlowInput.svelte';
|
|
5
5
|
import FlowFailureModule from './FlowFailureModule.svelte';
|
|
6
6
|
import FlowConstants from './FlowConstants.svelte';
|
|
7
|
+
import { initRequiredInputFilled } from '../utils';
|
|
7
8
|
export let noEditor = false;
|
|
8
9
|
export let enableAi = false;
|
|
9
|
-
const { selectedId, flowStore } = getContext('FlowEditorContext');
|
|
10
|
+
const { selectedId, flowStore, flowStateStore, flowInputsStore } = getContext('FlowEditorContext');
|
|
10
11
|
function checkDup(modules) {
|
|
11
12
|
let seenModules = [];
|
|
12
13
|
for (const m of modules) {
|
|
@@ -17,6 +18,19 @@ function checkDup(modules) {
|
|
|
17
18
|
seenModules.push(m.id);
|
|
18
19
|
}
|
|
19
20
|
}
|
|
21
|
+
onMount(() => {
|
|
22
|
+
$flowStore?.value?.modules?.forEach((module) => {
|
|
23
|
+
if (!module) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (!$flowStateStore) {
|
|
27
|
+
$flowInputsStore = {};
|
|
28
|
+
}
|
|
29
|
+
$flowInputsStore[module?.id] = {
|
|
30
|
+
requiredInputsFilled: initRequiredInputFilled(module.value, $flowStateStore?.[module?.id]?.schema ?? {})
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
});
|
|
20
34
|
</script>
|
|
21
35
|
|
|
22
36
|
{#if $selectedId?.startsWith('settings')}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
<script>import { Button, DrawerContent } from '../../common';
|
|
2
|
-
import SchemaEditor from '../../SchemaEditor.svelte';
|
|
3
2
|
import { getContext } from 'svelte';
|
|
4
3
|
import FlowCard from '../common/FlowCard.svelte';
|
|
5
4
|
import { copyFirstStepSchema } from '../flowStore';
|
|
@@ -10,12 +9,14 @@ import { convert } from '@redocly/json-to-json-schema';
|
|
|
10
9
|
import { sendUserToast } from '../../../toast';
|
|
11
10
|
import SavedInputs from '../../SavedInputs.svelte';
|
|
12
11
|
import EditableSchemaForm from '../../EditableSchemaForm.svelte';
|
|
12
|
+
import AddProperty from '../../schema/AddProperty.svelte';
|
|
13
13
|
export let noEditor;
|
|
14
14
|
const { flowStore, flowStateStore, previewArgs, initialPath } = getContext('FlowEditorContext');
|
|
15
15
|
let capturePayload;
|
|
16
16
|
let inputLibraryDrawer;
|
|
17
17
|
let jsonPayload;
|
|
18
18
|
let pendingJson;
|
|
19
|
+
let addProperty = undefined;
|
|
19
20
|
function importJson() {
|
|
20
21
|
const parsed = JSON.parse(pendingJson);
|
|
21
22
|
if (!parsed) {
|
|
@@ -25,64 +26,73 @@ function importJson() {
|
|
|
25
26
|
$flowStore.schema = { required: [], properties: {}, ...convert(parsed) };
|
|
26
27
|
jsonPayload.closeDrawer();
|
|
27
28
|
}
|
|
29
|
+
const yOffset = 191;
|
|
28
30
|
</script>
|
|
29
31
|
|
|
30
32
|
<CapturePayload bind:this={capturePayload} />
|
|
33
|
+
|
|
31
34
|
<FlowCard {noEditor} title="Flow Input">
|
|
32
|
-
<div class="
|
|
33
|
-
<div
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
</Button>
|
|
71
|
-
</div>
|
|
72
|
-
<div class="pt-6">
|
|
73
|
-
<SchemaEditor
|
|
74
|
-
isFlowInput
|
|
75
|
-
bind:schema={$flowStore.schema}
|
|
76
|
-
on:change={() => {
|
|
77
|
-
$flowStore = $flowStore
|
|
78
|
-
}}
|
|
79
|
-
/>
|
|
80
|
-
</div>
|
|
35
|
+
<div class="flex flex-row items-center gap-2 px-4 py-2 border-b">
|
|
36
|
+
<div>Copy input's schema from</div>
|
|
37
|
+
<Button
|
|
38
|
+
color="dark"
|
|
39
|
+
size="xs"
|
|
40
|
+
on:click={() => {
|
|
41
|
+
capturePayload.openDrawer()
|
|
42
|
+
}}
|
|
43
|
+
>
|
|
44
|
+
A request
|
|
45
|
+
</Button>
|
|
46
|
+
<Button
|
|
47
|
+
color="dark"
|
|
48
|
+
size="xs"
|
|
49
|
+
on:click={() => {
|
|
50
|
+
jsonPayload.openDrawer()
|
|
51
|
+
}}
|
|
52
|
+
>
|
|
53
|
+
A JSON
|
|
54
|
+
</Button>
|
|
55
|
+
<Button
|
|
56
|
+
color="dark"
|
|
57
|
+
size="xs"
|
|
58
|
+
on:click={() => {
|
|
59
|
+
inputLibraryDrawer.openDrawer()
|
|
60
|
+
}}
|
|
61
|
+
>
|
|
62
|
+
Past Runs/Input library
|
|
63
|
+
</Button>
|
|
64
|
+
<Button
|
|
65
|
+
color="dark"
|
|
66
|
+
size="xs"
|
|
67
|
+
disabled={$flowStore.value.modules.length === 0 ||
|
|
68
|
+
$flowStore.value.modules[0].value.type == 'identity'}
|
|
69
|
+
on:click={() => copyFirstStepSchema($flowStateStore, flowStore)}
|
|
70
|
+
>
|
|
71
|
+
First step's inputs
|
|
72
|
+
</Button>
|
|
81
73
|
</div>
|
|
82
|
-
<div class="p-
|
|
83
|
-
<
|
|
84
|
-
|
|
74
|
+
<div class="p-4 border-b">
|
|
75
|
+
<AddProperty
|
|
76
|
+
bind:schema={$flowStore.schema}
|
|
77
|
+
bind:this={addProperty}
|
|
78
|
+
on:change={() => {
|
|
79
|
+
$flowStore = $flowStore
|
|
80
|
+
}}
|
|
81
|
+
/>
|
|
85
82
|
</div>
|
|
83
|
+
|
|
84
|
+
<EditableSchemaForm
|
|
85
|
+
bind:schema={$flowStore.schema}
|
|
86
|
+
isFlowInput
|
|
87
|
+
on:edit={(e) => {
|
|
88
|
+
addProperty?.openDrawer(e.detail)
|
|
89
|
+
}}
|
|
90
|
+
on:delete={(e) => {
|
|
91
|
+
addProperty?.handleDeleteArgument([e.detail])
|
|
92
|
+
}}
|
|
93
|
+
offset={yOffset}
|
|
94
|
+
displayWebhookWarning
|
|
95
|
+
/>
|
|
86
96
|
</FlowCard>
|
|
87
97
|
|
|
88
98
|
<Drawer bind:this={jsonPayload} size="800px">
|
|
@@ -39,7 +39,8 @@ import Label from '../../Label.svelte';
|
|
|
39
39
|
import { enterpriseLicense } from '../../../stores';
|
|
40
40
|
import { isCloudHosted } from '../../../cloud';
|
|
41
41
|
import { loadSchemaFromModule } from '../flowInfers';
|
|
42
|
-
|
|
42
|
+
import { initRequiredInputFilled, setRequiredInputFilled } from '../utils';
|
|
43
|
+
const { selectedId, previewArgs, flowStateStore, flowStore, pathStore, saveDraft, flowInputsStore } = getContext('FlowEditorContext');
|
|
43
44
|
export let flowModule;
|
|
44
45
|
export let failureModule = false;
|
|
45
46
|
export let parentModule = undefined;
|
|
@@ -110,6 +111,11 @@ async function reload(flowModule) {
|
|
|
110
111
|
validCode = true;
|
|
111
112
|
if (inputTransformSchemaForm) {
|
|
112
113
|
inputTransformSchemaForm.setArgs(input_transforms);
|
|
114
|
+
if (!deepEqual(schema, $flowStateStore[flowModule.id]?.schema)) {
|
|
115
|
+
$flowInputsStore[flowModule?.id] = {
|
|
116
|
+
requiredInputsFilled: initRequiredInputFilled(flowModule.value, schema ?? {})
|
|
117
|
+
};
|
|
118
|
+
}
|
|
113
119
|
}
|
|
114
120
|
else {
|
|
115
121
|
if (flowModule.value.type == 'rawscript' ||
|
|
@@ -150,6 +156,15 @@ afterUpdate(() => {
|
|
|
150
156
|
let forceReload = 0;
|
|
151
157
|
let editorPanelSize = noEditor ? 0 : flowModule.value.type == 'script' ? 30 : 50;
|
|
152
158
|
let editorSettingsPanelSize = 100 - editorPanelSize;
|
|
159
|
+
function setFlowInput(argName) {
|
|
160
|
+
if ($flowInputsStore && $flowInputsStore?.[flowModule.id] === undefined) {
|
|
161
|
+
$flowInputsStore[flowModule.id] = {};
|
|
162
|
+
}
|
|
163
|
+
if ($flowInputsStore) {
|
|
164
|
+
const requiredInputsFilled = setRequiredInputFilled(argName, flowModule.value, $flowInputsStore[flowModule.id].requiredInputsFilled ?? {}, $flowStateStore[$selectedId]?.schema);
|
|
165
|
+
$flowInputsStore[flowModule.id].requiredInputsFilled = requiredInputsFilled;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
153
168
|
</script>
|
|
154
169
|
|
|
155
170
|
<svelte:window on:keydown={onKeyDown} />
|
|
@@ -234,7 +249,7 @@ let editorSettingsPanelSize = 100 - editorPanelSize;
|
|
|
234
249
|
{#key flowModule.id}
|
|
235
250
|
<Editor
|
|
236
251
|
folding
|
|
237
|
-
path={flowModule.
|
|
252
|
+
path={$pathStore + '/' + flowModule.id}
|
|
238
253
|
bind:websocketAlive
|
|
239
254
|
bind:this={editor}
|
|
240
255
|
class="h-full relative"
|
|
@@ -283,7 +298,11 @@ let editorSettingsPanelSize = 100 - editorPanelSize;
|
|
|
283
298
|
{#if !noEditor}
|
|
284
299
|
<div class="border-t">
|
|
285
300
|
{#key forceReload}
|
|
286
|
-
<FlowModuleScript
|
|
301
|
+
<FlowModuleScript
|
|
302
|
+
showAllCode={false}
|
|
303
|
+
path={flowModule.value.path}
|
|
304
|
+
hash={flowModule.value.hash}
|
|
305
|
+
/>
|
|
287
306
|
{/key}
|
|
288
307
|
</div>
|
|
289
308
|
{/if}
|
|
@@ -314,6 +333,10 @@ let editorSettingsPanelSize = 100 - editorPanelSize;
|
|
|
314
333
|
bind:args={flowModule.value.input_transforms}
|
|
315
334
|
extraLib={stepPropPicker.extraLib}
|
|
316
335
|
{enableAi}
|
|
336
|
+
on:changeArg={(e) => {
|
|
337
|
+
const { argName } = e.detail
|
|
338
|
+
setFlowInput(argName)
|
|
339
|
+
}}
|
|
317
340
|
/>
|
|
318
341
|
</PropPickerWrapper>
|
|
319
342
|
</div>
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
<script>import HighlightCode from '../../HighlightCode.svelte';
|
|
2
|
+
import TimeAgo from '../../TimeAgo.svelte';
|
|
2
3
|
import { ScriptService } from '../../../gen';
|
|
3
4
|
import { getScriptByPath } from '../../../scripts';
|
|
4
5
|
import { workspaceStore } from '../../../stores';
|
|
5
6
|
export let path;
|
|
6
7
|
export let hash = undefined;
|
|
8
|
+
export let showDate = false;
|
|
9
|
+
export let showAllCode = true;
|
|
7
10
|
let code;
|
|
8
11
|
let language;
|
|
12
|
+
let lock = undefined;
|
|
13
|
+
let date = undefined;
|
|
9
14
|
let notFound = false;
|
|
10
15
|
async function loadCode(path, hash) {
|
|
11
16
|
try {
|
|
@@ -15,6 +20,8 @@ async function loadCode(path, hash) {
|
|
|
15
20
|
: await getScriptByPath(path);
|
|
16
21
|
code = script.content;
|
|
17
22
|
language = script.language;
|
|
23
|
+
lock = script.lock;
|
|
24
|
+
date = script.created_at;
|
|
18
25
|
}
|
|
19
26
|
catch (e) {
|
|
20
27
|
notFound = true;
|
|
@@ -22,12 +29,44 @@ async function loadCode(path, hash) {
|
|
|
22
29
|
}
|
|
23
30
|
}
|
|
24
31
|
$: path && loadCode(path, hash);
|
|
32
|
+
function toggleShowAll() {
|
|
33
|
+
showAllCode = !showAllCode;
|
|
34
|
+
}
|
|
25
35
|
</script>
|
|
26
36
|
|
|
27
37
|
<div class="flex flex-col flex-1 h-full overflow-auto p-2">
|
|
38
|
+
{#if showDate && date}
|
|
39
|
+
<span class="text-xs text-tertiary mb-4"><TimeAgo {date} /></span>
|
|
40
|
+
{/if}
|
|
28
41
|
{#if notFound}
|
|
29
42
|
<div class="text-red-400">script not found at {path} in workspace {$workspaceStore}</div>
|
|
30
|
-
{:else}
|
|
43
|
+
{:else if showAllCode}
|
|
31
44
|
<HighlightCode {language} {code} />
|
|
45
|
+
{:else}
|
|
46
|
+
<div class="code-container h-full">
|
|
47
|
+
<HighlightCode {language} code={code?.split('\n').slice(0, 10).join('\n')} />
|
|
48
|
+
</div>
|
|
49
|
+
<button on:click={toggleShowAll}>Show all</button>
|
|
50
|
+
{/if}
|
|
51
|
+
|
|
52
|
+
{#if lock}
|
|
53
|
+
<h3 class="mb-2 mt-6">Lock</h3>
|
|
54
|
+
<pre class="bg-surface-secondary text-xs p-2 overflow-auto w-full">{lock}</pre>
|
|
32
55
|
{/if}
|
|
33
56
|
</div>
|
|
57
|
+
|
|
58
|
+
<style>
|
|
59
|
+
.code-container {
|
|
60
|
+
position: relative;
|
|
61
|
+
overflow: hidden;
|
|
62
|
+
}
|
|
63
|
+
.code-container::after {
|
|
64
|
+
content: '';
|
|
65
|
+
position: absolute;
|
|
66
|
+
bottom: 0;
|
|
67
|
+
left: 0;
|
|
68
|
+
right: 0;
|
|
69
|
+
height: 100px;
|
|
70
|
+
background: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgb(var(--color-surface)));
|
|
71
|
+
pointer-events: none;
|
|
72
|
+
}</style>
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
<script>import
|
|
2
|
-
import Toggle from '../../Toggle.svelte';
|
|
1
|
+
<script>import Toggle from '../../Toggle.svelte';
|
|
3
2
|
import Tooltip from '../../Tooltip.svelte';
|
|
4
3
|
import InputTransformForm from '../../InputTransformForm.svelte';
|
|
5
|
-
import { getContext } from 'svelte';
|
|
4
|
+
import { getContext, tick } from 'svelte';
|
|
6
5
|
import { Alert, Tab, Tabs } from '../../common';
|
|
7
6
|
import { GroupService } from '../../../gen';
|
|
8
7
|
import { emptySchema, emptyString } from '../../../utils';
|
|
@@ -12,6 +11,8 @@ import PropPickerWrapper from '../propPicker/PropPickerWrapper.svelte';
|
|
|
12
11
|
import Section from '../../Section.svelte';
|
|
13
12
|
import Label from '../../Label.svelte';
|
|
14
13
|
import SuspendDrawer from './SuspendDrawer.svelte';
|
|
14
|
+
import EditableSchemaDrawer from '../../schema/EditableSchemaDrawer.svelte';
|
|
15
|
+
import AddProperty from '../../schema/AddProperty.svelte';
|
|
15
16
|
const { selectedId, flowStateStore } = getContext('FlowEditorContext');
|
|
16
17
|
const result = $flowStateStore[$selectedId]?.previewResult ?? {};
|
|
17
18
|
let editor = undefined;
|
|
@@ -36,39 +37,40 @@ $: {
|
|
|
36
37
|
loadGroups();
|
|
37
38
|
}
|
|
38
39
|
}
|
|
40
|
+
let jsonView = false;
|
|
39
41
|
</script>
|
|
40
42
|
|
|
41
43
|
<Section label="Suspend/Approval/Prompt" class="w-full">
|
|
44
|
+
<svelte:fragment slot="action">
|
|
45
|
+
<SuspendDrawer text="Approval/Prompt helpers" />
|
|
46
|
+
</svelte:fragment>
|
|
42
47
|
<svelte:fragment slot="header">
|
|
43
|
-
<
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
<
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
<div class="flex flex-row items-center gap-2">
|
|
49
|
+
<Tooltip documentationLink="https://www.windmill.dev/docs/flows/flow_approval">
|
|
50
|
+
If defined, at the end of the step, the flow will be suspended until it receives external
|
|
51
|
+
requests to be resumed or canceled. This is most useful to implement approval steps but can
|
|
52
|
+
be used flexibly for other purposes.
|
|
53
|
+
</Tooltip>
|
|
54
|
+
<Toggle
|
|
55
|
+
size="xs"
|
|
56
|
+
checked={isSuspendEnabled}
|
|
57
|
+
on:change={() => {
|
|
58
|
+
if (isSuspendEnabled && flowModule.suspend != undefined) {
|
|
59
|
+
flowModule.suspend = undefined
|
|
60
|
+
} else {
|
|
61
|
+
flowModule.suspend = {
|
|
62
|
+
required_events: 1,
|
|
63
|
+
timeout: 1800
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}}
|
|
67
|
+
options={{
|
|
68
|
+
right: 'Suspend flow execution until events/approvals received'
|
|
69
|
+
}}
|
|
70
|
+
/>
|
|
52
71
|
</div>
|
|
53
72
|
</svelte:fragment>
|
|
54
73
|
|
|
55
|
-
<Toggle
|
|
56
|
-
checked={isSuspendEnabled}
|
|
57
|
-
on:change={() => {
|
|
58
|
-
if (isSuspendEnabled && flowModule.suspend != undefined) {
|
|
59
|
-
flowModule.suspend = undefined
|
|
60
|
-
} else {
|
|
61
|
-
flowModule.suspend = {
|
|
62
|
-
required_events: 1,
|
|
63
|
-
timeout: 1800
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}}
|
|
67
|
-
options={{
|
|
68
|
-
right: 'Suspend flow execution until events/approvals received'
|
|
69
|
-
}}
|
|
70
|
-
/>
|
|
71
|
-
|
|
72
74
|
<div class="overflow-x-auto scrollbar-hidden">
|
|
73
75
|
<Tabs bind:selected={suspendTabSelected}>
|
|
74
76
|
<Tab size="xs" value="core" disabled={!isSuspendEnabled}>
|
|
@@ -179,46 +181,84 @@ $: {
|
|
|
179
181
|
{/if}
|
|
180
182
|
</div>
|
|
181
183
|
{:else}
|
|
182
|
-
<div class="
|
|
183
|
-
|
|
184
|
-
{#if
|
|
185
|
-
<
|
|
186
|
-
|
|
184
|
+
<div class="grid grid-cols-4 mt-4 gap-8">
|
|
185
|
+
<div class="col-span-2">
|
|
186
|
+
{#if flowModule?.suspend?.resume_form}
|
|
187
|
+
<EditableSchemaDrawer
|
|
188
|
+
bind:schema={flowModule.suspend.resume_form.schema}
|
|
189
|
+
on:change={(e) => {
|
|
190
|
+
const schema = e.detail
|
|
187
191
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
192
|
+
// If the schema is empty, remove the form
|
|
193
|
+
if (Object.keys(schema?.properties ?? {}).length === 0) {
|
|
194
|
+
tick().then(() => {
|
|
195
|
+
if (!flowModule.suspend) return
|
|
196
|
+
flowModule.suspend.resume_form = undefined
|
|
197
|
+
})
|
|
198
|
+
}
|
|
193
199
|
}}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
200
|
+
{jsonView}
|
|
201
|
+
/>
|
|
202
|
+
{:else if emptyString($enterpriseLicense)}
|
|
203
|
+
<Alert type="warning" title="Adding a form to the approval page is an EE feature" />
|
|
204
|
+
{:else}
|
|
205
|
+
<div class="flex flex-col items-end mb-2 w-full">
|
|
206
|
+
<Toggle
|
|
207
|
+
checked={false}
|
|
208
|
+
label="JSON View"
|
|
209
|
+
size="xs"
|
|
210
|
+
options={{
|
|
211
|
+
right: 'JSON Editor',
|
|
212
|
+
rightTooltip:
|
|
213
|
+
'Arguments can be edited either using the wizard, or by editing their JSON Schema.'
|
|
214
|
+
}}
|
|
215
|
+
lightMode
|
|
216
|
+
on:change={() => {
|
|
217
|
+
if (flowModule.suspend) {
|
|
198
218
|
flowModule.suspend.resume_form = {
|
|
199
219
|
schema: emptySchema()
|
|
200
220
|
}
|
|
201
|
-
}
|
|
202
|
-
|
|
221
|
+
}
|
|
222
|
+
jsonView = true
|
|
223
|
+
}}
|
|
224
|
+
/>
|
|
225
|
+
</div>
|
|
226
|
+
<AddProperty
|
|
227
|
+
on:change={(e) => {
|
|
228
|
+
jsonView = false
|
|
229
|
+
if (flowModule.suspend) {
|
|
230
|
+
flowModule.suspend.resume_form = {
|
|
231
|
+
schema: e.detail
|
|
203
232
|
}
|
|
204
233
|
}
|
|
205
234
|
}}
|
|
235
|
+
schema={{}}
|
|
206
236
|
/>
|
|
207
|
-
|
|
208
|
-
|
|
237
|
+
{/if}
|
|
238
|
+
</div>
|
|
239
|
+
<div class="col-span-2 flex flex-col gap-4">
|
|
240
|
+
{#if flowModule.suspend}
|
|
241
|
+
{#if emptyString($enterpriseLicense)}
|
|
242
|
+
<Alert type="warning" title="Adding a form to the approval page is an EE feature" />
|
|
243
|
+
{/if}
|
|
244
|
+
|
|
245
|
+
<div class="flex flex-col gap-2">
|
|
246
|
+
<div class="flex">
|
|
247
|
+
<SuspendDrawer text="Default args & Dynamic enums help" />
|
|
248
|
+
</div>
|
|
209
249
|
</div>
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
250
|
+
{/if}
|
|
251
|
+
{#if flowModule.suspend}
|
|
252
|
+
<Toggle
|
|
253
|
+
bind:checked={flowModule.suspend.hide_cancel}
|
|
254
|
+
size="xs"
|
|
255
|
+
options={{
|
|
256
|
+
right: 'Hide cancel button on approval page'
|
|
257
|
+
}}
|
|
258
|
+
disabled={!Boolean(flowModule?.suspend?.resume_form)}
|
|
259
|
+
/>
|
|
260
|
+
{/if}
|
|
261
|
+
</div>
|
|
222
262
|
</div>
|
|
223
263
|
{/if}
|
|
224
264
|
</Section>
|
|
@@ -11,10 +11,11 @@ import FlowInputsFlow from './FlowInputsFlow.svelte';
|
|
|
11
11
|
import FlowBranchesAllWrapper from './FlowBranchesAllWrapper.svelte';
|
|
12
12
|
import FlowBranchesOneWrapper from './FlowBranchesOneWrapper.svelte';
|
|
13
13
|
import FlowWhileLoop from './FlowWhileLoop.svelte';
|
|
14
|
+
import { initRequiredInputFilled } from '../utils';
|
|
14
15
|
export let flowModule;
|
|
15
16
|
export let noEditor = false;
|
|
16
17
|
export let enableAi = false;
|
|
17
|
-
const { selectedId, schedule, flowStateStore } = getContext('FlowEditorContext');
|
|
18
|
+
const { selectedId, schedule, flowStateStore, flowInputsStore } = getContext('FlowEditorContext');
|
|
18
19
|
let scriptKind = 'script';
|
|
19
20
|
let scriptTemplate = 'script';
|
|
20
21
|
// These pointers are used to easily access previewArgs of parent module, and previous module
|
|
@@ -39,6 +40,11 @@ async function createModuleFromScript(path, summary, kind, hash) {
|
|
|
39
40
|
}
|
|
40
41
|
flowModule = module;
|
|
41
42
|
$flowStateStore[module.id] = state;
|
|
43
|
+
if ($flowInputsStore) {
|
|
44
|
+
$flowInputsStore[module?.id] = {
|
|
45
|
+
requiredInputsFilled: initRequiredInputFilled(module?.value, $flowStateStore[module?.id]?.schema)
|
|
46
|
+
};
|
|
47
|
+
}
|
|
42
48
|
}
|
|
43
49
|
</script>
|
|
44
50
|
|
|
@@ -112,6 +118,15 @@ async function createModuleFromScript(path, summary, kind, hash) {
|
|
|
112
118
|
|
|
113
119
|
flowModule = module
|
|
114
120
|
$flowStateStore[module.id] = state
|
|
121
|
+
|
|
122
|
+
if ($flowInputsStore) {
|
|
123
|
+
$flowInputsStore[module.id] = {
|
|
124
|
+
requiredInputsFilled: initRequiredInputFilled(
|
|
125
|
+
module.value,
|
|
126
|
+
$flowStateStore[module.id].schema
|
|
127
|
+
)
|
|
128
|
+
}
|
|
129
|
+
}
|
|
115
130
|
}}
|
|
116
131
|
failureModule={$selectedId === 'failure'}
|
|
117
132
|
/>
|
|
@@ -8,6 +8,7 @@ import ScheduleEditor from '../../ScheduleEditor.svelte';
|
|
|
8
8
|
import { ScheduleService } from '../../../gen';
|
|
9
9
|
import { workspaceStore } from '../../../stores';
|
|
10
10
|
import { Calendar } from 'lucide-svelte';
|
|
11
|
+
import Label from '../../Label.svelte';
|
|
11
12
|
const { schedule, flowStore, initialPath } = getContext('FlowEditorContext');
|
|
12
13
|
let schedules = undefined;
|
|
13
14
|
async function loadSchedules() {
|
|
@@ -26,15 +27,17 @@ let scheduleEditor;
|
|
|
26
27
|
$: initialPath && loadSchedules();
|
|
27
28
|
</script>
|
|
28
29
|
|
|
29
|
-
<div class="w-full
|
|
30
|
+
<div class="w-full flex flex-col gap-4 mb-4">
|
|
30
31
|
<!-- svelte-ignore a11y-autofocus -->
|
|
31
|
-
<
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
<Label label="Summary">
|
|
33
|
+
<input
|
|
34
|
+
autofocus
|
|
35
|
+
type="text"
|
|
36
|
+
placeholder="Short summary to be displayed when listed"
|
|
37
|
+
class="text-sm w-full"
|
|
38
|
+
bind:value={$schedule.summary}
|
|
39
|
+
/>
|
|
40
|
+
</Label>
|
|
38
41
|
</div>
|
|
39
42
|
|
|
40
43
|
<CronInput bind:schedule={$schedule.cron} bind:timezone={$schedule.timezone} />
|
|
@@ -7,7 +7,6 @@ import { inferArgs } from '../../../infer';
|
|
|
7
7
|
import { workspaceStore } from '../../../stores';
|
|
8
8
|
import { Loader2, Save, DiffIcon } from 'lucide-svelte';
|
|
9
9
|
import { cleanValueProperties, emptySchema, orderedJsonStringify, sendUserToast } from '../../../utils';
|
|
10
|
-
import { cloneDeep } from 'lodash';
|
|
11
10
|
import { createEventDispatcher } from 'svelte';
|
|
12
11
|
import { fade } from 'svelte/transition';
|
|
13
12
|
let scriptEditorDrawer;
|
|
@@ -19,7 +18,7 @@ export async function openDrawer(hash, cb) {
|
|
|
19
18
|
workspace: $workspaceStore,
|
|
20
19
|
hash
|
|
21
20
|
});
|
|
22
|
-
savedScript =
|
|
21
|
+
savedScript = structuredClone(script);
|
|
23
22
|
callback = cb;
|
|
24
23
|
}
|
|
25
24
|
let callback = undefined;
|
|
@@ -48,7 +47,7 @@ async function saveScript() {
|
|
|
48
47
|
lock: undefined
|
|
49
48
|
}
|
|
50
49
|
});
|
|
51
|
-
savedScript =
|
|
50
|
+
savedScript = structuredClone(script);
|
|
52
51
|
callback?.();
|
|
53
52
|
}
|
|
54
53
|
catch (error) {
|
|
@@ -186,7 +185,7 @@ async function checkForUnsavedChanges() {
|
|
|
186
185
|
button: {
|
|
187
186
|
text: 'Restore to saved',
|
|
188
187
|
onClick: () => {
|
|
189
|
-
script =
|
|
188
|
+
script = structuredClone(savedScript)
|
|
190
189
|
diffDrawer.closeDrawer()
|
|
191
190
|
}
|
|
192
191
|
}
|
|
@@ -16,7 +16,10 @@ export async function loadFlowModuleState(flowModule) {
|
|
|
16
16
|
flowModule.value.type == 'flow') {
|
|
17
17
|
flowModule.value.input_transforms = input_transforms;
|
|
18
18
|
}
|
|
19
|
-
return {
|
|
19
|
+
return {
|
|
20
|
+
schema,
|
|
21
|
+
previewResult: NEVER_TESTED_THIS_FAR
|
|
22
|
+
};
|
|
20
23
|
}
|
|
21
24
|
catch (e) {
|
|
22
25
|
console.debug(e);
|