windmill-components 1.109.8 → 1.121.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/package/cloud.js +0 -14
  2. package/package/common.d.ts +1 -0
  3. package/package/components/ArgEnum.svelte +53 -0
  4. package/package/components/ArgEnum.svelte.d.ts +24 -0
  5. package/package/components/ArgInfo.svelte +26 -14
  6. package/package/components/ArgInput.svelte +69 -83
  7. package/package/components/ArgInput.svelte.d.ts +2 -0
  8. package/package/components/ArrayTypeNarrowing.svelte +73 -0
  9. package/package/components/ArrayTypeNarrowing.svelte.d.ts +20 -0
  10. package/package/components/CenteredModal.svelte +7 -9
  11. package/package/components/DeployToSetting.svelte +35 -0
  12. package/package/components/DeployToSetting.svelte.d.ts +16 -0
  13. package/package/components/DeployWorkspace.svelte +555 -0
  14. package/package/components/DeployWorkspace.svelte.d.ts +23 -0
  15. package/package/components/DeployWorkspaceDrawer.svelte +35 -0
  16. package/package/components/DeployWorkspaceDrawer.svelte.d.ts +17 -0
  17. package/package/components/DiffDrawer.svelte +60 -0
  18. package/package/components/DiffDrawer.svelte.d.ts +23 -0
  19. package/package/components/DisplayResult.svelte +17 -24
  20. package/package/components/DraftBadge.svelte +1 -1
  21. package/package/components/Editor.svelte +0 -4
  22. package/package/components/EditorBar.svelte +127 -26
  23. package/package/components/EditorBar.svelte.d.ts +1 -0
  24. package/package/components/FieldHeader.svelte +2 -2
  25. package/package/components/FlowBuilder.svelte +9 -0
  26. package/package/components/FlowBuilder.svelte.d.ts +6 -0
  27. package/package/components/FlowJobResult.svelte +3 -2
  28. package/package/components/FlowJobResult.svelte.d.ts +1 -0
  29. package/package/components/FlowStatusViewer.svelte +6 -39
  30. package/package/components/FlowStatusWaitingForEvents.svelte +64 -0
  31. package/package/components/FlowStatusWaitingForEvents.svelte.d.ts +19 -0
  32. package/package/components/InputTransformForm.svelte +21 -11
  33. package/package/components/InputTransformForm.svelte.d.ts +1 -1
  34. package/package/components/InputTransformSchemaForm.svelte +1 -1
  35. package/package/components/JobArgs.svelte +120 -27
  36. package/package/components/LightweightArgInput.svelte +28 -15
  37. package/package/components/LightweightArgInput.svelte.d.ts +1 -0
  38. package/package/components/LightweightSchemaForm.svelte +24 -24
  39. package/package/components/LogViewer.svelte +23 -11
  40. package/package/components/LogViewer.svelte.d.ts +1 -0
  41. package/package/components/ModulePreview.svelte +7 -1
  42. package/package/components/ModulePreviewForm.svelte +8 -0
  43. package/package/components/ModulePreviewForm.svelte.d.ts +1 -1
  44. package/package/components/MoveDrawer.svelte +3 -3
  45. package/package/components/Path.svelte +27 -7
  46. package/package/components/Popover.svelte +11 -2
  47. package/package/components/Popover.svelte.d.ts +1 -0
  48. package/package/components/Required.svelte +1 -1
  49. package/package/components/ResourcePicker.svelte +7 -1
  50. package/package/components/RunForm.svelte +15 -8
  51. package/package/components/RunForm.svelte.d.ts +2 -0
  52. package/package/components/SchemaEditor.svelte +14 -12
  53. package/package/components/SchemaForm.svelte +9 -2
  54. package/package/components/SchemaModal.svelte +9 -5
  55. package/package/components/ScriptBuilder.svelte +21 -19
  56. package/package/components/ScriptEditor.svelte +6 -19
  57. package/package/components/ScriptPicker.svelte +13 -7
  58. package/package/components/ScriptVersionHistory.svelte +57 -0
  59. package/package/components/ScriptVersionHistory.svelte.d.ts +16 -0
  60. package/package/components/SimpleEditor.svelte +3 -1
  61. package/package/components/SimpleEditor.svelte.d.ts +1 -0
  62. package/package/components/Slider.svelte +2 -1
  63. package/package/components/Slider.svelte.d.ts +1 -0
  64. package/package/components/SuperadminSettings.svelte +12 -14
  65. package/package/components/SuperadminSettings.svelte.d.ts +0 -2
  66. package/package/components/Toast.svelte +1 -1
  67. package/package/components/Uptodate.svelte +26 -0
  68. package/package/components/Uptodate.svelte.d.ts +14 -0
  69. package/package/components/UserSettings.svelte +8 -12
  70. package/package/components/UserSettings.svelte.d.ts +0 -2
  71. package/package/components/Version.svelte +9 -0
  72. package/package/components/Version.svelte.d.ts +14 -0
  73. package/package/components/apps/components/buttons/AppButton.svelte +2 -2
  74. package/package/components/apps/components/buttons/AppForm.svelte +1 -2
  75. package/package/components/apps/components/buttons/AppFormButton.svelte +35 -38
  76. package/package/components/apps/components/buttons/AppSchemaForm.svelte +5 -0
  77. package/package/components/apps/components/display/AppChartJs.svelte +4 -3
  78. package/package/components/apps/components/display/AppFlowStatusComponent.svelte +2 -2
  79. package/package/components/apps/components/display/AppLogsComponent.svelte +7 -1
  80. package/package/components/apps/components/display/AppMap.svelte +11 -7
  81. package/package/components/apps/components/display/PlotlyHtml.svelte +1 -1
  82. package/package/components/apps/components/display/VegaLiteHtml.svelte +1 -1
  83. package/package/components/apps/components/display/table/AppAggridTable.svelte +86 -39
  84. package/package/components/apps/components/display/table/AppTable.svelte +29 -3
  85. package/package/components/apps/components/display/table/AppTableFooter.svelte +48 -43
  86. package/package/components/apps/components/display/table/AppTableFooter.svelte.d.ts +1 -0
  87. package/package/components/apps/components/helpers/InputValue.svelte +25 -3
  88. package/package/components/apps/components/helpers/RunnableComponent.svelte +14 -3
  89. package/package/components/apps/components/helpers/eval.d.ts +1 -0
  90. package/package/components/apps/components/helpers/eval.js +3 -1
  91. package/package/components/apps/components/inputs/AppCheckbox.svelte +5 -0
  92. package/package/components/apps/components/inputs/AppMultiSelect.svelte +1 -1
  93. package/package/components/apps/components/inputs/AppNumberInput.svelte +8 -1
  94. package/package/components/apps/components/inputs/AppQuillEditor.svelte +78 -0
  95. package/package/components/apps/components/inputs/AppQuillEditor.svelte.d.ts +27 -0
  96. package/package/components/apps/components/inputs/AppRangeInput.svelte +8 -1
  97. package/package/components/apps/components/inputs/AppSelect.svelte +17 -2
  98. package/package/components/apps/components/inputs/AppSliderInputs.svelte +18 -5
  99. package/package/components/apps/components/inputs/AppTextInput.svelte +66 -57
  100. package/package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +5 -0
  101. package/package/components/apps/components/layout/AppDrawer.svelte +2 -2
  102. package/package/components/apps/components/layout/AppList.svelte +112 -0
  103. package/package/components/apps/components/layout/AppList.svelte.d.ts +23 -0
  104. package/package/components/apps/components/layout/AppModal.svelte +35 -33
  105. package/package/components/apps/components/layout/ListWrapper.svelte +23 -0
  106. package/package/components/apps/components/layout/ListWrapper.svelte.d.ts +23 -0
  107. package/package/components/apps/editor/AppEditor.svelte +3 -2
  108. package/package/components/apps/editor/AppEditorHeader.svelte +14 -9
  109. package/package/components/apps/editor/AppPreview.svelte +2 -2
  110. package/package/components/apps/editor/RecomputeAllComponents.svelte +4 -0
  111. package/package/components/apps/editor/SettingsPanel.svelte +1 -1
  112. package/package/components/apps/editor/SubGridEditor.svelte +4 -2
  113. package/package/components/apps/editor/appUtils.d.ts +1 -1
  114. package/package/components/apps/editor/appUtils.js +2 -2
  115. package/package/components/apps/editor/component/Component.svelte +13 -0
  116. package/package/components/apps/editor/component/ComponentNavigation.svelte +9 -7
  117. package/package/components/apps/editor/component/ComponentWrapper.svelte +1 -4
  118. package/package/components/apps/editor/component/components.d.ts +138 -3
  119. package/package/components/apps/editor/component/components.js +131 -4
  120. package/package/components/apps/editor/component/default-codes.js +65 -35
  121. package/package/components/apps/editor/component/sets.js +2 -0
  122. package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +6 -0
  123. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +2 -2
  124. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +2 -1
  125. package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +3 -2
  126. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +1 -1
  127. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +3 -3
  128. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +1 -1
  129. package/package/components/apps/editor/settingsPanel/GridCondition.svelte +1 -1
  130. package/package/components/apps/editor/settingsPanel/GridPane.svelte +1 -2
  131. package/package/components/apps/editor/settingsPanel/GridTab.svelte +2 -2
  132. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +6 -2
  133. package/package/components/apps/editor/settingsPanel/Recompute.svelte +1 -1
  134. package/package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte +16 -2
  135. package/package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte.d.ts +1 -0
  136. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +7 -4
  137. package/package/components/apps/editor/settingsPanel/script/shared/ScriptRunConfiguration.svelte +2 -2
  138. package/package/components/apps/types.d.ts +8 -0
  139. package/package/components/apps/utils.js +2 -0
  140. package/package/components/common/badge/Badge.svelte +2 -1
  141. package/package/components/common/badge/Badge.svelte.d.ts +1 -0
  142. package/package/components/common/fileInput/FileInput.svelte +1 -1
  143. package/package/components/common/modal/AlwaysMountedModal.svelte +52 -54
  144. package/package/components/common/modal/AlwaysMountedModal.svelte.d.ts +1 -0
  145. package/package/components/common/table/AppRow.svelte +28 -1
  146. package/package/components/common/table/AppRow.svelte.d.ts +2 -0
  147. package/package/components/common/table/FlowRow.svelte +29 -2
  148. package/package/components/common/table/FlowRow.svelte.d.ts +2 -0
  149. package/package/components/common/table/RawAppRow.svelte +16 -0
  150. package/package/components/common/table/RawAppRow.svelte.d.ts +2 -0
  151. package/package/components/common/table/ScriptRow.svelte +29 -2
  152. package/package/components/common/table/ScriptRow.svelte.d.ts +2 -0
  153. package/package/components/common/tabs/Tab.svelte +2 -2
  154. package/package/components/common/tabs/Tabs.svelte +3 -6
  155. package/package/components/common/tabs/Tabs.svelte.d.ts +1 -1
  156. package/package/components/common/toggleButton-v2/ToggleButton.svelte +3 -1
  157. package/package/components/common/toggleButton-v2/ToggleButton.svelte.d.ts +1 -0
  158. package/package/components/flows/common/FlowCardHeader.svelte +13 -15
  159. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +8 -1
  160. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +8 -1
  161. package/package/components/flows/content/FlowLoop.svelte +8 -1
  162. package/package/components/flows/content/FlowModuleCache.svelte +1 -1
  163. package/package/components/flows/content/FlowModuleComponent.svelte +13 -4
  164. package/package/components/flows/content/FlowModuleHeader.svelte +27 -18
  165. package/package/components/flows/content/FlowModuleHeader.svelte.d.ts +1 -0
  166. package/package/components/flows/content/FlowModuleMock.svelte +51 -0
  167. package/package/components/flows/content/FlowModuleMock.svelte.d.ts +17 -0
  168. package/package/components/flows/content/FlowModuleSuspend.svelte +49 -2
  169. package/package/components/flows/flowExplorer.d.ts +11 -0
  170. package/package/components/flows/flowExplorer.js +137 -0
  171. package/package/components/flows/map/FlowErrorHandlerItem.svelte +3 -2
  172. package/package/components/flows/map/FlowModuleSchemaItem.svelte +13 -1
  173. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  174. package/package/components/flows/map/FlowModuleSchemaMap.svelte +1 -1
  175. package/package/components/flows/map/MapItem.svelte +2 -1
  176. package/package/components/flows/previousResults.d.ts +0 -2
  177. package/package/components/flows/previousResults.js +1 -67
  178. package/package/components/graph/FlowGraph.svelte +71 -13
  179. package/package/components/graph/svelvet/container/views/GraphView.svelte +22 -0
  180. package/package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +2 -0
  181. package/package/components/graph/svelvet/container/views/Svelvet.svelte +13 -1
  182. package/package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +2 -0
  183. package/package/components/graph/svelvet/edges/models/Edge.d.ts +2 -1
  184. package/package/components/graph/svelvet/edges/models/Edge.js +3 -1
  185. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +2 -13
  186. package/package/components/graph/svelvet/store/controllers/util.js +1 -1
  187. package/package/components/graph/svelvet/types/types.d.ts +1 -0
  188. package/package/components/home/ItemsList.svelte +50 -41
  189. package/package/components/home/ListFilters.svelte +0 -1
  190. package/package/components/jobs/JobDetail.svelte +1 -1
  191. package/package/components/jobs/JobPreview.svelte +29 -13
  192. package/package/components/jobs/JobPreview.svelte.d.ts +1 -2
  193. package/package/components/scriptEditor/LogPanel.svelte +6 -1
  194. package/package/components/scriptEditor/LogPanel.svelte.d.ts +1 -1
  195. package/package/gen/core/OpenAPI.js +1 -1
  196. package/package/gen/index.d.ts +1 -0
  197. package/package/gen/models/EditResourceType.d.ts +1 -1
  198. package/package/gen/models/FlowModule.d.ts +7 -0
  199. package/package/gen/models/ScheduleWJobs.d.ts +8 -0
  200. package/package/gen/models/ScheduleWJobs.js +4 -0
  201. package/package/gen/services/DraftService.d.ts +10 -0
  202. package/package/gen/services/DraftService.js +16 -0
  203. package/package/gen/services/JobService.d.ts +24 -3
  204. package/package/gen/services/JobService.js +21 -3
  205. package/package/gen/services/ScheduleService.d.ts +17 -0
  206. package/package/gen/services/ScheduleService.js +18 -0
  207. package/package/gen/services/SettingsService.d.ts +6 -0
  208. package/package/gen/services/SettingsService.js +11 -0
  209. package/package/gen/services/WorkspaceService.d.ts +22 -0
  210. package/package/gen/services/WorkspaceService.js +30 -0
  211. package/package/infer.js +17 -3
  212. package/package/script_helpers.js +16 -5
  213. package/package/scripts.js +11 -1
  214. package/package/utils.d.ts +1 -0
  215. package/package/utils.js +1 -0
  216. package/package.json +21 -12
