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.
Files changed (175) hide show
  1. package/package/components/ArgInput.svelte +33 -3
  2. package/package/components/DisplayResult.svelte +17 -5
  3. package/package/components/ErrorOrRecoveryHandler.svelte +3 -2
  4. package/package/components/FlowBuilder.svelte +3 -0
  5. package/package/components/FlowBuilder.svelte.d.ts +1 -0
  6. package/package/components/FlowGraphViewer.svelte +6 -5
  7. package/package/components/FlowJobResult.svelte +4 -2
  8. package/package/components/FlowJobResult.svelte.d.ts +2 -0
  9. package/package/components/FlowStatusViewerInner.svelte +17 -6
  10. package/package/components/FlowViewer.svelte +1 -0
  11. package/package/components/HighlightCode.svelte +2 -2
  12. package/package/components/ModulePreviewForm.svelte +1 -1
  13. package/package/components/ObjectResourceInput.svelte +7 -2
  14. package/package/components/ObjectResourceInput.svelte.d.ts +2 -0
  15. package/package/components/ResourcePicker.svelte +60 -48
  16. package/package/components/ScriptVersionHistory.svelte +63 -7
  17. package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte +3 -2
  18. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +22 -5
  19. package/package/components/apps/components/display/table/AppAggridTable.svelte +14 -5
  20. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +23 -8
  21. package/package/components/apps/components/display/table/AppAggridTableActions.svelte.d.ts +5 -3
  22. package/package/components/apps/components/display/table/utils.js +8 -7
  23. package/package/components/apps/components/helpers/RunnableComponent.svelte +13 -1
  24. package/package/components/apps/components/helpers/eval.js +31 -25
  25. package/package/components/apps/editor/AppEditorHeader.svelte +1 -0
  26. package/package/components/apps/editor/AppReportsDrawer.svelte +4 -3
  27. package/package/components/apps/editor/component/components.d.ts +1 -1
  28. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +0 -1
  29. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphHeader.svelte +55 -45
  30. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphHeader.svelte.d.ts +7 -9
  31. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +66 -59
  32. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte.d.ts +9 -11
  33. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +213 -254
  34. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte.d.ts +0 -1
  35. package/package/components/apps/editor/settingsPanel/decisionTree/nodeHelpers.d.ts +1 -1
  36. package/package/components/apps/editor/settingsPanel/decisionTree/nodeHelpers.js +2 -6
  37. package/package/components/details/DetailPageDetailPanel.svelte +9 -1
  38. package/package/components/details/DetailPageDetailPanel.svelte.d.ts +2 -1
  39. package/package/components/details/DetailPageLayout.svelte +2 -0
  40. package/package/components/details/DetailPageLayout.svelte.d.ts +3 -0
  41. package/package/components/details/EmailTriggerPanel.svelte +128 -0
  42. package/package/components/details/EmailTriggerPanel.svelte.d.ts +20 -0
  43. package/package/components/details/WebhooksPanel.svelte +7 -68
  44. package/package/components/flows/FlowHistory.svelte +1 -0
  45. package/package/components/flows/content/FlowInputs.svelte +0 -1
  46. package/package/components/flows/content/FlowModuleScript.svelte +33 -3
  47. package/package/components/flows/content/FlowModuleScript.svelte.d.ts +2 -0
  48. package/package/components/flows/content/FlowModuleSuspend.svelte +15 -0
  49. package/package/components/flows/flowInfers.js +1 -1
  50. package/package/components/flows/map/FlowJobsMenu.svelte +39 -44
  51. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -2
  52. package/package/components/flows/map/FlowModuleSchemaMap.svelte +4 -3
  53. package/package/components/flows/map/InsertModuleButton.svelte +16 -9
  54. package/package/components/flows/map/MapItem.svelte +3 -97
  55. package/package/components/flows/map/MapItem.svelte.d.ts +0 -5
  56. package/package/components/flows/map/VirtualItem.svelte +6 -159
  57. package/package/components/flows/map/VirtualItem.svelte.d.ts +0 -15
  58. package/package/components/graph/FlowGraphV2.svelte +256 -0
  59. package/package/components/graph/{FlowGraph.svelte.d.ts → FlowGraphV2.svelte.d.ts} +8 -8
  60. package/package/components/graph/graphBuilder.d.ts +15 -0
  61. package/package/components/graph/graphBuilder.js +337 -0
  62. package/package/components/graph/index.d.ts +0 -1
  63. package/package/components/graph/index.js +0 -1
  64. package/package/components/graph/model.d.ts +1 -8
  65. package/package/components/graph/renderers/edges/BaseEdge.svelte +109 -0
  66. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +35 -0
  67. package/package/components/graph/renderers/edges/DataflowEdge.svelte +37 -0
  68. package/package/components/graph/renderers/edges/DataflowEdge.svelte.d.ts +29 -0
  69. package/package/components/graph/renderers/edges/EmptyEdge.svelte +22 -0
  70. package/package/components/graph/renderers/edges/EmptyEdge.svelte.d.ts +23 -0
  71. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +44 -0
  72. package/package/components/graph/renderers/nodes/BranchAllStart.svelte.d.ts +29 -0
  73. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +41 -0
  74. package/package/components/graph/renderers/nodes/BranchOneStart.svelte.d.ts +29 -0
  75. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +19 -0
  76. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte.d.ts +24 -0
  77. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +20 -0
  78. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte.d.ts +25 -0
  79. package/package/components/graph/renderers/nodes/InputNode.svelte +74 -0
  80. package/package/components/graph/renderers/nodes/InputNode.svelte.d.ts +23 -0
  81. package/package/components/graph/renderers/nodes/ModuleNode.svelte +71 -0
  82. package/package/components/graph/renderers/nodes/ModuleNode.svelte.d.ts +41 -0
  83. package/package/components/graph/renderers/nodes/NoBranchNode.svelte +20 -0
  84. package/package/components/graph/renderers/nodes/NoBranchNode.svelte.d.ts +27 -0
  85. package/package/components/graph/renderers/nodes/NodeWrapper.svelte +21 -0
  86. package/package/components/graph/renderers/nodes/NodeWrapper.svelte.d.ts +22 -0
  87. package/package/components/graph/renderers/nodes/ResultNode.svelte +24 -0
  88. package/package/components/graph/renderers/nodes/ResultNode.svelte.d.ts +22 -0
  89. package/package/components/graph/renderers/nodes/branchAllEndNode.svelte +19 -0
  90. package/package/components/graph/renderers/nodes/branchAllEndNode.svelte.d.ts +26 -0
  91. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +19 -0
  92. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte.d.ts +24 -0
  93. package/package/components/graph/renderers/utils.d.ts +8 -0
  94. package/package/components/graph/renderers/utils.js +26 -0
  95. package/package/components/graph/util.d.ts +1 -2
  96. package/package/components/graph/util.js +2 -8
  97. package/package/components/home/Item.svelte +1 -1
  98. package/package/components/runs/RunsFilter.svelte +15 -17
  99. package/package/forLater.js +8 -4
  100. package/package/gen/core/OpenAPI.js +1 -1
  101. package/package/gen/schemas.gen.d.ts +3 -0
  102. package/package/gen/schemas.gen.js +3 -0
  103. package/package/gen/services.gen.d.ts +22 -3
  104. package/package/gen/services.gen.js +38 -2
  105. package/package/gen/types.gen.d.ts +69 -6
  106. package/package/hub.d.ts +11 -0
  107. package/package/hub.js +2 -0
  108. package/package/hubPaths.json +9 -0
  109. package/package/init_scripts/python_failure_module.d.ts +1 -1
  110. package/package/init_scripts/python_failure_module.js +4 -3
  111. package/package/script_helpers.d.ts +2 -2
  112. package/package/script_helpers.js +11 -9
  113. package/package.json +2 -1
  114. package/package/components/graph/FlowGraph.svelte +0 -614
  115. package/package/components/graph/svelvet/LICENSE +0 -21
  116. package/package/components/graph/svelvet/container/README.md +0 -7
  117. package/package/components/graph/svelvet/container/controllers/middleware.d.ts +0 -11
  118. package/package/components/graph/svelvet/container/controllers/middleware.js +0 -87
  119. package/package/components/graph/svelvet/container/models/index.d.ts +0 -0
  120. package/package/components/graph/svelvet/container/models/index.js +0 -1
  121. package/package/components/graph/svelvet/container/views/GraphView.svelte +0 -262
  122. package/package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +0 -26
  123. package/package/components/graph/svelvet/container/views/Svelvet.svelte +0 -121
  124. package/package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +0 -36
  125. package/package/components/graph/svelvet/customCss/controllers/getCss.d.ts +0 -2
  126. package/package/components/graph/svelvet/customCss/controllers/getCss.js +0 -46
  127. package/package/components/graph/svelvet/d3/controllers/d3.d.ts +0 -5
  128. package/package/components/graph/svelvet/d3/controllers/d3.js +0 -59
  129. package/package/components/graph/svelvet/edges/controllers/anchorCbDev.d.ts +0 -4
  130. package/package/components/graph/svelvet/edges/controllers/anchorCbDev.js +0 -92
  131. package/package/components/graph/svelvet/edges/controllers/anchorCbUser.d.ts +0 -57
  132. package/package/components/graph/svelvet/edges/controllers/anchorCbUser.js +0 -73
  133. package/package/components/graph/svelvet/edges/controllers/util.d.ts +0 -37
  134. package/package/components/graph/svelvet/edges/controllers/util.js +0 -71
  135. package/package/components/graph/svelvet/edges/models/Anchor.d.ts +0 -48
  136. package/package/components/graph/svelvet/edges/models/Anchor.js +0 -122
  137. package/package/components/graph/svelvet/edges/models/Edge.d.ts +0 -48
  138. package/package/components/graph/svelvet/edges/models/Edge.js +0 -109
  139. package/package/components/graph/svelvet/edges/types/types.d.ts +0 -18
  140. package/package/components/graph/svelvet/edges/types/types.js +0 -1
  141. package/package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte +0 -104
  142. package/package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte.d.ts +0 -18
  143. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +0 -42
  144. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte.d.ts +0 -17
  145. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +0 -151
  146. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte.d.ts +0 -17
  147. package/package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte +0 -157
  148. package/package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte.d.ts +0 -60
  149. package/package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte +0 -8
  150. package/package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte.d.ts +0 -25
  151. package/package/components/graph/svelvet/edges/views/Edges/types.d.ts +0 -52
  152. package/package/components/graph/svelvet/edges/views/Edges/types.js +0 -1
  153. package/package/components/graph/svelvet/edges/views/Edges/utils.d.ts +0 -33
  154. package/package/components/graph/svelvet/edges/views/Edges/utils.js +0 -31
  155. package/package/components/graph/svelvet/nodes/controllers/util.d.ts +0 -9
  156. package/package/components/graph/svelvet/nodes/controllers/util.js +0 -13
  157. package/package/components/graph/svelvet/nodes/models/Node.d.ts +0 -74
  158. package/package/components/graph/svelvet/nodes/models/Node.js +0 -156
  159. package/package/components/graph/svelvet/nodes/views/Node.svelte +0 -84
  160. package/package/components/graph/svelvet/nodes/views/Node.svelte.d.ts +0 -21
  161. package/package/components/graph/svelvet/store/controllers/storeApi.d.ts +0 -25
  162. package/package/components/graph/svelvet/store/controllers/storeApi.js +0 -91
  163. package/package/components/graph/svelvet/store/controllers/userApi.d.ts +0 -3
  164. package/package/components/graph/svelvet/store/controllers/userApi.js +0 -18
  165. package/package/components/graph/svelvet/store/controllers/util.d.ts +0 -24
  166. package/package/components/graph/svelvet/store/controllers/util.js +0 -148
  167. package/package/components/graph/svelvet/store/models/store.d.ts +0 -13
  168. package/package/components/graph/svelvet/store/models/store.js +0 -12
  169. package/package/components/graph/svelvet/store/types/types.d.ts +0 -127
  170. package/package/components/graph/svelvet/store/types/types.js +0 -1
  171. package/package/components/graph/svelvet/types/README.md +0 -3
  172. package/package/components/graph/svelvet/types/index.d.ts +0 -2
  173. package/package/components/graph/svelvet/types/index.js +0 -1
  174. package/package/components/graph/svelvet/types/types.d.ts +0 -50
  175. 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
