windmill-components 1.379.3 → 1.382.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/components/ArgInput.svelte +33 -3
- package/package/components/DisplayResult.svelte +17 -5
- package/package/components/ErrorOrRecoveryHandler.svelte +3 -2
- package/package/components/FlowBuilder.svelte +3 -0
- package/package/components/FlowBuilder.svelte.d.ts +1 -0
- package/package/components/FlowGraphViewer.svelte +6 -5
- package/package/components/FlowJobResult.svelte +4 -2
- package/package/components/FlowJobResult.svelte.d.ts +2 -0
- package/package/components/FlowStatusViewerInner.svelte +17 -6
- package/package/components/FlowViewer.svelte +1 -0
- package/package/components/HighlightCode.svelte +2 -2
- package/package/components/ModulePreviewForm.svelte +1 -1
- package/package/components/ObjectResourceInput.svelte +7 -2
- package/package/components/ObjectResourceInput.svelte.d.ts +2 -0
- package/package/components/ResourcePicker.svelte +60 -48
- package/package/components/ScriptVersionHistory.svelte +63 -7
- package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte +3 -2
- package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +22 -5
- package/package/components/apps/components/display/table/AppAggridTable.svelte +14 -5
- package/package/components/apps/components/display/table/AppAggridTableActions.svelte +23 -8
- package/package/components/apps/components/display/table/AppAggridTableActions.svelte.d.ts +5 -3
- package/package/components/apps/components/display/table/utils.js +8 -7
- package/package/components/apps/components/helpers/RunnableComponent.svelte +13 -1
- package/package/components/apps/components/helpers/eval.js +31 -25
- package/package/components/apps/editor/AppEditorHeader.svelte +1 -0
- package/package/components/apps/editor/AppReportsDrawer.svelte +4 -3
- package/package/components/apps/editor/component/components.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +0 -1
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphHeader.svelte +55 -45
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphHeader.svelte.d.ts +7 -9
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +66 -59
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte.d.ts +9 -11
- package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +213 -254
- package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte.d.ts +0 -1
- package/package/components/apps/editor/settingsPanel/decisionTree/nodeHelpers.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/decisionTree/nodeHelpers.js +2 -6
- 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/EmailTriggerPanel.svelte +128 -0
- package/package/components/details/EmailTriggerPanel.svelte.d.ts +20 -0
- package/package/components/details/WebhooksPanel.svelte +7 -68
- package/package/components/flows/FlowHistory.svelte +1 -0
- package/package/components/flows/content/FlowInputs.svelte +0 -1
- package/package/components/flows/content/FlowModuleScript.svelte +33 -3
- package/package/components/flows/content/FlowModuleScript.svelte.d.ts +2 -0
- package/package/components/flows/content/FlowModuleSuspend.svelte +15 -0
- package/package/components/flows/flowInfers.js +1 -1
- package/package/components/flows/map/FlowJobsMenu.svelte +39 -44
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -2
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +4 -3
- package/package/components/flows/map/InsertModuleButton.svelte +16 -9
- package/package/components/flows/map/MapItem.svelte +3 -97
- package/package/components/flows/map/MapItem.svelte.d.ts +0 -5
- package/package/components/flows/map/VirtualItem.svelte +6 -159
- package/package/components/flows/map/VirtualItem.svelte.d.ts +0 -15
- package/package/components/graph/FlowGraphV2.svelte +256 -0
- package/package/components/graph/{FlowGraph.svelte.d.ts → FlowGraphV2.svelte.d.ts} +8 -8
- package/package/components/graph/graphBuilder.d.ts +15 -0
- package/package/components/graph/graphBuilder.js +337 -0
- package/package/components/graph/index.d.ts +0 -1
- package/package/components/graph/index.js +0 -1
- package/package/components/graph/model.d.ts +1 -8
- package/package/components/graph/renderers/edges/BaseEdge.svelte +109 -0
- package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +35 -0
- package/package/components/graph/renderers/edges/DataflowEdge.svelte +37 -0
- package/package/components/graph/renderers/edges/DataflowEdge.svelte.d.ts +29 -0
- package/package/components/graph/renderers/edges/EmptyEdge.svelte +22 -0
- package/package/components/graph/renderers/edges/EmptyEdge.svelte.d.ts +23 -0
- package/package/components/graph/renderers/nodes/BranchAllStart.svelte +44 -0
- package/package/components/graph/renderers/nodes/BranchAllStart.svelte.d.ts +29 -0
- package/package/components/graph/renderers/nodes/BranchOneStart.svelte +41 -0
- package/package/components/graph/renderers/nodes/BranchOneStart.svelte.d.ts +29 -0
- package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +19 -0
- package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte.d.ts +24 -0
- package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +20 -0
- package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte.d.ts +25 -0
- package/package/components/graph/renderers/nodes/InputNode.svelte +74 -0
- package/package/components/graph/renderers/nodes/InputNode.svelte.d.ts +23 -0
- package/package/components/graph/renderers/nodes/ModuleNode.svelte +71 -0
- package/package/components/graph/renderers/nodes/ModuleNode.svelte.d.ts +41 -0
- package/package/components/graph/renderers/nodes/NoBranchNode.svelte +20 -0
- package/package/components/graph/renderers/nodes/NoBranchNode.svelte.d.ts +27 -0
- package/package/components/graph/renderers/nodes/NodeWrapper.svelte +21 -0
- package/package/components/graph/renderers/nodes/NodeWrapper.svelte.d.ts +22 -0
- package/package/components/graph/renderers/nodes/ResultNode.svelte +24 -0
- package/package/components/graph/renderers/nodes/ResultNode.svelte.d.ts +22 -0
- package/package/components/graph/renderers/nodes/branchAllEndNode.svelte +19 -0
- package/package/components/graph/renderers/nodes/branchAllEndNode.svelte.d.ts +26 -0
- package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +19 -0
- package/package/components/graph/renderers/nodes/branchOneEndNode.svelte.d.ts +24 -0
- package/package/components/graph/renderers/utils.d.ts +8 -0
- package/package/components/graph/renderers/utils.js +26 -0
- package/package/components/graph/util.d.ts +1 -2
- package/package/components/graph/util.js +2 -8
- package/package/components/home/Item.svelte +1 -1
- package/package/components/runs/RunsFilter.svelte +15 -17
- package/package/forLater.js +8 -4
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +3 -0
- package/package/gen/schemas.gen.js +3 -0
- package/package/gen/services.gen.d.ts +22 -3
- package/package/gen/services.gen.js +38 -2
- package/package/gen/types.gen.d.ts +69 -6
- package/package/hub.d.ts +11 -0
- package/package/hub.js +2 -0
- package/package/hubPaths.json +9 -0
- package/package/init_scripts/python_failure_module.d.ts +1 -1
- package/package/init_scripts/python_failure_module.js +4 -3
- package/package/script_helpers.d.ts +2 -2
- package/package/script_helpers.js +11 -9
- package/package.json +2 -1
- package/package/components/graph/FlowGraph.svelte +0 -614
- package/package/components/graph/svelvet/LICENSE +0 -21
- package/package/components/graph/svelvet/container/README.md +0 -7
- package/package/components/graph/svelvet/container/controllers/middleware.d.ts +0 -11
- package/package/components/graph/svelvet/container/controllers/middleware.js +0 -87
- package/package/components/graph/svelvet/container/models/index.d.ts +0 -0
- package/package/components/graph/svelvet/container/models/index.js +0 -1
- package/package/components/graph/svelvet/container/views/GraphView.svelte +0 -262
- package/package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +0 -26
- package/package/components/graph/svelvet/container/views/Svelvet.svelte +0 -121
- package/package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +0 -36
- package/package/components/graph/svelvet/customCss/controllers/getCss.d.ts +0 -2
- package/package/components/graph/svelvet/customCss/controllers/getCss.js +0 -46
- package/package/components/graph/svelvet/d3/controllers/d3.d.ts +0 -5
- package/package/components/graph/svelvet/d3/controllers/d3.js +0 -59
- package/package/components/graph/svelvet/edges/controllers/anchorCbDev.d.ts +0 -4
- package/package/components/graph/svelvet/edges/controllers/anchorCbDev.js +0 -92
- package/package/components/graph/svelvet/edges/controllers/anchorCbUser.d.ts +0 -57
- package/package/components/graph/svelvet/edges/controllers/anchorCbUser.js +0 -73
- package/package/components/graph/svelvet/edges/controllers/util.d.ts +0 -37
- package/package/components/graph/svelvet/edges/controllers/util.js +0 -71
- package/package/components/graph/svelvet/edges/models/Anchor.d.ts +0 -48
- package/package/components/graph/svelvet/edges/models/Anchor.js +0 -122
- package/package/components/graph/svelvet/edges/models/Edge.d.ts +0 -48
- package/package/components/graph/svelvet/edges/models/Edge.js +0 -109
- package/package/components/graph/svelvet/edges/types/types.d.ts +0 -18
- package/package/components/graph/svelvet/edges/types/types.js +0 -1
- package/package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte +0 -104
- package/package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte.d.ts +0 -18
- package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +0 -42
- package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte.d.ts +0 -17
- package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +0 -151
- package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte.d.ts +0 -17
- package/package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte +0 -157
- package/package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte.d.ts +0 -60
- package/package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte +0 -8
- package/package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte.d.ts +0 -25
- package/package/components/graph/svelvet/edges/views/Edges/types.d.ts +0 -52
- package/package/components/graph/svelvet/edges/views/Edges/types.js +0 -1
- package/package/components/graph/svelvet/edges/views/Edges/utils.d.ts +0 -33
- package/package/components/graph/svelvet/edges/views/Edges/utils.js +0 -31
- package/package/components/graph/svelvet/nodes/controllers/util.d.ts +0 -9
- package/package/components/graph/svelvet/nodes/controllers/util.js +0 -13
- package/package/components/graph/svelvet/nodes/models/Node.d.ts +0 -74
- package/package/components/graph/svelvet/nodes/models/Node.js +0 -156
- package/package/components/graph/svelvet/nodes/views/Node.svelte +0 -84
- package/package/components/graph/svelvet/nodes/views/Node.svelte.d.ts +0 -21
- package/package/components/graph/svelvet/store/controllers/storeApi.d.ts +0 -25
- package/package/components/graph/svelvet/store/controllers/storeApi.js +0 -91
- package/package/components/graph/svelvet/store/controllers/userApi.d.ts +0 -3
- package/package/components/graph/svelvet/store/controllers/userApi.js +0 -18
- package/package/components/graph/svelvet/store/controllers/util.d.ts +0 -24
- package/package/components/graph/svelvet/store/controllers/util.js +0 -148
- package/package/components/graph/svelvet/store/models/store.d.ts +0 -13
- package/package/components/graph/svelvet/store/models/store.js +0 -12
- package/package/components/graph/svelvet/store/types/types.d.ts +0 -127
- package/package/components/graph/svelvet/store/types/types.js +0 -1
- package/package/components/graph/svelvet/types/README.md +0 -3
- package/package/components/graph/svelvet/types/index.d.ts +0 -2
- package/package/components/graph/svelvet/types/index.js +0 -1
- package/package/components/graph/svelvet/types/types.d.ts +0 -50
- package/package/components/graph/svelvet/types/types.js +0 -18
|
@@ -364,8 +364,24 @@ $: shouldDispatchChanges && debounced(value);
|
|
|
364
364
|
enum_={itemsType?.enum ?? []}
|
|
365
365
|
enumLabels={extra['enumLabels']}
|
|
366
366
|
/>
|
|
367
|
-
{:else if itemsType?.type == 'resource' && itemsType?.resourceType}
|
|
368
|
-
<
|
|
367
|
+
{:else if itemsType?.type == 'resource' && itemsType?.resourceType && resourceTypes?.includes(itemsType.resourceType)}
|
|
368
|
+
<ObjectResourceInput
|
|
369
|
+
bind:value={v}
|
|
370
|
+
format={'resource-' + itemsType?.resourceType}
|
|
371
|
+
defaultValue={undefined}
|
|
372
|
+
/>
|
|
373
|
+
{:else if itemsType?.type == 'resource'}
|
|
374
|
+
<JsonEditor
|
|
375
|
+
bind:editor
|
|
376
|
+
on:focus={(e) => {
|
|
377
|
+
dispatch('focus')
|
|
378
|
+
}}
|
|
379
|
+
on:blur={(e) => {
|
|
380
|
+
dispatch('blur')
|
|
381
|
+
}}
|
|
382
|
+
code={JSON.stringify(v, null, 2)}
|
|
383
|
+
bind:value={v}
|
|
384
|
+
/>
|
|
369
385
|
{:else if itemsType?.type === 'object' && itemsType?.properties}
|
|
370
386
|
<div class="p-8 border rounded-md w-full">
|
|
371
387
|
<SchemaForm
|
|
@@ -412,7 +428,20 @@ $: shouldDispatchChanges && debounced(value);
|
|
|
412
428
|
if (value == undefined || !Array.isArray(value)) {
|
|
413
429
|
value = []
|
|
414
430
|
}
|
|
415
|
-
|
|
431
|
+
if (itemsType?.type == 'number') {
|
|
432
|
+
value = value.concat(0)
|
|
433
|
+
} else if (
|
|
434
|
+
itemsType?.type == 'object' ||
|
|
435
|
+
(itemsType?.type == 'resource' &&
|
|
436
|
+
!(
|
|
437
|
+
itemsType?.resourceType &&
|
|
438
|
+
resourceTypes?.includes(itemsType?.resourceType)
|
|
439
|
+
))
|
|
440
|
+
) {
|
|
441
|
+
value = value.concat({})
|
|
442
|
+
} else {
|
|
443
|
+
value = value.concat('')
|
|
444
|
+
}
|
|
416
445
|
}}
|
|
417
446
|
id="arg-input-add-item"
|
|
418
447
|
startIcon={{ icon: Plus }}
|
|
@@ -452,6 +481,7 @@ $: shouldDispatchChanges && debounced(value);
|
|
|
452
481
|
{disablePortal}
|
|
453
482
|
{format}
|
|
454
483
|
bind:value
|
|
484
|
+
bind:editor
|
|
455
485
|
{showSchemaExplorer}
|
|
456
486
|
/>
|
|
457
487
|
{:else if inputCat == 'resource-object' && format.split('-').length > 1 && format
|
|
@@ -68,9 +68,14 @@ function checkIfS3(result, keys) {
|
|
|
68
68
|
let is_render_all = false;
|
|
69
69
|
let download_as_csv = false;
|
|
70
70
|
function inferResultKind(result) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
try {
|
|
72
|
+
if (result == 'WINDMILL_TOO_BIG') {
|
|
73
|
+
largeObject = true;
|
|
74
|
+
return 'json';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
return 'nondisplayable';
|
|
74
79
|
}
|
|
75
80
|
if (result !== undefined) {
|
|
76
81
|
download_as_csv = false;
|
|
@@ -189,7 +194,13 @@ function inferResultKind(result) {
|
|
|
189
194
|
let jsonViewer;
|
|
190
195
|
let s3FileViewer;
|
|
191
196
|
function toJsonStr(result) {
|
|
192
|
-
|
|
197
|
+
try {
|
|
198
|
+
// console.log(result)
|
|
199
|
+
return JSON.stringify(result ?? null, null, 4) ?? 'null';
|
|
200
|
+
}
|
|
201
|
+
catch (e) {
|
|
202
|
+
return 'error stringifying object: ' + e.toString();
|
|
203
|
+
}
|
|
193
204
|
}
|
|
194
205
|
function contentOrRootString(obj) {
|
|
195
206
|
if (typeof obj === 'string') {
|
|
@@ -297,7 +308,8 @@ let seeS3PreviewFileFromList = '';
|
|
|
297
308
|
/>
|
|
298
309
|
{/each}</div
|
|
299
310
|
>
|
|
300
|
-
{:else}<div
|
|
311
|
+
{:else if resultKind == 'nondisplayable'}<div class="text-red-400">Non displayable object</div
|
|
312
|
+
>{:else}<div
|
|
301
313
|
class="inline-highlight relative grow {['plain', 'markdown'].includes(resultKind ?? '')
|
|
302
314
|
? ''
|
|
303
315
|
: 'min-h-[200px]'}"
|
|
@@ -9,8 +9,9 @@ import { FlowService, JobService, ScriptService, WorkspaceService } from '../gen
|
|
|
9
9
|
import { inferArgs } from '../infer';
|
|
10
10
|
import { hubBaseUrlStore } from '../stores';
|
|
11
11
|
import { CheckCircle2, Loader2, RotateCw, XCircle } from 'lucide-svelte';
|
|
12
|
-
|
|
13
|
-
const
|
|
12
|
+
import { hubPaths } from '../hub';
|
|
13
|
+
const slackRecoveryHandler = hubPaths.slackRecoveryHandler;
|
|
14
|
+
const slackHandlerScriptPath = hubPaths.slackErrorHandler;
|
|
14
15
|
export let errorOrRecovery;
|
|
15
16
|
export let isEditable;
|
|
16
17
|
export let slackToggleText = 'Enable';
|
|
@@ -146,14 +146,17 @@ async function saveDraft(forceSave = false) {
|
|
|
146
146
|
path: $pathStore
|
|
147
147
|
}
|
|
148
148
|
};
|
|
149
|
+
let savedAtNewPath = false;
|
|
149
150
|
if (newFlow) {
|
|
150
151
|
dispatch('saveInitial', $pathStore);
|
|
151
152
|
}
|
|
152
153
|
else if (savedFlow?.draft_only && $pathStore !== initialPath) {
|
|
154
|
+
savedAtNewPath = true;
|
|
153
155
|
initialPath = $pathStore;
|
|
154
156
|
// this is so we can use the flow builder outside of sveltekit
|
|
155
157
|
dispatch('saveDraftOnlyAtNewPath', { path: $pathStore, selectedId: getSelectedId() });
|
|
156
158
|
}
|
|
159
|
+
dispatch('saveDraft', { path: $pathStore, savedAtNewPath, newFlow });
|
|
157
160
|
sendUserToast('Saved as draft');
|
|
158
161
|
}
|
|
159
162
|
catch (error) {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
<script>import {
|
|
2
|
-
import { createEventDispatcher } from 'svelte';
|
|
1
|
+
<script>import { createEventDispatcher } from 'svelte';
|
|
3
2
|
import { twMerge } from 'tailwind-merge';
|
|
4
3
|
import FlowGraphViewerStep from './FlowGraphViewerStep.svelte';
|
|
4
|
+
import FlowGraphV2 from './graph/FlowGraphV2.svelte';
|
|
5
|
+
import { dfs } from './flows/dfs';
|
|
5
6
|
export let flow;
|
|
6
7
|
export let overflowAuto = false;
|
|
7
8
|
export let noSide = false;
|
|
@@ -17,16 +18,16 @@ const dispatch = createEventDispatcher();
|
|
|
17
18
|
class="{noSide ? 'col-span-3' : 'sm:col-span-2 col-span-3'} w-full border max-h-full"
|
|
18
19
|
class:overflow-auto={overflowAuto}
|
|
19
20
|
>
|
|
20
|
-
<
|
|
21
|
+
<FlowGraphV2
|
|
21
22
|
{download}
|
|
22
23
|
minHeight={400}
|
|
23
24
|
modules={flow?.value?.modules}
|
|
24
25
|
failureModule={flow?.value?.failure_module}
|
|
25
26
|
on:select={(e) => {
|
|
26
|
-
|
|
27
|
+
const mod = dfs(flow?.value?.modules ?? [], (m) => m).find((m) => m?.id === e?.detail)
|
|
28
|
+
stepDetail = mod ?? e.detail
|
|
27
29
|
dispatch('select', stepDetail)
|
|
28
30
|
}}
|
|
29
|
-
rebuildOnChange={flow}
|
|
30
31
|
/>
|
|
31
32
|
</div>
|
|
32
33
|
{/if}
|
|
@@ -6,6 +6,7 @@ import { workspaceStore } from '../stores';
|
|
|
6
6
|
import DrawerContent from './common/drawer/DrawerContent.svelte';
|
|
7
7
|
import { Drawer } from './common';
|
|
8
8
|
import AllFlowLogs from './AllFlowLogs.svelte';
|
|
9
|
+
export let waitingForExecutor = false;
|
|
9
10
|
export let result;
|
|
10
11
|
export let logs;
|
|
11
12
|
export let col = false;
|
|
@@ -13,6 +14,7 @@ export let noBorder = false;
|
|
|
13
14
|
export let loading;
|
|
14
15
|
export let filename = undefined;
|
|
15
16
|
export let jobId = undefined;
|
|
17
|
+
export let tag = undefined;
|
|
16
18
|
export let workspaceId = undefined;
|
|
17
19
|
export let refreshLog = false;
|
|
18
20
|
export let durationStates;
|
|
@@ -71,9 +73,9 @@ async function getLogs() {
|
|
|
71
73
|
{/if}
|
|
72
74
|
</div>
|
|
73
75
|
<div class="overflow-auto {col ? '' : 'max-h-80'} relative">
|
|
74
|
-
<div class="absolute z-40 text-
|
|
76
|
+
<div class="absolute z-40 text-xs top-0 left-1"
|
|
75
77
|
><button class="" on:click={drawer.openDrawer}>explore all steps' logs</button></div
|
|
76
78
|
>
|
|
77
|
-
<LogViewer content={logs ?? ''} {jobId} isLoading={
|
|
79
|
+
<LogViewer content={logs ?? ''} {jobId} isLoading={waitingForExecutor} {tag} />
|
|
78
80
|
</div>
|
|
79
81
|
</div>
|
|
@@ -3,6 +3,7 @@ import type { DurationStatus } from './graph';
|
|
|
3
3
|
import type { Writable } from 'svelte/store';
|
|
4
4
|
declare const __propDef: {
|
|
5
5
|
props: {
|
|
6
|
+
waitingForExecutor?: boolean | undefined;
|
|
6
7
|
result: any;
|
|
7
8
|
logs: string | undefined;
|
|
8
9
|
col?: boolean | undefined;
|
|
@@ -10,6 +11,7 @@ declare const __propDef: {
|
|
|
10
11
|
loading: boolean;
|
|
11
12
|
filename?: string | undefined;
|
|
12
13
|
jobId?: string | undefined;
|
|
14
|
+
tag?: string | undefined;
|
|
13
15
|
workspaceId?: string | undefined;
|
|
14
16
|
refreshLog?: boolean | undefined;
|
|
15
17
|
durationStates: Writable<Record<string, DurationStatus>> | undefined;
|
|
@@ -8,7 +8,7 @@ import { onDestroy } from 'svelte';
|
|
|
8
8
|
import { Badge, Button, Tab } from './common';
|
|
9
9
|
import DisplayResult from './DisplayResult.svelte';
|
|
10
10
|
import Tabs from './common/tabs/Tabs.svelte';
|
|
11
|
-
import {
|
|
11
|
+
import {} from './graph';
|
|
12
12
|
import ModuleStatus from './ModuleStatus.svelte';
|
|
13
13
|
import { emptyString, msToSec, truncateRev } from '../utils';
|
|
14
14
|
import JobArgs from './JobArgs.svelte';
|
|
@@ -20,6 +20,7 @@ import { dfs } from './flows/dfs';
|
|
|
20
20
|
import { writable } from 'svelte/store';
|
|
21
21
|
import Alert from './common/alert/Alert.svelte';
|
|
22
22
|
import FlowGraphViewerStep from './FlowGraphViewerStep.svelte';
|
|
23
|
+
import FlowGraphV2 from './graph/FlowGraphV2.svelte';
|
|
23
24
|
const dispatch = createEventDispatcher();
|
|
24
25
|
let { flowStateStore, retryStatus, suspendStatus } = getContext('FlowStatusViewer');
|
|
25
26
|
export let jobId;
|
|
@@ -115,7 +116,7 @@ function updateInnerModules() {
|
|
|
115
116
|
innerModules.forEach((mod, i) => {
|
|
116
117
|
if (mod.type === 'WaitingForEvents' &&
|
|
117
118
|
$localModuleStates?.[innerModules?.[i - 1]?.id ?? '']?.type == 'Success') {
|
|
118
|
-
setModuleState(mod.id ?? '', { type: mod.type, args: job?.args });
|
|
119
|
+
setModuleState(mod.id ?? '', { type: mod.type, args: job?.args, tag: job?.tag });
|
|
119
120
|
}
|
|
120
121
|
else if (mod.type === 'WaitingForExecutor' &&
|
|
121
122
|
$localModuleStates[mod.id ?? '']?.scheduled_for == undefined) {
|
|
@@ -130,7 +131,8 @@ function updateInnerModules() {
|
|
|
130
131
|
scheduled_for: job?.['scheduled_for'],
|
|
131
132
|
job_id: job?.id,
|
|
132
133
|
parent_module: mod['parent_module'],
|
|
133
|
-
args: job?.args
|
|
134
|
+
args: job?.args,
|
|
135
|
+
tag: job?.tag
|
|
134
136
|
};
|
|
135
137
|
setModuleState(mod.id ?? '', newState);
|
|
136
138
|
})
|
|
@@ -309,6 +311,7 @@ function onJobsLoaded(mod, job, force) {
|
|
|
309
311
|
job_id: job.id,
|
|
310
312
|
logs: job.logs,
|
|
311
313
|
args: job.args,
|
|
314
|
+
tag: job.tag,
|
|
312
315
|
started_at,
|
|
313
316
|
parent_module: mod['parent_module']
|
|
314
317
|
}, force);
|
|
@@ -324,6 +327,7 @@ function onJobsLoaded(mod, job, force) {
|
|
|
324
327
|
logs: job.logs,
|
|
325
328
|
result: job['result'],
|
|
326
329
|
job_id: job.id,
|
|
330
|
+
tag: job.tag,
|
|
327
331
|
parent_module: mod['parent_module'],
|
|
328
332
|
duration_ms: job['duration_ms'],
|
|
329
333
|
started_at: started_at,
|
|
@@ -464,6 +468,7 @@ function loadPreviousIters(lenToAdd) {
|
|
|
464
468
|
}
|
|
465
469
|
let stepDetail = undefined;
|
|
466
470
|
let storedListJobs = {};
|
|
471
|
+
let wrapperHeight = 0;
|
|
467
472
|
</script>
|
|
468
473
|
|
|
469
474
|
{#if notAnonynmous}
|
|
@@ -521,6 +526,7 @@ let storedListJobs = {};
|
|
|
521
526
|
<FlowJobResult
|
|
522
527
|
workspaceId={job?.workspace_id}
|
|
523
528
|
jobId={job?.id}
|
|
529
|
+
tag={job?.tag}
|
|
524
530
|
loading={job['running'] == true}
|
|
525
531
|
result={job.result}
|
|
526
532
|
logs={job.logs}
|
|
@@ -774,7 +780,7 @@ let storedListJobs = {};
|
|
|
774
780
|
{#if render}
|
|
775
781
|
{#if job.raw_flow && !isListJob}
|
|
776
782
|
<div class="{selected != 'graph' ? 'hidden' : ''} grow mt-4">
|
|
777
|
-
<div class="grid grid-cols-3 border h-full">
|
|
783
|
+
<div class="grid grid-cols-3 border h-full" bind:clientHeight={wrapperHeight}>
|
|
778
784
|
<div class="col-span-2 bg-surface-secondary">
|
|
779
785
|
<div class="flex flex-col">
|
|
780
786
|
{#each Object.values($retryStatus) as count}
|
|
@@ -793,8 +799,9 @@ let storedListJobs = {};
|
|
|
793
799
|
{/each}
|
|
794
800
|
</div>
|
|
795
801
|
|
|
796
|
-
<
|
|
802
|
+
<FlowGraphV2
|
|
797
803
|
download
|
|
804
|
+
minHeight={wrapperHeight}
|
|
798
805
|
success={jobId != undefined && isSuccess(job?.['success'])}
|
|
799
806
|
flowModuleStates={$localModuleStates}
|
|
800
807
|
on:select={(e) => {
|
|
@@ -819,6 +826,7 @@ let storedListJobs = {};
|
|
|
819
826
|
}}
|
|
820
827
|
on:selectedIteration={(e) => {
|
|
821
828
|
let detail = e.detail
|
|
829
|
+
|
|
822
830
|
setModuleState(detail.moduleId, {
|
|
823
831
|
selectedForloop: detail.id,
|
|
824
832
|
selectedForloopIndex: detail.index
|
|
@@ -826,7 +834,6 @@ let storedListJobs = {};
|
|
|
826
834
|
globalRefreshes[detail.moduleId]?.({ job: detail.id, index: detail.index })
|
|
827
835
|
}}
|
|
828
836
|
modules={job.raw_flow?.modules ?? []}
|
|
829
|
-
failureModule={job.raw_flow?.failure_module}
|
|
830
837
|
/>
|
|
831
838
|
</div>
|
|
832
839
|
<div
|
|
@@ -860,6 +867,7 @@ let storedListJobs = {};
|
|
|
860
867
|
jobId={job?.id}
|
|
861
868
|
filename={job.id}
|
|
862
869
|
loading={job['running']}
|
|
870
|
+
tag={job?.tag}
|
|
863
871
|
noBorder
|
|
864
872
|
col
|
|
865
873
|
result={job['result']}
|
|
@@ -923,14 +931,17 @@ let storedListJobs = {};
|
|
|
923
931
|
/>
|
|
924
932
|
</div>
|
|
925
933
|
{/if}
|
|
934
|
+
|
|
926
935
|
<FlowJobResult
|
|
927
936
|
workspaceId={job?.workspace_id}
|
|
928
937
|
jobId={node.job_id}
|
|
929
938
|
noBorder
|
|
930
939
|
loading={node.type != 'Success' && node.type != 'Failure'}
|
|
940
|
+
waitingForExecutor={node.type == 'WaitingForExecutor'}
|
|
931
941
|
refreshLog={node.type == 'InProgress'}
|
|
932
942
|
col
|
|
933
943
|
result={node.result}
|
|
944
|
+
tag={node.tag}
|
|
934
945
|
logs={node.logs}
|
|
935
946
|
durationStates={localDurationStatuses}
|
|
936
947
|
/>
|
|
@@ -67,7 +67,7 @@ $: lang = getLang(language);
|
|
|
67
67
|
}}
|
|
68
68
|
iconOnly
|
|
69
69
|
/>
|
|
70
|
-
{#if code?.length <
|
|
70
|
+
{#if code?.length < 10000}
|
|
71
71
|
{#if !lines}
|
|
72
72
|
<Highlight class="nowrap {$$props.class}" language={lang} {code} />
|
|
73
73
|
{:else}
|
|
@@ -76,7 +76,7 @@ $: lang = getLang(language);
|
|
|
76
76
|
</Highlight>
|
|
77
77
|
{/if}
|
|
78
78
|
{:else}
|
|
79
|
-
<pre class="overflow-auto max-h-screen {$$props.class}"
|
|
79
|
+
<pre class="overflow-auto max-h-screen text-xs {$$props.class}"
|
|
80
80
|
><code class="language-{language}">{code}</code></pre
|
|
81
81
|
>
|
|
82
82
|
{/if}
|
|
@@ -35,7 +35,7 @@ $: {
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
function plugIt(argName) {
|
|
38
|
-
args[argName] = evalValue(argName, mod, testStepStore, pickableProperties, true);
|
|
38
|
+
args[argName] = structuredClone(evalValue(argName, mod, testStepStore, pickableProperties, true));
|
|
39
39
|
try {
|
|
40
40
|
editor?.[argName]?.setCode(JSON.stringify(args[argName], null, 4));
|
|
41
41
|
}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
<script>import
|
|
1
|
+
<script>import JsonEditor from './apps/editor/settingsPanel/inputEditor/JsonEditor.svelte';
|
|
2
|
+
import ResourcePicker from './ResourcePicker.svelte';
|
|
2
3
|
import S3ObjectPicker from './S3ObjectPicker.svelte';
|
|
4
|
+
import SimpleEditor from './SimpleEditor.svelte';
|
|
3
5
|
export let format;
|
|
4
6
|
export let value;
|
|
5
7
|
export let disablePortal = false;
|
|
6
8
|
export let showSchemaExplorer = false;
|
|
7
9
|
export let selectFirst = false;
|
|
8
10
|
export let defaultValue;
|
|
11
|
+
export let editor = undefined;
|
|
9
12
|
function isString(value) {
|
|
10
13
|
return typeof value === 'string' || value instanceof String;
|
|
11
14
|
}
|
|
@@ -32,7 +35,7 @@ $: value && valueToPath();
|
|
|
32
35
|
<div class="flex flex-row w-full flex-wrap gap-x-2 gap-y-0.5">
|
|
33
36
|
{#if format === 'resource-s3_object'}
|
|
34
37
|
<S3ObjectPicker bind:value />
|
|
35
|
-
{:else}
|
|
38
|
+
{:else if value == undefined || typeof value === 'string'}
|
|
36
39
|
<ResourcePicker
|
|
37
40
|
{selectFirst}
|
|
38
41
|
{disablePortal}
|
|
@@ -45,5 +48,7 @@ $: value && valueToPath();
|
|
|
45
48
|
resourceType={format.split('-').length > 1 ? format.substring('resource-'.length) : undefined}
|
|
46
49
|
{showSchemaExplorer}
|
|
47
50
|
/>
|
|
51
|
+
{:else}
|
|
52
|
+
<JsonEditor bind:editor code={JSON.stringify(value, null, 2)} bind:value />
|
|
48
53
|
{/if}
|
|
49
54
|
</div>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
|
+
import SimpleEditor from './SimpleEditor.svelte';
|
|
2
3
|
declare const __propDef: {
|
|
3
4
|
props: {
|
|
4
5
|
format: string;
|
|
@@ -7,6 +8,7 @@ declare const __propDef: {
|
|
|
7
8
|
showSchemaExplorer?: boolean | undefined;
|
|
8
9
|
selectFirst?: boolean | undefined;
|
|
9
10
|
defaultValue: any;
|
|
11
|
+
editor?: SimpleEditor | undefined;
|
|
10
12
|
};
|
|
11
13
|
events: {
|
|
12
14
|
[evt: string]: CustomEvent<any>;
|
|
@@ -9,6 +9,7 @@ import DBSchemaExplorer from './DBSchemaExplorer.svelte';
|
|
|
9
9
|
import DarkModeObserver from './DarkModeObserver.svelte';
|
|
10
10
|
import { Pen, Plus, RotateCw } from 'lucide-svelte';
|
|
11
11
|
import ResourceEditorDrawer from './ResourceEditorDrawer.svelte';
|
|
12
|
+
import { sendUserToast } from '../toast';
|
|
12
13
|
const dispatch = createEventDispatcher();
|
|
13
14
|
export let initialValue = undefined;
|
|
14
15
|
export let value = initialValue;
|
|
@@ -33,27 +34,36 @@ let collection = valueSelect ? [valueSelect] : [];
|
|
|
33
34
|
export async function askNewResource() {
|
|
34
35
|
appConnect?.open?.(resourceType, expressOAuthSetup);
|
|
35
36
|
}
|
|
37
|
+
let loading = true;
|
|
36
38
|
async function loadResources(resourceType) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
39
|
+
loading = true;
|
|
40
|
+
try {
|
|
41
|
+
const nc = (await ResourceService.listResource({
|
|
42
|
+
workspace: $workspaceStore,
|
|
43
|
+
resourceType
|
|
44
|
+
}))
|
|
45
|
+
.filter((x) => x.resource_type != 'state' && x.resource_type != 'cache')
|
|
46
|
+
.map((x) => ({
|
|
47
|
+
value: x.path,
|
|
48
|
+
label: x.path,
|
|
49
|
+
type: x.resource_type
|
|
50
|
+
}));
|
|
51
|
+
// TODO check if this is needed
|
|
52
|
+
if (!nc.find((x) => x.value == value) && (initialValue || value)) {
|
|
53
|
+
nc.push({ value: value ?? initialValue, label: value ?? initialValue, type: '' });
|
|
54
|
+
}
|
|
55
|
+
collection = nc;
|
|
56
|
+
if (collection.length == 1 && selectFirst && valueSelect == undefined) {
|
|
57
|
+
value = collection[0].value;
|
|
58
|
+
valueType = collection[0].type;
|
|
59
|
+
valueSelect = collection[0];
|
|
60
|
+
}
|
|
50
61
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
valueType = collection[0].type;
|
|
55
|
-
valueSelect = collection[0];
|
|
62
|
+
catch (e) {
|
|
63
|
+
sendUserToast('Failed to load resource types', true);
|
|
64
|
+
console.error(e);
|
|
56
65
|
}
|
|
66
|
+
loading = false;
|
|
57
67
|
}
|
|
58
68
|
$: $workspaceStore && loadResources(resourceType);
|
|
59
69
|
$: dispatch('change', value);
|
|
@@ -115,46 +125,48 @@ let darkMode = false;
|
|
|
115
125
|
? SELECT_INPUT_DEFAULT_STYLE.containerStylesDark
|
|
116
126
|
: SELECT_INPUT_DEFAULT_STYLE.containerStyles}
|
|
117
127
|
/>
|
|
118
|
-
{:else}
|
|
128
|
+
{:else if !loading}
|
|
119
129
|
<div class="text-2xs text-tertiary mr-2">0 found</div>
|
|
120
130
|
{/if}
|
|
121
131
|
|
|
122
|
-
{#if
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
132
|
+
{#if !loading}
|
|
133
|
+
{#if value && value != ''}
|
|
134
|
+
<Button
|
|
135
|
+
{disabled}
|
|
136
|
+
color="light"
|
|
137
|
+
variant="border"
|
|
138
|
+
size="xs"
|
|
139
|
+
on:click={() => resourceEditor?.initEdit?.(value ?? '')}
|
|
140
|
+
startIcon={{ icon: Pen }}
|
|
141
|
+
iconOnly
|
|
142
|
+
/>
|
|
143
|
+
{/if}
|
|
133
144
|
|
|
134
|
-
|
|
135
|
-
|
|
145
|
+
{#if resourceType?.includes(',')}
|
|
146
|
+
{#each resourceType.split(',') as rt}
|
|
147
|
+
<Button
|
|
148
|
+
{disabled}
|
|
149
|
+
color="light"
|
|
150
|
+
variant="border"
|
|
151
|
+
size="xs"
|
|
152
|
+
on:click={() => appConnect?.open?.(rt)}
|
|
153
|
+
startIcon={{ icon: Plus }}>{rt}</Button
|
|
154
|
+
>
|
|
155
|
+
{/each}
|
|
156
|
+
{:else}
|
|
136
157
|
<Button
|
|
137
158
|
{disabled}
|
|
138
159
|
color="light"
|
|
139
160
|
variant="border"
|
|
140
161
|
size="xs"
|
|
141
|
-
on:click={() => appConnect?.open?.(
|
|
142
|
-
startIcon={{ icon: Plus }}
|
|
162
|
+
on:click={() => appConnect?.open?.(resourceType, expressOAuthSetup)}
|
|
163
|
+
startIcon={{ icon: Plus }}
|
|
164
|
+
iconOnly={collection?.length > 0}
|
|
165
|
+
>{#if collection?.length == 0}
|
|
166
|
+
Add a {resourceType} resource
|
|
167
|
+
{/if}</Button
|
|
143
168
|
>
|
|
144
|
-
{/
|
|
145
|
-
{:else}
|
|
146
|
-
<Button
|
|
147
|
-
{disabled}
|
|
148
|
-
color="light"
|
|
149
|
-
variant="border"
|
|
150
|
-
size="xs"
|
|
151
|
-
on:click={() => appConnect?.open?.(resourceType, expressOAuthSetup)}
|
|
152
|
-
startIcon={{ icon: Plus }}
|
|
153
|
-
iconOnly={collection?.length > 0}
|
|
154
|
-
>{#if collection?.length == 0}
|
|
155
|
-
Add a {resourceType} resource
|
|
156
|
-
{/if}</Button
|
|
157
|
-
>
|
|
169
|
+
{/if}
|
|
158
170
|
{/if}
|
|
159
171
|
|
|
160
172
|
<Button
|