@@ -1,25 +1,5 @@
1
1
  import { schemaToObject } from '../../schema';
2
- function getSubModules(flowModule) {
3
- if (flowModule.value.type === 'forloopflow') {
4
- return [flowModule.value.modules];
5
- }
6
- else if (flowModule.value.type === 'branchall') {
7
- return flowModule.value.branches.map((branch) => branch.modules);
8
- }
9
- else if (flowModule.value.type == 'branchone') {
10
- return [...flowModule.value.branches.map((branch) => branch.modules), flowModule.value.default];
11
- }
12
- return [];
13
- }
14
- function getAllSubmodules(flowModule) {
15
- return getSubModules(flowModule).map((modules) => {
16
- return modules
17
- .map((module) => {
18
- return [module, ...getAllSubmodules(module).flat()];
19
- })
20
- .flat();
21
- });
22
- }
2
+ import { getAllSubmodules, getSubModules } from './flowExplorer';
23
3
  function dfs(id, flow, getParents = true) {
24
4
  if (id === undefined) {
25
5
  return [];
@@ -72,52 +52,6 @@ function getFlowInput(parentModules, flowState, args, schema) {
72
52
  return schemaToObject(schema, args);
73
53
  }
74
54
  }
75
- export function getAllModules(flow) {
76
- let modules = [
77
- ...flow.value.modules,
78
- ...flow.value.modules.map((x) => getAllSubmodules(x).flat()),
79
- ...(flow.value.failure_module ? [flow.value.failure_module] : [])
80
- ].flat();
81
- return modules;
82
- }
83
- function getExpr(x) {
84
- if (x == undefined)
85
- return [];
86
- return x.type === 'javascript' ? [x.expr] : [];
87
- }
88
- function exprsOfInputTransforms(x) {
89
- return Object.values(x)
90
- .map((x) => getExpr(x))
91
- .flat();
92
- }
93
- export function getDependentComponents(id, flow) {
94
- let modules = getAllModules(flow);
95
- return Object.fromEntries(modules
96
- .map((x) => {
97
- let exprs = [];
98
- if (x.value.type === 'forloopflow') {
99
- exprs.push(...getExpr(x.value.iterator));
100
- }
101
- else if (x.value.type === 'branchone') {
102
- x.value.branches.map((branch) => {
103
- exprs.push(branch.expr);
104
- });
105
- }
106
- else if (x.value.type === 'flow' ||
107
- x.value.type === 'script' ||
108
- x.value.type == 'rawscript') {
109
- exprs.push(...exprsOfInputTransforms(x.value.input_transforms));
110
- exprs.push(...getExpr(x.sleep));
111
- if (x.stop_after_if?.expr) {
112
- exprs.push(x.stop_after_if.expr);
113
- }
114
- exprs.push(...getExpr(x.sleep));
115
- }
116
- exprs = exprs.filter((x) => x.includes(`results.${id}`));
117
- return [x.id, exprs];
118
- })
119
- .filter((x) => x[1].length > 0));
120
- }
121
55
  export function getStepPropPicker(flowState, parentModule, previousModule, id, flow, args, include_node) {
122
56
  const flowInput = getFlowInput(dfs(parentModule?.id, flow), flowState, args, flow.schema);
123
57
  const previousIds = dfs(id, flow, false)
@@ -7,6 +7,8 @@ import Svelvet from './svelvet/container/views/Svelvet.svelte';
7
7
  import MapItem from '../flows/map/MapItem.svelte';
8
8
  import VirtualItem from '../flows/map/VirtualItem.svelte';
9
9
  import { writable } from 'svelte/store';
10
+ import { getDependeeAndDependentComponents } from '../flows/flowExplorer';
11
+ import { deepEqual } from 'fast-equals';
10
12
  export let success = undefined;
11
13
  export let modules = [];
12
14
  export let failureModule = undefined;
@@ -29,16 +31,34 @@ let edges = [];
29
31
  let width, height;
30
32
  let fullWidth;
31
33
  let errorHandlers = {};
34
+ $: showDataflow =
35
+ $selectedId != undefined &&
36
+ !$selectedId.startsWith('constants') &&
37
+ !$selectedId.startsWith('settings') &&
38
+ $selectedId !== 'failure' &&
39
+ $selectedId !== 'Result';
40
+ let dataflow = false;
32
41
  let dispatch = createEventDispatcher();
33
42
  $: {
34
- rebuildOnChange;
43
+ dataflow;
35
44
  moving;
36
45
  width && height && minHeight && $selectedId && flowModuleStates;
37
- nodes = edges = [];
38
- errorHandlers = {};
39
46
  createGraph();
40
47
  }
48
+ $: rebuildOnChange && triggerRebuild();
49
+ let oldRebuildOnChange = rebuildOnChange ? JSON.parse(JSON.stringify(rebuildOnChange)) : undefined;
50
+ function triggerRebuild() {
51
+ if (!deepEqual(oldRebuildOnChange, rebuildOnChange)) {
52
+ oldRebuildOnChange = JSON.parse(JSON.stringify(rebuildOnChange));
53
+ createGraph();
54
+ }
55
+ }
41
56
  async function createGraph() {
57
+ // console.log(JSON.stringify(modules))
58
+ // return
59
+ nodes = [];
60
+ edges = [];
61
+ errorHandlers = {};
42
62
  if (modules) {
43
63
  idGenerator = createIdGenerator();
44
64
  }
@@ -47,12 +67,12 @@ async function createGraph() {
47
67
  return;
48
68
  }
49
69
  nestedNodes = nodes = [];
50
- nestedNodes.push(createVirtualNode(getParentIds(), 'Input', modules, 'after', undefined, undefined, 0, 0, true, undefined));
70
+ nestedNodes.push(createVirtualNode(getParentIds(), 'Input', modules, 'after', undefined, undefined, 0, 0, true, undefined, undefined, 'Input'));
51
71
  modules.forEach((m, i) => {
52
72
  const item = getConvertedFlowModule(m, undefined, undefined, 0, i + 1 == modules?.length, modules);
53
73
  item && nestedNodes.push(item);
54
74
  });
55
- nestedNodes.push(createVirtualNode(getParentIds(), 'Result', undefined, 'before', undefined, undefined, 0, modules.length, true, undefined));
75
+ nestedNodes.push(createVirtualNode(getParentIds(), 'Result', undefined, 'before', undefined, undefined, 0, modules.length, true, undefined, undefined, undefined));
56
76
  if (!flowModuleStates) {
57
77
  if (failureModule)
58
78
  nestedNodes.push(createErrorHandler(failureModule));
@@ -70,7 +90,43 @@ async function createGraph() {
70
90
  let hfull = Math.max(layered.height, minHeight);
71
91
  fullWidth = layered.width;
72
92
  height = fullSize ? hfull : Math.min(hfull, maxHeight ?? window.innerHeight - 100);
73
- edges = createEdges(nodes);
93
+ let useDataflow = dataflow && showDataflow;
94
+ edges = useDataflow ? [] : createEdges(nodes);
95
+ if (useDataflow && $selectedId) {
96
+ let deps = getDependeeAndDependentComponents($selectedId, modules ?? [], failureModule);
97
+ if (deps) {
98
+ Object.entries(deps.dependees).forEach((x, i) => {
99
+ let pid = x[0];
100
+ edges.push({
101
+ id: `dep-${pid}-${$selectedId}`,
102
+ source: pid,
103
+ target: $selectedId,
104
+ labelBgColor: 'white',
105
+ arrow: false,
106
+ animate: true,
107
+ noHandle: true,
108
+ label: pid,
109
+ type: 'bezier',
110
+ offset: i * 20
111
+ });
112
+ });
113
+ Object.entries(deps.dependents).forEach((x, i) => {
114
+ let pid = x[0];
115
+ edges.push({
116
+ id: `dep-${pid}-${$selectedId}`,
117
+ source: $selectedId,
118
+ target: pid,
119
+ labelBgColor: 'white',
120
+ arrow: false,
121
+ animate: true,
122
+ noHandle: true,
123
+ label: pid,
124
+ type: 'bezier',
125
+ offset: i * 10
126
+ });
127
+ });
128
+ }
129
+ }
74
130
  }
75
131
  function getConvertedFlowModule(module, parent, edgeLabel, loopDepth, insertableEnd, modules) {
76
132
  const type = module.value.type;
@@ -207,12 +263,12 @@ function flowModuleToLoop(modules, module, parent, loopDepth) {
207
263
  ]
208
264
  };
209
265
  const innerModules = module.value.modules;
210
- loop.items.push(createVirtualNode(getParentIds(loop.items), `Do one iteration`, innerModules, 'after', undefined, 1000, loopDepth + 1, 0, true, undefined, undefined));
266
+ loop.items.push(createVirtualNode(getParentIds(loop.items), `Do one iteration`, innerModules, 'after', undefined, 1000, loopDepth + 1, 0, true, undefined, undefined, undefined));
211
267
  innerModules.forEach((module, i) => {
212
268
  const item = getConvertedFlowModule(module, loop.items, undefined, loopDepth + 1, i + 1 == innerModules?.length, innerModules);
213
269
  item && loop.items.push(item);
214
270
  });
215
- loop.items.push(createVirtualNode(getParentIds(loop.items), `Collect result of each iteration`, modules, 'after', undefined, 1000, loopDepth, modules.findIndex((m) => m.id == module.id) + 1, true, undefined, module.id));
271
+ loop.items.push(createVirtualNode(getParentIds(loop.items), `Collect result of each iteration`, modules, 'after', undefined, 1000, loopDepth, modules.findIndex((m) => m.id == module.id) + 1, true, undefined, module.id, undefined));
216
272
  return loop;
217
273
  }
218
274
  function flowModuleToBranch(module, modules, branches, edgesLabel, parent = undefined, loopDepth, branchall) {
@@ -221,12 +277,12 @@ function flowModuleToBranch(module, modules, branches, edgesLabel, parent = unde
221
277
  const branchParent = [node.id];
222
278
  if (branches.length == 0) {
223
279
  bitems.push([
224
- createVirtualNode(branchParent, 'No branches', undefined, 'after', undefined, 0, loopDepth, 0, false, undefined)
280
+ createVirtualNode(branchParent, 'No branches', undefined, 'after', undefined, 0, loopDepth, 0, false, undefined, undefined, undefined)
225
281
  ]);
226
282
  }
227
283
  branches.forEach(({ summary, modules, removable }, i) => {
228
284
  const items = [];
229
- items.push(createVirtualNode(branchParent, summary, modules, 'after', edgesLabel[i], undefined, loopDepth, 0, false, removable ? { module, index: i } : undefined));
285
+ items.push(createVirtualNode(branchParent, summary, modules, 'after', edgesLabel[i], undefined, loopDepth, 0, false, removable ? { module, index: i } : undefined, undefined, undefined));
230
286
  if (modules.length) {
231
287
  modules.forEach((module, j) => {
232
288
  const item = getConvertedFlowModule(module, items, undefined, loopDepth, j + 1 == modules?.length, modules);
@@ -238,7 +294,7 @@ function flowModuleToBranch(module, modules, branches, edgesLabel, parent = unde
238
294
  return {
239
295
  type: 'branch',
240
296
  node,
241
- nodeEnd: createVirtualNode(bitems.map((i) => getParentIds(i)).flat(), branchall ? 'Collect result of each branch' : 'Result of the chosen branch', modules, 'after', undefined, 0, loopDepth, modules.findIndex((m) => m.id == module.id) + 1, true, undefined, module.id),
297
+ nodeEnd: createVirtualNode(bitems.map((i) => getParentIds(i)).flat(), branchall ? 'Collect result of each branch' : 'Result of the chosen branch', modules, 'after', undefined, 0, loopDepth, modules.findIndex((m) => m.id == module.id) + 1, true, undefined, module.id, undefined),
242
298
  items: bitems
243
299
  };
244
300
  }
@@ -347,8 +403,8 @@ function createEdges(nodes) {
347
403
  });
348
404
  return edges;
349
405
  }
350
- function createVirtualNode(parentIds, label, modules, whereInsert, edgeLabel, offset, loopDepth, index, selectable, deleteBranch, mid = undefined) {
351
- const id = -idGenerator.next().value - 2 + (offset ?? 0);
406
+ function createVirtualNode(parentIds, label, modules, whereInsert, edgeLabel, offset, loopDepth, index, selectable, deleteBranch, mid, fixed_id) {
407
+ const id = fixed_id ?? -idGenerator.next().value - 2 + (offset ?? 0);
352
408
  return {
353
409
  type: 'node',
354
410
  id: id.toString(),
@@ -448,11 +504,13 @@ function createErrorHandler(mod, parent_module) {
448
504
  {download}
449
505
  highlightEdges={false}
450
506
  locked
507
+ bind:dataflow
451
508
  {nodes}
452
509
  width={fullSize ? fullWidth : width}
453
510
  {edges}
454
511
  {height}
455
512
  {scroll}
513
+ nodeSelected={showDataflow}
456
514
  background={false}
457
515
  bgColor="rgb(249 250 251)"
458
516
  />
@@ -9,13 +9,16 @@ import { determineD3Instance } from '../..//d3/controllers/d3';
9
9
  import { findStore } from '../../store/controllers/storeApi';
10
10
  import { onDestroy } from 'svelte';
11
11
  import { Expand, Minus, Plus } from 'lucide-svelte';
12
+ import Toggle from '../../../../Toggle.svelte';
12
13
  //these are typscripted as any, however they have been transformed inside of store.ts
13
14
  export let canvasId;
14
15
  export let width;
15
16
  export let height;
16
17
  export let boundary = false;
17
18
  export let scroll = false;
19
+ export let dataflow = false;
18
20
  export let download = false;
21
+ export let showDataflowToggle = false;
19
22
  // here we lookup the store using the unique key
20
23
  const store = findStore(canvasId);
21
24
  const { edgesStore, nodesStore, nodeSelected, backgroundStore, movementStore, widthStore, heightStore, d3Scale } = store;
@@ -161,6 +164,19 @@ function handleZoom(e) {
161
164
  </g>
162
165
  </svg>
163
166
  </div>
167
+ {#if showDataflowToggle}
168
+ <div id="dataflow_toggle">
169
+ <Toggle
170
+ textClass="!text-gray-600"
171
+ size="xs"
172
+ bind:checked={dataflow}
173
+ options={{
174
+ right: 'dataflow'
175
+ }}
176
+ />
177
+ </div>
178
+ {/if}
179
+
164
180
  <div id="buttons">
165
181
  <button title="Zoom In" id="zoom_in">
166
182
  <Plus size="14" class="flex justify-start m-1" />
@@ -168,6 +184,7 @@ function handleZoom(e) {
168
184
  <button title="Zoom Out" id="zoom_out">
169
185
  <Minus size="14" class="flex justify-start m-1" />
170
186
  </button>
187
+
171
188
  {#if download}
172
189
  <button on:click={() => dispatch('expand')}>
173
190
  <Expand size="14" class="flex justify-start m-1" />
@@ -176,6 +193,11 @@ function handleZoom(e) {
176
193
  </div>
177
194
 
178
195
  <style>
196
+ #dataflow_toggle {
197
+ position: absolute;
198
+ top: 3px;
199
+ left: 8px;
200
+ }
179
201
  #buttons {
180
202
  position: absolute;
181
203
  top: 8px;
@@ -6,7 +6,9 @@ declare const __propDef: {
6
6
  height: number;
7
7
  boundary?: boolean | undefined;
8
8
  scroll?: boolean | undefined;
9
+ dataflow?: boolean | undefined;
9
10
  download?: boolean | undefined;
11
+ showDataflowToggle?: boolean | undefined;
10
12
  };
11
13
  events: {
12
14
  contextmenu: MouseEvent;
@@ -23,6 +23,8 @@ export let editable = false;
23
23
  export let highlightEdges = true;
24
24
  export let scroll = false;
25
25
  export let download = false;
26
+ export let dataflow = false;
27
+ export let nodeSelected = false;
26
28
  const fullHeight = settings?.fullHeight ?? false;
27
29
  // generates a unique string for each svelvet component's unique store instance
28
30
  // creates a store that uses the unique sting as the key to create and look up the corresponding store
@@ -108,7 +110,17 @@ afterUpdate(() => {
108
110
  {#if error != ''}
109
111
  <div class="error text-red-600 center-center p-4">{error}</div>
110
112
  {:else}
111
- <GraphView on:expand {download} {scroll} {canvasId} {width} {height} {boundary} />
113
+ <GraphView
114
+ showDataflowToggle={nodeSelected}
115
+ bind:dataflow
116
+ on:expand
117
+ {download}
118
+ {scroll}
119
+ {canvasId}
120
+ {width}
121
+ {height}
122
+ {boundary}
123
+ />
112
124
  {/if}
113
125
  </div>
114
126
 
@@ -20,6 +20,8 @@ declare const __propDef: {
20
20
  highlightEdges?: boolean | undefined;
21
21
  scroll?: boolean | undefined;
22
22
  download?: boolean | undefined;
23
+ dataflow?: boolean | undefined;
24
+ nodeSelected?: boolean | undefined;
23
25
  };
24
26
  events: {
25
27
  expand: CustomEvent<any>;
@@ -34,7 +34,8 @@ export declare class Edge implements EdgeType {
34
34
  arrow: boolean;
35
35
  clickCallback: Function;
36
36
  className: string;
37
- constructor(id: string, sourceX: number, sourceY: number, targetX: number, targetY: number, canvasId: string, label: string, type: 'straight' | 'smoothstep' | 'step' | 'bezier', labelBgColor: string, labelTextColor: string, edgeColor: string, animate: boolean, noHandle: boolean, arrow: boolean, clickCallback: Function, className: string);
37
+ offset?: number | undefined;
38
+ constructor(id: string, sourceX: number, sourceY: number, targetX: number, targetY: number, canvasId: string, label: string, type: 'straight' | 'smoothstep' | 'step' | 'bezier', labelBgColor: string, labelTextColor: string, edgeColor: string, animate: boolean, noHandle: boolean, arrow: boolean, clickCallback: Function, className: string, offset?: number | undefined);
38
39
  /**
39
40
  * delete is going to delete the Edge and also delete associated Anchors
40
41
  */
@@ -35,7 +35,8 @@ export class Edge {
35
35
  arrow;
36
36
  clickCallback;
37
37
  className;
38
- constructor(id, sourceX, sourceY, targetX, targetY, canvasId, label, type, labelBgColor, labelTextColor, edgeColor, animate, noHandle, arrow, clickCallback, className) {
38
+ offset;
39
+ constructor(id, sourceX, sourceY, targetX, targetY, canvasId, label, type, labelBgColor, labelTextColor, edgeColor, animate, noHandle, arrow, clickCallback, className, offset) {
39
40
  this.id = id;
40
41
  this.sourceX = sourceX;
41
42
  this.sourceY = sourceY;
@@ -52,6 +53,7 @@ export class Edge {
52
53
  this.arrow = arrow;
53
54
  this.clickCallback = clickCallback;
54
55
  this.className = className;
56
+ this.offset = offset;
55
57
  }
56
58
  /**
57
59
  * delete is going to delete the Edge and also delete associated Anchors
@@ -1,15 +1,4 @@
1
1
  <script>import BaseEdge from './BaseEdge.svelte';
2
- // import { Position } from '../types/utils';
3
- // // enumerable values (static) set for Position
4
- // export var Position;
5
- // (function (Position) {
6
- // Position["Left"] = "left";
7
- // Position["Right"] = "right";
8
- // Position["Top"] = "top";
9
- // Position["Bottom"] = "bottom";
10
- // })(Position || (Position = {}));
11
- // //
12
- // // export type CoordinateExtent = [[number, number], [number, number]];
13
2
  const Position = { Left: 'left', Right: 'right', Top: 'top', Bottom: 'bottom' };
14
3
  import { findStore } from '../../../store/controllers/storeApi';
15
4
  import { getAnchorFromEdge } from '../../../edges/controllers/util';
@@ -112,10 +101,10 @@ $: {
112
101
  const targetAnchor = getAnchorFromEdge(store, edge.id, 'target');
113
102
  const mapAngle = { 0: 'right', 90: 'top', 180: 'left', 270: 'bottom' };
114
103
  params = {
115
- sourceX: edge.sourceX,
104
+ sourceX: edge.sourceX + (edge.offset ?? 0),
116
105
  sourceY: edge.sourceY,
117
106
  sourcePosition: mapAngle[sourceAnchor.angle],
118
- targetX: edge.targetX,
107
+ targetX: edge.targetX + (edge.offset ?? 0),
119
108
  targetY: edge.targetY,
120
109
  targetPosition: mapAngle[targetAnchor.angle],
121
110
  curvature: 0.25
@@ -73,7 +73,7 @@ export function populateEdgesStore(store, edges, canvasId) {
73
73
  sourceAnchor = anchors[1];
74
74
  targetAnchor = anchors[0];
75
75
  }
76
- edgesStore[edgeId] = new Edge(edgeId, sourceAnchor.positionX, sourceAnchor.positionY, targetAnchor.positionX, targetAnchor.positionY, canvasId, userEdge.label === undefined ? '' : userEdge.label, userEdge.type === undefined ? 'bezier' : userEdge.type, userEdge.labelBgColor === undefined ? 'white' : userEdge.labelBgColor, userEdge.labelTextColor === undefined ? 'black' : userEdge.labelTextColor, userEdge.edgeColor === undefined ? 'black' : userEdge.edgeColor, userEdge.animate === undefined ? false : userEdge.animate, userEdge.noHandle === undefined ? false : userEdge.noHandle, userEdge.arrow === undefined ? false : userEdge.arrow, userEdge.clickCallback === undefined ? () => { } : userEdge.clickCallback, userEdge.className === undefined ? '' : userEdge.className);
76
+ edgesStore[edgeId] = new Edge(edgeId, sourceAnchor.positionX, sourceAnchor.positionY, targetAnchor.positionX, targetAnchor.positionY, canvasId, userEdge.label === undefined ? '' : userEdge.label, userEdge.type === undefined ? 'bezier' : userEdge.type, userEdge.labelBgColor === undefined ? 'white' : userEdge.labelBgColor, userEdge.labelTextColor === undefined ? 'black' : userEdge.labelTextColor, userEdge.edgeColor === undefined ? 'black' : userEdge.edgeColor, userEdge.animate === undefined ? false : userEdge.animate, userEdge.noHandle === undefined ? false : userEdge.noHandle, userEdge.arrow === undefined ? false : userEdge.arrow, userEdge.clickCallback === undefined ? () => { } : userEdge.clickCallback, userEdge.className === undefined ? '' : userEdge.className, userEdge.offset);
77
77
  }
78
78
  store.edgesStore.set(edgesStore);
79
79
  }
@@ -43,6 +43,7 @@ export interface UserEdgeType {
43
43
  arrow?: boolean;
44
44
  clickCallback?: Function;
45
45
  className?: string;
46
+ offset?: number;
46
47
  }
47
48
  export declare function getD3PositionX(canvasId: string): number;
48
49
  export declare function getD3PositionY(canvasId: string): number;
@@ -22,6 +22,7 @@ import RawAppRow from '../common/table/RawAppRow.svelte';
22
22
  import { canWrite } from '../../utils';
23
23
  import { page } from '$app/stores';
24
24
  import { setQuery } from '../../navigation';
25
+ import DeployWorkspaceDrawer from '../DeployWorkspaceDrawer.svelte';
25
26
  let scripts;
26
27
  let flows;
27
28
  let apps;
@@ -30,6 +31,7 @@ let filteredItems = [];
30
31
  let itemKind = $page.url.searchParams.get('kind') ?? 'all';
31
32
  let shareModal;
32
33
  let moveDrawer;
34
+ let deploymentDrawer;
33
35
  let loading = true;
34
36
  let nbDisplayed = 30;
35
37
  export let deleteConfirmedCallback = undefined;
@@ -194,6 +196,7 @@ let archived = false;
194
196
  }}
195
197
  />
196
198
 
199
+ <DeployWorkspaceDrawer bind:this={deploymentDrawer} />
197
200
  <MoveDrawer
198
201
  bind:this={moveDrawer}
199
202
  on:update={() => {
@@ -291,47 +294,53 @@ let archived = false;
291
294
  {#each (items ?? []).slice(0, nbDisplayed) as item (item.type + '/' + item.path)}
292
295
  {#key item.summary}
293
296
  {#key item.starred}
294
- {#if item.type == 'script'}
295
- <ScriptRow
296
- bind:deleteConfirmedCallback
297
- starred={item.starred ?? false}
298
- marked={item.marked}
299
- on:change={loadScripts}
300
- script={item}
301
- {shareModal}
302
- {moveDrawer}
303
- />
304
- {:else if item.type == 'flow'}
305
- <FlowRow
306
- bind:deleteConfirmedCallback
307
- starred={item.starred ?? false}
308
- marked={item.marked}
309
- on:change={loadFlows}
310
- flow={item}
311
- {shareModal}
312
- {moveDrawer}
313
- />
314
- {:else if item.type == 'app'}
315
- <AppRow
316
- bind:deleteConfirmedCallback
317
- starred={item.starred ?? false}
318
- marked={item.marked}
319
- on:change={loadApps}
320
- app={item}
321
- {moveDrawer}
322
- {shareModal}
323
- />
324
- {:else if item.type == 'raw_app'}
325
- <RawAppRow
326
- bind:deleteConfirmedCallback
327
- starred={item.starred ?? false}
328
- marked={item.marked}
329
- on:change={loadRawApps}
330
- app={item}
331
- {moveDrawer}
332
- {shareModal}
333
- />
334
- {/if}
297
+ {#key item.has_draft}
298
+ {#if item.type == 'script'}
299
+ <ScriptRow
300
+ bind:deleteConfirmedCallback
301
+ starred={item.starred ?? false}
302
+ marked={item.marked}
303
+ on:change={loadScripts}
304
+ script={item}
305
+ {shareModal}
306
+ {moveDrawer}
307
+ {deploymentDrawer}
308
+ />
309
+ {:else if item.type == 'flow'}
310
+ <FlowRow
311
+ bind:deleteConfirmedCallback
312
+ starred={item.starred ?? false}
313
+ marked={item.marked}
314
+ on:change={loadFlows}
315
+ flow={item}
316
+ {shareModal}
317
+ {moveDrawer}
318
+ {deploymentDrawer}
319
+ />
320
+ {:else if item.type == 'app'}
321
+ <AppRow
322
+ bind:deleteConfirmedCallback
323
+ starred={item.starred ?? false}
324
+ marked={item.marked}
325
+ on:change={loadApps}
326
+ app={item}
327
+ {moveDrawer}
328
+ {shareModal}
329
+ {deploymentDrawer}
330
+ />
331
+ {:else if item.type == 'raw_app'}
332
+ <RawAppRow
333
+ bind:deleteConfirmedCallback
334
+ starred={item.starred ?? false}
335
+ marked={item.marked}
336
+ on:change={loadRawApps}
337
+ app={item}
338
+ {moveDrawer}
339
+ {shareModal}
340
+ {deploymentDrawer}
341
+ />
342
+ {/if}
343
+ {/key}
335
344
  {/key}
336
345
  {/key}
337
346
  {/each}
@@ -28,7 +28,6 @@ onDestroy(() => {
28
28
  });
29
29
  loadFilterFromUrl();
30
30
  function loadFilterFromUrl() {
31
- console.log('LOAD');
32
31
  let queryValue = new URL(window.location.href).searchParams.get(queryName) ?? undefined;
33
32
  selectedFilter = queryValue;
34
33
  }
@@ -98,7 +98,7 @@ function endedDate(started_at, duration_ms) {
98
98
  </div>
99
99
 
100
100
  <div class="flex flex-row space-x-2">
101
- <JobPreview {job}>
101
+ <JobPreview id={job.id}>
102
102
  <div class="whitespace-nowrap">
103
103
  {#if job.script_path}
104
104
  <a href="/run/{job.id}?workspace={job.workspace_id}">{job.script_path} </a>
@@ -9,29 +9,29 @@ import DisplayResult from '../DisplayResult.svelte';
9
9
  import JobArgs from '../JobArgs.svelte';
10
10
  import { writable } from 'svelte/store';
11
11
  import LogViewer from '../LogViewer.svelte';
12
- import { forLater } from '../../utils';
13
- const POPUP_HEIGHT = 240;
14
- export let job;
12
+ import { forLater, msToSec } from '../../utils';
13
+ import { Icon } from 'svelte-awesome';
14
+ import { faHourglassHalf } from '@fortawesome/free-solid-svg-icons';
15
+ import { Badge } from '../common';
16
+ const POPUP_HEIGHT = 320;
17
+ export let id;
18
+ let job = undefined;
15
19
  let hovered = false;
16
20
  let timeout;
17
21
  let watchJob;
18
- let args = job?.args;
19
22
  let result;
20
23
  let loaded = false;
21
24
  let wrapper;
22
25
  let popupOnTop = true;
23
- $: open = $openStore === job?.id;
26
+ $: open = $openStore === id;
24
27
  async function instantOpen() {
25
28
  if (!open) {
26
29
  hovered = true;
27
- if (!job) {
28
- return;
29
- }
30
30
  popupOnTop = wrapper.getBoundingClientRect().top > POPUP_HEIGHT;
31
- openStore.set(job.id);
31
+ openStore.set(id);
32
32
  if (!loaded) {
33
33
  await tick();
34
- watchJob && watchJob(job.id);
34
+ watchJob && watchJob(id);
35
35
  }
36
36
  }
37
37
  else {
@@ -87,8 +87,18 @@ onDestroy(() => {
87
87
  border border-gray-300 shadow-xl flex justify-start items-start w-[600px] h-80
88
88
  overflow-hidden"
89
89
  >
90
- <div class="w-1/2 h-full overflow-auto px-2">
91
- <JobArgs {args} tableClass="!pt-0 !min-w-0 !block" />
90
+ <div class="absolute bottom-0 right-1 flex justify-end gap-2 pb-0.5">
91
+ <Badge>
92
+ Mem: {job?.['mem_peak'] ? `${(job['mem_peak'] / 1024).toPrecision(4)}MB` : 'N/A'}
93
+ </Badge>
94
+ <Badge>
95
+ <Icon class="text-gray-700" data={faHourglassHalf} scale={0.5} /><span class="mx-2">
96
+ Ran in {msToSec(job?.['duration_ms'])}s</span
97
+ >
98
+ </Badge>
99
+ </div>
100
+ <div class="w-1/2 h-full overflow-auto px-2 -mt-3">
101
+ <JobArgs args={job?.args} tableClass="!pt-0 !min-w-0 !block" />
92
102
  </div>
93
103
  <div class="w-1/2 h-full overflow-auto p-2">
94
104
  {#if job && 'scheduled_for' in job && !job.running && job.scheduled_for && forLater(job.scheduled_for)}
@@ -101,7 +111,13 @@ onDestroy(() => {
101
111
  <DisplayResult {result} disableExpand />
102
112
  {:else if job && `running` in job ? job.running : false}
103
113
  <div class="text-sm font-semibold text-gray-600 mb-1"> Job is still running </div>
104
- <LogViewer content={job?.logs} isLoading />
114
+ <LogViewer
115
+ jobId={job?.id}
116
+ duration={job?.['duration_ms']}
117
+ mem={job?.['mem_peak']}
118
+ content={job?.logs}
119
+ isLoading
120
+ />
105
121
  {/if}
106
122
  </div>
107
123
  </div>
@@ -1,9 +1,8 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
2
  export declare const openStore: import("svelte/store").Writable<string>;
3
- import { Job } from '../../gen';
4
3
  declare const __propDef: {
5
4
  props: {
6
- job: Job | undefined;
5
+ id: string;
7
6
  };
8
7
  events: {
9
8
  [evt: string]: CustomEvent<any>;