- <ResourcePicker bind:value={v} resourceType={itemsType?.resourceType} />
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
- value = value.concat('')
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
- if (result == 'WINDMILL_TOO_BIG') {
72
- largeObject = true;
73
- return 'json';
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
- return JSON.stringify(result ?? null, null, 4) ?? 'null';
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
- const slackRecoveryHandler = 'hub/2430/slack/schedule-recovery-handler-slack';
13
- const slackHandlerScriptPath = 'hub/6512/workspace-or-schedule-error-handler-slack';
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) {
@@ -29,6 +29,7 @@ declare const __propDef: {
29
29
  historyRestore: CustomEvent<any>;
30
30
  saveInitial: CustomEvent<any>;
31
31
  saveDraftOnlyAtNewPath: CustomEvent<any>;
32
+ saveDraft: CustomEvent<any>;
32
33
  deploy: CustomEvent<any>;
33
34
  details: CustomEvent<any>;
34
35
  } & {
@@ -1,7 +1,8 @@
1
- <script>import { FlowGraph } from './graph';
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
- <FlowGraph
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
- stepDetail = e.detail
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-sm top-1.5 left-2"
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={false} tag={undefined} />
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 { FlowGraph } from './graph';
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
- <FlowGraph
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
  />
@@ -72,6 +72,7 @@ function toAny(x) {
72
72
  {:else}
73
73
  <div class="text-secondary text-xs italic mb-4">No inputs</div>
74
74
  {/if}
75
+
75
76
  <FlowGraphViewer download {noSide} {flow} overflowAuto />
76
77
  </div>
77
78
  </TabContent>
@@ -67,7 +67,7 @@ $: lang = getLang(language);
67
67
  }}
68
68
  iconOnly
69
69
  />
70
- {#if code?.length < 5000}
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 ResourcePicker from './ResourcePicker.svelte';
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
- const nc = (await ResourceService.listResource({
38
- workspace: $workspaceStore,
39
- resourceType
40
- }))
41
- .filter((x) => x.resource_type != 'state' && x.resource_type != 'cache')
42
- .map((x) => ({
43
- value: x.path,
44
- label: x.path,
45
- type: x.resource_type
46
- }));
47
- // TODO check if this is needed
48
- if (!nc.find((x) => x.value == value) && (initialValue || value)) {
49
- nc.push({ value: value ?? initialValue, label: value ?? initialValue, type: '' });
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
- collection = nc;
52
- if (collection.length == 1 && selectFirst && valueSelect == undefined) {
53
- value = collection[0].value;
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 value && value != ''}
123
- <Button
124
- {disabled}
125
- color="light"
126
- variant="border"
127
- size="xs"
128
- on:click={() => resourceEditor?.initEdit?.(value ?? '')}
129
- startIcon={{ icon: Pen }}
130
- iconOnly
131
- />
132
- {/if}
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
- {#if resourceType?.includes(',')}
135
- {#each resourceType.split(',') as rt}
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?.(rt)}
142
- startIcon={{ icon: Plus }}>{rt}</Button
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
- {/each}
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