windmill-components 1.35.1 → 1.35.43
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/components/ArgInput.svelte +21 -21
- package/components/ArgInput.svelte.d.ts +3 -3
- package/components/DisplayResult.svelte +73 -67
- package/components/Editor.svelte +184 -246
- package/components/Editor.svelte.d.ts +4 -4
- package/components/EditorBar.svelte +58 -45
- package/components/EditorBar.svelte.d.ts +2 -1
- package/components/FlowBuilder.svelte +113 -121
- package/components/FlowJobResult.svelte +4 -5
- package/components/FlowModulesViewer.svelte +89 -7
- package/components/FlowModulesViewer.svelte.d.ts +1 -0
- package/components/FlowPreviewContent.svelte +56 -15
- package/components/FlowPreviewContent.svelte.d.ts +1 -1
- package/components/FlowStatusViewer.svelte +42 -24
- package/components/FlowStatusViewer.svelte.d.ts +0 -1
- package/components/FlowViewer.svelte +7 -3
- package/components/HighlightCode.svelte +21 -0
- package/components/HighlightCode.svelte.d.ts +17 -0
- package/components/IconedPath.svelte +9 -7
- package/components/IconedResourceType.svelte +1 -1
- package/components/InputTransformForm.svelte +88 -107
- package/components/InputTransformForm.svelte.d.ts +0 -1
- package/components/ItemPicker.svelte +2 -2
- package/components/LogViewer.svelte +23 -0
- package/components/LogViewer.svelte.d.ts +19 -0
- package/components/ModulePreview.svelte +108 -0
- package/components/ModulePreview.svelte.d.ts +24 -0
- package/components/RunForm.svelte +29 -18
- package/components/RunForm.svelte.d.ts +6 -2
- package/components/SchemaEditor.svelte +5 -3
- package/components/SchemaForm.svelte +0 -2
- package/components/SchemaForm.svelte.d.ts +0 -1
- package/components/ScriptBuilder.svelte +77 -66
- package/components/ScriptBuilder.svelte.d.ts +2 -4
- package/components/ScriptEditor.svelte +69 -142
- package/components/ScriptEditor.svelte.d.ts +0 -5
- package/components/ScriptPicker.svelte +3 -3
- package/components/ScriptPicker.svelte.d.ts +2 -1
- package/components/SharedBadge.svelte +5 -13
- package/components/SimpleEditor.svelte +147 -0
- package/components/SimpleEditor.svelte.d.ts +35 -0
- package/components/TestJobLoader.svelte +98 -0
- package/components/TestJobLoader.svelte.d.ts +26 -0
- package/components/Tooltip.svelte +2 -1
- package/components/common/actionRow/ActionRow.svelte +26 -0
- package/components/common/actionRow/ActionRow.svelte.d.ts +21 -0
- package/components/common/alert/Alert.svelte +53 -0
- package/components/common/alert/Alert.svelte.d.ts +20 -0
- package/components/common/alert/model.d.ts +1 -0
- package/components/common/alert/model.js +1 -0
- package/components/common/badge/Badge.svelte +82 -0
- package/components/common/badge/Badge.svelte.d.ts +28 -0
- package/components/common/badge/model.d.ts +8 -0
- package/components/common/badge/model.js +1 -0
- package/components/common/button/Button.svelte +107 -0
- package/components/common/button/Button.svelte.d.ts +37 -0
- package/components/common/button/model.d.ts +6 -0
- package/components/common/button/model.js +1 -0
- package/components/common/confirmationModal/ConfirmationModal.svelte +55 -0
- package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +23 -0
- package/components/common/drawer/Drawer.svelte +3 -0
- package/components/common/drawer/Drawer.svelte.d.ts +2 -0
- package/components/common/index.d.ts +14 -0
- package/components/common/index.js +14 -0
- package/components/common/tabs/TabContent.svelte +3 -2
- package/components/common/tabs/TabContent.svelte.d.ts +1 -0
- package/components/common/tabs/Tabs.svelte +8 -1
- package/components/common/tabs/Tabs.svelte.d.ts +2 -0
- package/components/common/toggleButton/ToggleButton.svelte +20 -0
- package/components/common/toggleButton/ToggleButton.svelte.d.ts +19 -0
- package/components/common/toggleButton/ToggleButtonGroup.svelte +33 -0
- package/components/common/toggleButton/ToggleButtonGroup.svelte.d.ts +24 -0
- package/components/flows/FlowEditor.svelte +30 -0
- package/components/{FlowEditor.svelte.d.ts → flows/FlowEditor.svelte.d.ts} +1 -8
- package/components/flows/common/FlowCard.svelte +9 -0
- package/components/flows/common/FlowCard.svelte.d.ts +21 -0
- package/components/flows/common/FlowCardHeader.svelte +39 -0
- package/components/flows/common/FlowCardHeader.svelte.d.ts +20 -0
- package/components/flows/content/CopyFirstStepSchema.svelte +13 -0
- package/components/flows/{CopyFirstStepSchema.svelte.d.ts → content/CopyFirstStepSchema.svelte.d.ts} +0 -0
- package/components/flows/{DynamicInputHelpBox.svelte → content/DynamicInputHelpBox.svelte} +0 -0
- package/components/flows/{DynamicInputHelpBox.svelte.d.ts → content/DynamicInputHelpBox.svelte.d.ts} +0 -0
- package/components/flows/content/FlowEditorPanel.svelte +26 -0
- package/components/flows/content/FlowEditorPanel.svelte.d.ts +14 -0
- package/components/flows/content/FlowFailureModule.svelte +17 -0
- package/components/flows/content/FlowFailureModule.svelte.d.ts +14 -0
- package/components/flows/content/FlowInput.svelte +22 -0
- package/components/flows/{FlowInput.svelte.d.ts → content/FlowInput.svelte.d.ts} +0 -0
- package/components/flows/{FlowInputs.svelte → content/FlowInputs.svelte} +24 -13
- package/components/flows/{FlowInputs.svelte.d.ts → content/FlowInputs.svelte.d.ts} +0 -0
- package/components/flows/content/FlowLoop.svelte +38 -0
- package/components/flows/content/FlowLoop.svelte.d.ts +14 -0
- package/components/flows/content/FlowModule.svelte +190 -0
- package/components/flows/content/FlowModule.svelte.d.ts +29 -0
- package/components/flows/content/FlowModuleAdvancedSettings.svelte +64 -0
- package/components/flows/content/FlowModuleAdvancedSettings.svelte.d.ts +17 -0
- package/components/flows/content/FlowModuleHeader.svelte +68 -0
- package/components/flows/{FlowModuleHeader.svelte.d.ts → content/FlowModuleHeader.svelte.d.ts} +2 -3
- package/components/flows/content/FlowModuleScript.svelte +21 -0
- package/components/flows/content/FlowModuleScript.svelte.d.ts +17 -0
- package/components/flows/content/FlowModuleWrapper.svelte +47 -0
- package/components/flows/content/FlowModuleWrapper.svelte.d.ts +14 -0
- package/components/flows/content/FlowRetries.svelte +80 -0
- package/components/flows/content/FlowRetries.svelte.d.ts +14 -0
- package/components/flows/content/FlowSchedules.svelte +18 -0
- package/components/flows/content/FlowSchedules.svelte.d.ts +14 -0
- package/components/flows/content/FlowSettings.svelte +51 -0
- package/components/flows/{FlowSettings.svelte.d.ts → content/FlowSettings.svelte.d.ts} +1 -6
- package/components/flows/content/RemoveStepConfirmationModal.svelte +32 -0
- package/components/flows/content/RemoveStepConfirmationModal.svelte.d.ts +19 -0
- package/components/flows/flowState.d.ts +8 -7
- package/components/flows/flowState.js +25 -46
- package/components/flows/flowStateUtils.d.ts +15 -13
- package/components/flows/flowStateUtils.js +80 -72
- package/components/flows/flowStore.js +7 -4
- package/components/flows/header/FlowEditorHeader.svelte +23 -0
- package/components/flows/header/FlowEditorHeader.svelte.d.ts +14 -0
- package/components/flows/header/FlowImportExportMenu.svelte +56 -0
- package/components/flows/header/FlowImportExportMenu.svelte.d.ts +14 -0
- package/components/flows/header/FlowPreviewButtons.svelte +49 -0
- package/components/flows/header/FlowPreviewButtons.svelte.d.ts +14 -0
- package/components/flows/header/FlowStatus.svelte +36 -0
- package/components/flows/header/FlowStatus.svelte.d.ts +14 -0
- package/components/flows/map/FlowErrorHandlerItem.svelte +54 -0
- package/components/flows/map/FlowErrorHandlerItem.svelte.d.ts +14 -0
- package/components/flows/map/FlowModuleSchemaItem.svelte +58 -0
- package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +27 -0
- package/components/flows/map/FlowModuleSchemaMap.svelte +161 -0
- package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +20 -0
- package/components/flows/pickers/PickHubScript.svelte +4 -3
- package/components/flows/pickers/PickHubScript.svelte.d.ts +2 -1
- package/components/flows/pickers/PickScript.svelte +4 -12
- package/components/flows/pickers/PickScript.svelte.d.ts +1 -1
- package/components/flows/propPicker/PropPickerWrapper.svelte +42 -0
- package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +31 -0
- package/components/flows/scheduleUtils.d.ts +0 -1
- package/components/flows/scheduleUtils.js +0 -1
- package/components/flows/types.d.ts +9 -0
- package/components/flows/types.js +1 -0
- package/components/flows/utils.d.ts +1 -1
- package/components/flows/utils.js +8 -11
- package/components/icons/HatIcon.svelte +19 -0
- package/components/icons/HatIcon.svelte.d.ts +16 -0
- package/components/landing/FlowGettingStarted.svelte +22 -68
- package/components/landing/FlowLandingBox.svelte +1 -1
- package/components/landing/RessourceGettingStarted.svelte +7 -37
- package/components/landing/ScriptBox.svelte +33 -60
- package/components/landing/ScriptGettingStarted.svelte +23 -69
- package/components/propertyPicker/ObjectViewer.svelte +16 -7
- package/components/propertyPicker/PropPicker.svelte +38 -12
- package/components/propertyPicker/WarningMessage.svelte +2 -15
- package/components/script_editor/LogPanel.svelte +108 -119
- package/components/script_editor/LogPanel.svelte.d.ts +2 -0
- package/components/sidebar/SidebarContent.svelte +2 -2
- package/editorUtils.d.ts +25 -0
- package/editorUtils.js +43 -0
- package/gen/models/CompletedJob.d.ts +2 -1
- package/gen/models/CompletedJob.js +1 -0
- package/gen/models/FlowModule.d.ts +1 -0
- package/gen/models/FlowStatus.d.ts +3 -0
- package/gen/models/FlowStatusModule.d.ts +1 -1
- package/gen/models/FlowValue.d.ts +11 -0
- package/gen/models/Preview.d.ts +2 -1
- package/gen/models/Preview.js +1 -0
- package/gen/models/QueuedJob.d.ts +2 -1
- package/gen/models/QueuedJob.js +1 -0
- package/gen/models/RawScript.d.ts +2 -1
- package/gen/models/RawScript.js +1 -0
- package/gen/models/Script.d.ts +9 -2
- package/gen/models/Script.js +8 -0
- package/gen/services/JobService.d.ts +40 -0
- package/gen/services/JobService.js +70 -0
- package/gen/services/ScriptService.d.ts +14 -3
- package/gen/services/ScriptService.js +13 -0
- package/infer.d.ts +1 -1
- package/infer.js +6 -1
- package/package.json +67 -35
- package/script_helpers.d.ts +5 -2
- package/script_helpers.js +41 -13
- package/stores.d.ts +1 -1
- package/utils.d.ts +6 -4
- package/utils.js +27 -4
- package/components/FlowEditor.svelte +0 -55
- package/components/FlowPreview.svelte +0 -107
- package/components/FlowPreview.svelte.d.ts +0 -23
- package/components/ModuleStep.svelte +0 -131
- package/components/ModuleStep.svelte.d.ts +0 -25
- package/components/flows/CopyFirstStepSchema.svelte +0 -13
- package/components/flows/FlowBox.svelte +0 -16
- package/components/flows/FlowBox.svelte.d.ts +0 -23
- package/components/flows/FlowBoxHeader.svelte +0 -16
- package/components/flows/FlowBoxHeader.svelte.d.ts +0 -21
- package/components/flows/FlowInput.svelte +0 -22
- package/components/flows/FlowModuleHeader.svelte +0 -109
- package/components/flows/FlowSettings.svelte +0 -165
- package/components/flows/FlowTimeline.svelte +0 -169
- package/components/flows/FlowTimeline.svelte.d.ts +0 -21
- package/components/flows/stepOpenedStore.d.ts +0 -1
- package/components/flows/stepOpenedStore.js +0 -6
- package/components/propertyPicker/OverlayPropertyPicker.svelte +0 -69
- package/components/propertyPicker/OverlayPropertyPicker.svelte.d.ts +0 -24
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
<script context="module">export {};
|
|
2
|
+
</script>
|
|
3
|
+
|
|
4
|
+
<script>import { VSplitPane } from 'svelte-split-pane';
|
|
5
|
+
import Tab from '../../common/tabs/Tab.svelte';
|
|
6
|
+
import TabContent from '../../common/tabs/TabContent.svelte';
|
|
7
|
+
import Tabs from '../../common/tabs/Tabs.svelte';
|
|
8
|
+
import Editor from '../../Editor.svelte';
|
|
9
|
+
import EditorBar from '../../EditorBar.svelte';
|
|
10
|
+
import ModulePreview from '../../ModulePreview.svelte';
|
|
11
|
+
import FlowInputs from './FlowInputs.svelte';
|
|
12
|
+
import { createInlineScriptModule, createLoop, createScriptFromInlineScript, fork, getStepPropPicker, isEmptyFlowModule, pickScript } from '../flowStateUtils';
|
|
13
|
+
import { flowStore } from '../flowStore';
|
|
14
|
+
import SchemaForm from '../../SchemaForm.svelte';
|
|
15
|
+
import { RawScript } from '../../../gen';
|
|
16
|
+
import FlowCard from '../common/FlowCard.svelte';
|
|
17
|
+
import FlowModuleHeader from './FlowModuleHeader.svelte';
|
|
18
|
+
import { flowStateStore } from '../flowState';
|
|
19
|
+
import { scriptLangToEditorLang } from '../../../utils';
|
|
20
|
+
import PropPickerWrapper from '../propPicker/PropPickerWrapper.svelte';
|
|
21
|
+
import { getContext, setContext } from 'svelte';
|
|
22
|
+
import FlowModuleAdvancedSettings from './FlowModuleAdvancedSettings.svelte';
|
|
23
|
+
import { loadSchemaFromModule } from '../utils';
|
|
24
|
+
import { writable } from 'svelte/store';
|
|
25
|
+
import FlowModuleScript from './FlowModuleScript.svelte';
|
|
26
|
+
const { selectedId, select } = getContext('FlowEditorContext');
|
|
27
|
+
export let flowModule;
|
|
28
|
+
export let previewArgs = {};
|
|
29
|
+
export let flowModuleState;
|
|
30
|
+
$: [parentIndex, childIndex] = $selectedId.split('-').map(Number);
|
|
31
|
+
let editor;
|
|
32
|
+
let modulePreview;
|
|
33
|
+
let websocketAlive = { pyright: false, black: false, deno: false };
|
|
34
|
+
let selected = 'inputs';
|
|
35
|
+
$: shouldPick = isEmptyFlowModule(flowModule);
|
|
36
|
+
$: stepPropPicker = getStepPropPicker($selectedId.split('-').map(Number), $flowStore.schema, $flowStateStore, previewArgs);
|
|
37
|
+
function onKeyDown(event) {
|
|
38
|
+
if ((event.ctrlKey || event.metaKey) && event.key == 'Enter') {
|
|
39
|
+
event.preventDefault();
|
|
40
|
+
selected = 'test';
|
|
41
|
+
modulePreview?.runTestWithStepArgs();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async function apply(fn, arg) {
|
|
45
|
+
const [module, moduleState] = await fn(arg);
|
|
46
|
+
if (JSON.stringify(flowModule) != JSON.stringify(module) ||
|
|
47
|
+
JSON.stringify(flowModuleState) != JSON.stringify(moduleState)) {
|
|
48
|
+
flowModule = module;
|
|
49
|
+
flowModuleState = moduleState;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async function reload(flowModule) {
|
|
53
|
+
const { input_transforms, schema } = await loadSchemaFromModule(flowModule);
|
|
54
|
+
flowModuleState.schema = schema;
|
|
55
|
+
flowModule.input_transforms = input_transforms;
|
|
56
|
+
}
|
|
57
|
+
async function applyCreateLoop() {
|
|
58
|
+
await apply(createLoop, null);
|
|
59
|
+
}
|
|
60
|
+
export const FLOW_MODULE_WIDTH_THRESHOLD = 768;
|
|
61
|
+
const width = writable(0);
|
|
62
|
+
setContext('FlowModuleWidth', {
|
|
63
|
+
width,
|
|
64
|
+
threshold: FLOW_MODULE_WIDTH_THRESHOLD
|
|
65
|
+
});
|
|
66
|
+
</script>
|
|
67
|
+
|
|
68
|
+
<svelte:window on:keydown={onKeyDown} />
|
|
69
|
+
|
|
70
|
+
<div class="flex flex-col h-full" bind:clientWidth={$width}>
|
|
71
|
+
<FlowCard bind:flowModule>
|
|
72
|
+
<svelte:fragment slot="header">
|
|
73
|
+
<FlowModuleHeader
|
|
74
|
+
bind:module={flowModule}
|
|
75
|
+
on:delete
|
|
76
|
+
on:fork={() => apply(fork, flowModule)}
|
|
77
|
+
on:createScriptFromInlineScript={() => {
|
|
78
|
+
apply(createScriptFromInlineScript, {
|
|
79
|
+
flowModule: flowModule,
|
|
80
|
+
suffix: $selectedId,
|
|
81
|
+
schema: flowModuleState.schema
|
|
82
|
+
})
|
|
83
|
+
}}
|
|
84
|
+
/>
|
|
85
|
+
</svelte:fragment>
|
|
86
|
+
{#if shouldPick}
|
|
87
|
+
<FlowInputs
|
|
88
|
+
shouldDisableTriggerScripts={parentIndex != 0}
|
|
89
|
+
shouldDisableLoopCreation={childIndex !== undefined ||
|
|
90
|
+
parentIndex === 0 ||
|
|
91
|
+
$selectedId.includes('failure')}
|
|
92
|
+
on:loop={() => {
|
|
93
|
+
applyCreateLoop()
|
|
94
|
+
select(['loop', $selectedId].join('-'))
|
|
95
|
+
}}
|
|
96
|
+
on:pick={(e) => apply(pickScript, e.detail.path)}
|
|
97
|
+
on:new={(e) =>
|
|
98
|
+
apply(createInlineScriptModule, {
|
|
99
|
+
language: e.detail.language,
|
|
100
|
+
kind: e.detail.kind,
|
|
101
|
+
subkind: e.detail.subkind
|
|
102
|
+
})}
|
|
103
|
+
/>
|
|
104
|
+
{:else}
|
|
105
|
+
{#if flowModule.value.type === 'rawscript'}
|
|
106
|
+
<div class="flex-shrink-0 border-b p-1">
|
|
107
|
+
<EditorBar
|
|
108
|
+
{editor}
|
|
109
|
+
lang={flowModule.value['language'] ?? 'deno'}
|
|
110
|
+
{websocketAlive}
|
|
111
|
+
iconOnly={$width < FLOW_MODULE_WIDTH_THRESHOLD}
|
|
112
|
+
/>
|
|
113
|
+
</div>
|
|
114
|
+
{/if}
|
|
115
|
+
|
|
116
|
+
<div class="overflow-hidden flex-grow">
|
|
117
|
+
<VSplitPane
|
|
118
|
+
topPanelSize={flowModule.value.type === 'rawscript' ? '50%' : '0%'}
|
|
119
|
+
downPanelSize={flowModule.value.type === 'rawscript' ? '50%' : '100%'}
|
|
120
|
+
minTopPaneSize="20%"
|
|
121
|
+
minDownPaneSize="20%"
|
|
122
|
+
>
|
|
123
|
+
<top slot="top">
|
|
124
|
+
{#if flowModule.value.type === 'rawscript'}
|
|
125
|
+
<div on:mouseleave={() => reload(flowModule)} class="h-full overflow-auto">
|
|
126
|
+
<Editor
|
|
127
|
+
bind:websocketAlive
|
|
128
|
+
bind:this={editor}
|
|
129
|
+
class="h-full px-2"
|
|
130
|
+
bind:code={flowModule.value.content}
|
|
131
|
+
deno={flowModule.value.language === RawScript.language.DENO}
|
|
132
|
+
lang={scriptLangToEditorLang(flowModule.value.language)}
|
|
133
|
+
automaticLayout={true}
|
|
134
|
+
cmdEnterAction={() => {
|
|
135
|
+
selected = 'test'
|
|
136
|
+
modulePreview?.runTestWithStepArgs()
|
|
137
|
+
}}
|
|
138
|
+
formatAction={() => reload(flowModule)}
|
|
139
|
+
/>
|
|
140
|
+
</div>
|
|
141
|
+
{:else if flowModule.value.type === 'script'}
|
|
142
|
+
<FlowModuleScript {flowModule} />
|
|
143
|
+
{/if}
|
|
144
|
+
</top>
|
|
145
|
+
|
|
146
|
+
<down slot="down" class="flex flex-col flex-1 h-full">
|
|
147
|
+
<Tabs bind:selected>
|
|
148
|
+
<Tab value="inputs">Inputs</Tab>
|
|
149
|
+
<Tab value="test">Test</Tab>
|
|
150
|
+
{#if !$selectedId.includes('failure')}
|
|
151
|
+
<Tab value="advanced">Advanced</Tab>
|
|
152
|
+
{/if}
|
|
153
|
+
|
|
154
|
+
<svelte:fragment slot="content">
|
|
155
|
+
<div class="overflow-hidden bg-white" style="height:calc(100% - 32px);">
|
|
156
|
+
<TabContent value="inputs" class="flex flex-col flex-1 h-full">
|
|
157
|
+
<PropPickerWrapper bind:pickableProperties={stepPropPicker.pickableProperties}>
|
|
158
|
+
<!-- <pre class="text-xs">{JSON.stringify($flowStateStore, null, 4)}</pre> -->
|
|
159
|
+
<SchemaForm
|
|
160
|
+
schema={flowModuleState.schema}
|
|
161
|
+
inputTransform={true}
|
|
162
|
+
importPath={$selectedId}
|
|
163
|
+
bind:args={flowModule.input_transforms}
|
|
164
|
+
bind:extraLib={stepPropPicker.extraLib}
|
|
165
|
+
/>
|
|
166
|
+
</PropPickerWrapper>
|
|
167
|
+
</TabContent>
|
|
168
|
+
<TabContent value="test" class="flex flex-col flex-1 h-full" alwaysMounted={true}>
|
|
169
|
+
<ModulePreview
|
|
170
|
+
bind:this={modulePreview}
|
|
171
|
+
mod={flowModule}
|
|
172
|
+
schema={flowModuleState.schema}
|
|
173
|
+
indices={[parentIndex, childIndex]}
|
|
174
|
+
/>
|
|
175
|
+
</TabContent>
|
|
176
|
+
|
|
177
|
+
<TabContent value="advanced" class="flex flex-col flex-1 h-full">
|
|
178
|
+
<div class="p-4 overflow-y-auto">
|
|
179
|
+
<FlowModuleAdvancedSettings bind:flowModule />
|
|
180
|
+
</div>
|
|
181
|
+
</TabContent>
|
|
182
|
+
</div>
|
|
183
|
+
</svelte:fragment>
|
|
184
|
+
</Tabs>
|
|
185
|
+
</down>
|
|
186
|
+
</VSplitPane>
|
|
187
|
+
</div>
|
|
188
|
+
{/if}
|
|
189
|
+
</FlowCard>
|
|
190
|
+
</div>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
export declare type FlowModuleWidthContext = {
|
|
3
|
+
width: Writable<number>;
|
|
4
|
+
threshold: number;
|
|
5
|
+
};
|
|
6
|
+
import { type FlowModule } from '../../../gen';
|
|
7
|
+
import { type FlowModuleState } from '../flowState';
|
|
8
|
+
import { type Writable } from 'svelte/store';
|
|
9
|
+
declare const __propDef: {
|
|
10
|
+
props: {
|
|
11
|
+
flowModule: FlowModule;
|
|
12
|
+
previewArgs?: Record<string, any> | undefined;
|
|
13
|
+
flowModuleState: FlowModuleState;
|
|
14
|
+
FLOW_MODULE_WIDTH_THRESHOLD?: 768 | undefined;
|
|
15
|
+
};
|
|
16
|
+
events: {
|
|
17
|
+
delete: CustomEvent<any>;
|
|
18
|
+
} & {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
};
|
|
21
|
+
slots: {};
|
|
22
|
+
};
|
|
23
|
+
export declare type FlowModuleProps = typeof __propDef.props;
|
|
24
|
+
export declare type FlowModuleEvents = typeof __propDef.events;
|
|
25
|
+
export declare type FlowModuleSlots = typeof __propDef.slots;
|
|
26
|
+
export default class FlowModule extends SvelteComponentTyped<FlowModuleProps, FlowModuleEvents, FlowModuleSlots> {
|
|
27
|
+
get FLOW_MODULE_WIDTH_THRESHOLD(): number;
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<script>import SimpleEditor from '../../SimpleEditor.svelte';
|
|
2
|
+
import Toggle from '../../Toggle.svelte';
|
|
3
|
+
export let flowModule;
|
|
4
|
+
$: isSuspendEnabled = Boolean(flowModule.suspend);
|
|
5
|
+
$: isStopAfterIfEnabled = Boolean(flowModule.stop_after_if);
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<div class="flex flex-col items-start space-y-2">
|
|
9
|
+
<Toggle
|
|
10
|
+
checked={isSuspendEnabled}
|
|
11
|
+
on:change={() => {
|
|
12
|
+
if (isSuspendEnabled && flowModule.suspend != undefined) {
|
|
13
|
+
flowModule.suspend = undefined
|
|
14
|
+
} else {
|
|
15
|
+
flowModule.suspend = 1
|
|
16
|
+
}
|
|
17
|
+
}}
|
|
18
|
+
options={{
|
|
19
|
+
right: 'Suspend flow execution until events received enabled'
|
|
20
|
+
}}
|
|
21
|
+
/>
|
|
22
|
+
<span class="text-xs font-bold">Number of events to wait for</span>
|
|
23
|
+
|
|
24
|
+
{#if flowModule.suspend}
|
|
25
|
+
<input bind:value={flowModule.suspend} type="number" min="1" placeholder="1" />
|
|
26
|
+
{:else}
|
|
27
|
+
<input type="number" disabled />
|
|
28
|
+
{/if}
|
|
29
|
+
|
|
30
|
+
<Toggle
|
|
31
|
+
checked={isStopAfterIfEnabled}
|
|
32
|
+
on:change={() => {
|
|
33
|
+
if (isStopAfterIfEnabled && flowModule.stop_after_if) {
|
|
34
|
+
flowModule.stop_after_if = undefined
|
|
35
|
+
} else {
|
|
36
|
+
flowModule.stop_after_if = {
|
|
37
|
+
expr: 'result == undefined',
|
|
38
|
+
skip_if_stopped: false
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}}
|
|
42
|
+
options={{
|
|
43
|
+
right: 'Early stop if condition met enabled'
|
|
44
|
+
}}
|
|
45
|
+
/>
|
|
46
|
+
|
|
47
|
+
{#if flowModule.stop_after_if}
|
|
48
|
+
<span class="text-xs font-bold">Stop condition expression</span>
|
|
49
|
+
|
|
50
|
+
<SimpleEditor
|
|
51
|
+
lang="javascript"
|
|
52
|
+
bind:code={flowModule.stop_after_if.expr}
|
|
53
|
+
class="few-lines-editor border w-full"
|
|
54
|
+
/>
|
|
55
|
+
<span class="text-xs font-bold">Should skip if stopped</span>
|
|
56
|
+
|
|
57
|
+
<input type="checkbox" bind:checked={flowModule.stop_after_if.skip_if_stopped} />
|
|
58
|
+
{:else}
|
|
59
|
+
<span class="text-xs font-bold">Stop condition expression</span>
|
|
60
|
+
<textarea disabled rows="3" />
|
|
61
|
+
<span class="text-xs font-bold">Should skip if stopped</span>
|
|
62
|
+
<input type="checkbox" disabled />
|
|
63
|
+
{/if}
|
|
64
|
+
</div>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { FlowModule } from '../../../gen';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
flowModule: FlowModule;
|
|
6
|
+
};
|
|
7
|
+
events: {
|
|
8
|
+
[evt: string]: CustomEvent<any>;
|
|
9
|
+
};
|
|
10
|
+
slots: {};
|
|
11
|
+
};
|
|
12
|
+
export declare type FlowModuleAdvancedSettingsProps = typeof __propDef.props;
|
|
13
|
+
export declare type FlowModuleAdvancedSettingsEvents = typeof __propDef.events;
|
|
14
|
+
export declare type FlowModuleAdvancedSettingsSlots = typeof __propDef.slots;
|
|
15
|
+
export default class FlowModuleAdvancedSettings extends SvelteComponentTyped<FlowModuleAdvancedSettingsProps, FlowModuleAdvancedSettingsEvents, FlowModuleAdvancedSettingsSlots> {
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<script>import Button from '../../common/button/Button.svelte';
|
|
2
|
+
import { isEmptyFlowModule } from '../flowStateUtils';
|
|
3
|
+
import { faCodeBranch, faSave, faTrashAlt } from '@fortawesome/free-solid-svg-icons';
|
|
4
|
+
import { createEventDispatcher, getContext } from 'svelte';
|
|
5
|
+
import RemoveStepConfirmationModal from './RemoveStepConfirmationModal.svelte';
|
|
6
|
+
export let module;
|
|
7
|
+
let confirmationModalOpen = false;
|
|
8
|
+
$: shouldPick = isEmptyFlowModule(module);
|
|
9
|
+
const dispatch = createEventDispatcher();
|
|
10
|
+
const { selectedId, select } = getContext('FlowEditorContext');
|
|
11
|
+
const { width, threshold } = getContext('FlowModuleWidth');
|
|
12
|
+
$: iconOnly = $width < threshold;
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<div class="flex flex-row space-x-2">
|
|
16
|
+
{#if module.value.type === 'script' && !shouldPick}
|
|
17
|
+
<Button
|
|
18
|
+
size="xs"
|
|
19
|
+
color="light"
|
|
20
|
+
variant="border"
|
|
21
|
+
on:click={() => dispatch('fork')}
|
|
22
|
+
startIcon={{ icon: faCodeBranch }}
|
|
23
|
+
{iconOnly}
|
|
24
|
+
>
|
|
25
|
+
Fork
|
|
26
|
+
</Button>
|
|
27
|
+
{/if}
|
|
28
|
+
|
|
29
|
+
{#if module.value.type === 'rawscript' && !shouldPick}
|
|
30
|
+
<Button
|
|
31
|
+
size="xs"
|
|
32
|
+
color="light"
|
|
33
|
+
variant="border"
|
|
34
|
+
startIcon={{ icon: faSave }}
|
|
35
|
+
on:click={() => dispatch('createScriptFromInlineScript')}
|
|
36
|
+
{iconOnly}
|
|
37
|
+
>
|
|
38
|
+
Save to workspace
|
|
39
|
+
</Button>
|
|
40
|
+
{/if}
|
|
41
|
+
<Button
|
|
42
|
+
size="xs"
|
|
43
|
+
color="light"
|
|
44
|
+
variant="border"
|
|
45
|
+
startIcon={{ icon: faTrashAlt }}
|
|
46
|
+
{iconOnly}
|
|
47
|
+
on:click={(event) => {
|
|
48
|
+
if (event.shiftKey || shouldPick) {
|
|
49
|
+
dispatch('delete')
|
|
50
|
+
select('settings')
|
|
51
|
+
} else {
|
|
52
|
+
confirmationModalOpen = true
|
|
53
|
+
}
|
|
54
|
+
}}
|
|
55
|
+
>
|
|
56
|
+
{$selectedId.includes('failure') ? 'Delete error handler' : 'Remove step'}
|
|
57
|
+
</Button>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<RemoveStepConfirmationModal
|
|
61
|
+
bind:open={confirmationModalOpen}
|
|
62
|
+
on:confirmed={() => {
|
|
63
|
+
dispatch('delete')
|
|
64
|
+
setTimeout(() => {
|
|
65
|
+
select('settings')
|
|
66
|
+
})
|
|
67
|
+
}}
|
|
68
|
+
/>
|
package/components/flows/{FlowModuleHeader.svelte.d.ts → content/FlowModuleHeader.svelte.d.ts}
RENAMED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
|
-
import type { FlowModule } from '
|
|
2
|
+
import type { FlowModule } from '../../../gen';
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
|
-
|
|
6
|
-
mod: FlowModule;
|
|
5
|
+
module: FlowModule;
|
|
7
6
|
};
|
|
8
7
|
events: {
|
|
9
8
|
fork: CustomEvent<any>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<script>import HighlightCode from '../../HighlightCode.svelte';
|
|
2
|
+
import { getScriptByPath } from '../../../utils';
|
|
3
|
+
export let flowModule;
|
|
4
|
+
let code;
|
|
5
|
+
let language;
|
|
6
|
+
async function loadCode(module) {
|
|
7
|
+
if (module.value.type == 'script') {
|
|
8
|
+
const script = await getScriptByPath(module.value.path);
|
|
9
|
+
code = script.content;
|
|
10
|
+
language = script.language;
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
throw Error('Not a script');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
$: flowModule && loadCode(flowModule);
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<div class="flex flex-col flex-1 h-full overflow-auto">
|
|
20
|
+
<HighlightCode {language} {code} />
|
|
21
|
+
</div>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { FlowModule } from '../../../gen';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
flowModule: FlowModule;
|
|
6
|
+
};
|
|
7
|
+
events: {
|
|
8
|
+
[evt: string]: CustomEvent<any>;
|
|
9
|
+
};
|
|
10
|
+
slots: {};
|
|
11
|
+
};
|
|
12
|
+
export declare type FlowModuleScriptProps = typeof __propDef.props;
|
|
13
|
+
export declare type FlowModuleScriptEvents = typeof __propDef.events;
|
|
14
|
+
export declare type FlowModuleScriptSlots = typeof __propDef.slots;
|
|
15
|
+
export default class FlowModuleScript extends SvelteComponentTyped<FlowModuleScriptProps, FlowModuleScriptEvents, FlowModuleScriptSlots> {
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script>import { getContext } from 'svelte';
|
|
2
|
+
import { flowStateStore } from '../flowState';
|
|
3
|
+
import { flowStore } from '../flowStore';
|
|
4
|
+
import FlowModule from './FlowModule.svelte';
|
|
5
|
+
const { selectedId, previewArgs, select } = getContext('FlowEditorContext');
|
|
6
|
+
function selectedIdToIndexes(selectedId) {
|
|
7
|
+
return selectedId.split('-').map(Number);
|
|
8
|
+
}
|
|
9
|
+
$: [parentIndex, childIndex] = selectedIdToIndexes($selectedId);
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
{#if childIndex != undefined}
|
|
13
|
+
{#each [$flowStore.value.modules[parentIndex].value] as mod, index (index)}
|
|
14
|
+
{#each [$flowStateStore.modules[parentIndex].childFlowModules] as state}
|
|
15
|
+
{#if mod.type == 'forloopflow' && state != undefined}
|
|
16
|
+
<FlowModule
|
|
17
|
+
previewArgs={$previewArgs}
|
|
18
|
+
bind:flowModule={mod.modules[childIndex]}
|
|
19
|
+
bind:flowModuleState={state[childIndex]}
|
|
20
|
+
on:delete={() => {
|
|
21
|
+
$flowStateStore.modules[parentIndex].childFlowModules?.splice(childIndex, 1)
|
|
22
|
+
let mod = $flowStore.value.modules[parentIndex].value
|
|
23
|
+
if (mod.type === 'forloopflow') {
|
|
24
|
+
mod.modules.splice(childIndex, 1)
|
|
25
|
+
} else {
|
|
26
|
+
throw new Error('Expected forloop')
|
|
27
|
+
}
|
|
28
|
+
}}
|
|
29
|
+
/>
|
|
30
|
+
{:else}
|
|
31
|
+
<span>Incorrect state</span>
|
|
32
|
+
{/if}
|
|
33
|
+
{/each}
|
|
34
|
+
{/each}
|
|
35
|
+
{:else if $flowStore.value.modules[parentIndex]}
|
|
36
|
+
<FlowModule
|
|
37
|
+
previewArgs={$previewArgs}
|
|
38
|
+
bind:flowModule={$flowStore.value.modules[parentIndex]}
|
|
39
|
+
bind:flowModuleState={$flowStateStore.modules[parentIndex]}
|
|
40
|
+
on:delete={() => {
|
|
41
|
+
$flowStateStore.modules.splice(parentIndex, 1)
|
|
42
|
+
$flowStateStore = $flowStateStore
|
|
43
|
+
$flowStore.value.modules.splice(parentIndex, 1)
|
|
44
|
+
$flowStore = $flowStore
|
|
45
|
+
}}
|
|
46
|
+
/>
|
|
47
|
+
{/if}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {};
|
|
4
|
+
events: {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
};
|
|
7
|
+
slots: {};
|
|
8
|
+
};
|
|
9
|
+
export declare type FlowModuleWrapperProps = typeof __propDef.props;
|
|
10
|
+
export declare type FlowModuleWrapperEvents = typeof __propDef.events;
|
|
11
|
+
export declare type FlowModuleWrapperSlots = typeof __propDef.slots;
|
|
12
|
+
export default class FlowModuleWrapper extends SvelteComponentTyped<FlowModuleWrapperProps, FlowModuleWrapperEvents, FlowModuleWrapperSlots> {
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
<script>import Toggle from '../../Toggle.svelte';
|
|
2
|
+
import { flowStore } from '../flowStore';
|
|
3
|
+
function setConstantRetries() {
|
|
4
|
+
$flowStore.value.retry = {
|
|
5
|
+
...$flowStore.value.retry,
|
|
6
|
+
constant: {
|
|
7
|
+
attempts: 0,
|
|
8
|
+
seconds: 0
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function setExpoentialRetries() {
|
|
13
|
+
$flowStore.value.retry = {
|
|
14
|
+
...$flowStore.value.retry,
|
|
15
|
+
exponential: {
|
|
16
|
+
attempts: 0,
|
|
17
|
+
multiplier: 1,
|
|
18
|
+
seconds: 0
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
$: isConstantRetryEnabled = Boolean($flowStore.value.retry?.constant);
|
|
23
|
+
$: isExponentialRetryEnabled = Boolean($flowStore.value.retry?.exponential);
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<div class="flex flex-col items-start space-y-1">
|
|
27
|
+
<Toggle
|
|
28
|
+
checked={isConstantRetryEnabled}
|
|
29
|
+
on:change={() => {
|
|
30
|
+
if (isConstantRetryEnabled && $flowStore.value.retry?.constant) {
|
|
31
|
+
$flowStore.value.retry.constant = undefined
|
|
32
|
+
} else {
|
|
33
|
+
setConstantRetries()
|
|
34
|
+
}
|
|
35
|
+
}}
|
|
36
|
+
options={{
|
|
37
|
+
right: 'Constant retry enabled'
|
|
38
|
+
}}
|
|
39
|
+
/>
|
|
40
|
+
{#if $flowStore.value.retry?.constant}
|
|
41
|
+
<span class="text-xs font-bold">Attempts</span>
|
|
42
|
+
<input bind:value={$flowStore.value.retry.constant.attempts} type="number" />
|
|
43
|
+
<span class="text-xs font-bold">Delay (seconds)</span>
|
|
44
|
+
<input bind:value={$flowStore.value.retry.constant.seconds} type="number" />
|
|
45
|
+
{:else}
|
|
46
|
+
<span class="text-xs font-bold">Attempts</span>
|
|
47
|
+
<input type="number" disabled />
|
|
48
|
+
<span class="text-xs font-bold">Delay (seconds)</span>
|
|
49
|
+
<input type="number" disabled />
|
|
50
|
+
{/if}
|
|
51
|
+
|
|
52
|
+
<Toggle
|
|
53
|
+
checked={isExponentialRetryEnabled}
|
|
54
|
+
on:change={() => {
|
|
55
|
+
if (isExponentialRetryEnabled && $flowStore.value.retry?.exponential) {
|
|
56
|
+
$flowStore.value.retry.exponential = undefined
|
|
57
|
+
} else {
|
|
58
|
+
setExpoentialRetries()
|
|
59
|
+
}
|
|
60
|
+
}}
|
|
61
|
+
options={{
|
|
62
|
+
right: 'Exponential retry enabled'
|
|
63
|
+
}}
|
|
64
|
+
/>
|
|
65
|
+
{#if $flowStore.value.retry?.exponential}
|
|
66
|
+
<span class="text-xs font-bold">Attempts</span>
|
|
67
|
+
<input bind:value={$flowStore.value.retry.exponential.attempts} type="number" />
|
|
68
|
+
<span class="text-xs font-bold">Mulitplier</span>
|
|
69
|
+
<input bind:value={$flowStore.value.retry.exponential.multiplier} type="number" />
|
|
70
|
+
<span class="text-xs font-bold">Initial delay (seconds)</span>
|
|
71
|
+
<input bind:value={$flowStore.value.retry.exponential.seconds} type="number" />
|
|
72
|
+
{:else}
|
|
73
|
+
<span class="text-xs font-bold">Attempts</span>
|
|
74
|
+
<input type="number" disabled />
|
|
75
|
+
<span class="text-xs font-bold">Mulitplier</span>
|
|
76
|
+
<input type="number" disabled />
|
|
77
|
+
<span class="text-xs font-bold">Initial delay (seconds)</span>
|
|
78
|
+
<input type="number" disabled />
|
|
79
|
+
{/if}
|
|
80
|
+
</div>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {};
|
|
4
|
+
events: {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
};
|
|
7
|
+
slots: {};
|
|
8
|
+
};
|
|
9
|
+
export declare type FlowRetriesProps = typeof __propDef.props;
|
|
10
|
+
export declare type FlowRetriesEvents = typeof __propDef.events;
|
|
11
|
+
export declare type FlowRetriesSlots = typeof __propDef.slots;
|
|
12
|
+
export default class FlowRetries extends SvelteComponentTyped<FlowRetriesProps, FlowRetriesEvents, FlowRetriesSlots> {
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<script>import CronInput from '../../CronInput.svelte';
|
|
2
|
+
import SchemaForm from '../../SchemaForm.svelte';
|
|
3
|
+
import Toggle from '../../Toggle.svelte';
|
|
4
|
+
import { getContext } from 'svelte';
|
|
5
|
+
import { flowStore } from '../flowStore';
|
|
6
|
+
const { schedule } = getContext('FlowEditorContext');
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<CronInput bind:schedule={$schedule.cron} />
|
|
10
|
+
|
|
11
|
+
<SchemaForm schema={$flowStore.schema} bind:args={$schedule.args} />
|
|
12
|
+
|
|
13
|
+
<Toggle
|
|
14
|
+
bind:checked={$schedule.enabled}
|
|
15
|
+
options={{
|
|
16
|
+
right: 'Schedule enabled'
|
|
17
|
+
}}
|
|
18
|
+
/>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {};
|
|
4
|
+
events: {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
};
|
|
7
|
+
slots: {};
|
|
8
|
+
};
|
|
9
|
+
export declare type FlowSchedulesProps = typeof __propDef.props;
|
|
10
|
+
export declare type FlowSchedulesEvents = typeof __propDef.events;
|
|
11
|
+
export declare type FlowSchedulesSlots = typeof __propDef.slots;
|
|
12
|
+
export default class FlowSchedules extends SvelteComponentTyped<FlowSchedulesProps, FlowSchedulesEvents, FlowSchedulesSlots> {
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<script>import Tabs from '../../common/tabs/Tabs.svelte';
|
|
2
|
+
import Tab from '../../common/tabs/Tab.svelte';
|
|
3
|
+
import TabContent from '../../common/tabs/TabContent.svelte';
|
|
4
|
+
import { flowStore } from '../flowStore';
|
|
5
|
+
import Path from '../../Path.svelte';
|
|
6
|
+
import Required from '../../Required.svelte';
|
|
7
|
+
import { getContext } from 'svelte';
|
|
8
|
+
import FlowCard from '../common/FlowCard.svelte';
|
|
9
|
+
import FlowSchedules from './FlowSchedules.svelte';
|
|
10
|
+
import FlowRetries from './FlowRetries.svelte';
|
|
11
|
+
const { path } = getContext('FlowEditorContext');
|
|
12
|
+
export let defaultTab = 'configuration';
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<FlowCard title="Settings">
|
|
16
|
+
<Tabs selected={defaultTab}>
|
|
17
|
+
<Tab value="configuration">Configuration</Tab>
|
|
18
|
+
<Tab value="schedule">Schedule</Tab>
|
|
19
|
+
<Tab value="retries">Retries</Tab>
|
|
20
|
+
|
|
21
|
+
<svelte:fragment slot="content">
|
|
22
|
+
<TabContent value="configuration" class="p-4">
|
|
23
|
+
<Path bind:path={$flowStore.path} initialPath={path} namePlaceholder="my_flow" kind="flow">
|
|
24
|
+
<div slot="ownerToolkit">
|
|
25
|
+
Flow permissions depend on their path. Select the group <span class="font-mono"
|
|
26
|
+
>all</span
|
|
27
|
+
>
|
|
28
|
+
to share your flow, and <span class="font-mono">user</span> to keep it private.
|
|
29
|
+
<a href="https://docs.windmill.dev/docs/reference/namespaces">docs</a>
|
|
30
|
+
</div>
|
|
31
|
+
</Path>
|
|
32
|
+
|
|
33
|
+
<label class="block mt-4">
|
|
34
|
+
<span class="text-gray-700">Summary <Required required={false} /></span>
|
|
35
|
+
<textarea
|
|
36
|
+
bind:value={$flowStore.summary}
|
|
37
|
+
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50"
|
|
38
|
+
placeholder="A very short summary of the flow displayed when the flow is listed"
|
|
39
|
+
rows="1"
|
|
40
|
+
/>
|
|
41
|
+
</label>
|
|
42
|
+
</TabContent>
|
|
43
|
+
<TabContent value="schedule" class="p-4">
|
|
44
|
+
<FlowSchedules />
|
|
45
|
+
</TabContent>
|
|
46
|
+
<TabContent value="retries" class="px-4">
|
|
47
|
+
<FlowRetries />
|
|
48
|
+
</TabContent>
|
|
49
|
+
</svelte:fragment>
|
|
50
|
+
</Tabs>
|
|
51
|
+
</FlowCard>
|