windmill-components 1.379.4 → 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 (173) 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/runs/RunsFilter.svelte +15 -17
  98. package/package/gen/core/OpenAPI.js +1 -1
  99. package/package/gen/schemas.gen.d.ts +3 -0
  100. package/package/gen/schemas.gen.js +3 -0
  101. package/package/gen/services.gen.d.ts +22 -3
  102. package/package/gen/services.gen.js +38 -2
  103. package/package/gen/types.gen.d.ts +69 -6
  104. package/package/hub.d.ts +11 -0
  105. package/package/hub.js +2 -0
  106. package/package/hubPaths.json +9 -0
  107. package/package/init_scripts/python_failure_module.d.ts +1 -1
  108. package/package/init_scripts/python_failure_module.js +4 -3
  109. package/package/script_helpers.d.ts +2 -2
  110. package/package/script_helpers.js +11 -9
  111. package/package.json +2 -1
  112. package/package/components/graph/FlowGraph.svelte +0 -614
  113. package/package/components/graph/svelvet/LICENSE +0 -21
  114. package/package/components/graph/svelvet/container/README.md +0 -7
  115. package/package/components/graph/svelvet/container/controllers/middleware.d.ts +0 -11
  116. package/package/components/graph/svelvet/container/controllers/middleware.js +0 -87
  117. package/package/components/graph/svelvet/container/models/index.d.ts +0 -0
  118. package/package/components/graph/svelvet/container/models/index.js +0 -1
  119. package/package/components/graph/svelvet/container/views/GraphView.svelte +0 -262
  120. package/package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +0 -26
  121. package/package/components/graph/svelvet/container/views/Svelvet.svelte +0 -121
  122. package/package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +0 -36
  123. package/package/components/graph/svelvet/customCss/controllers/getCss.d.ts +0 -2
  124. package/package/components/graph/svelvet/customCss/controllers/getCss.js +0 -46
  125. package/package/components/graph/svelvet/d3/controllers/d3.d.ts +0 -5
  126. package/package/components/graph/svelvet/d3/controllers/d3.js +0 -59
  127. package/package/components/graph/svelvet/edges/controllers/anchorCbDev.d.ts +0 -4
  128. package/package/components/graph/svelvet/edges/controllers/anchorCbDev.js +0 -92
  129. package/package/components/graph/svelvet/edges/controllers/anchorCbUser.d.ts +0 -57
  130. package/package/components/graph/svelvet/edges/controllers/anchorCbUser.js +0 -73
  131. package/package/components/graph/svelvet/edges/controllers/util.d.ts +0 -37
  132. package/package/components/graph/svelvet/edges/controllers/util.js +0 -71
  133. package/package/components/graph/svelvet/edges/models/Anchor.d.ts +0 -48
  134. package/package/components/graph/svelvet/edges/models/Anchor.js +0 -122
  135. package/package/components/graph/svelvet/edges/models/Edge.d.ts +0 -48
  136. package/package/components/graph/svelvet/edges/models/Edge.js +0 -109
  137. package/package/components/graph/svelvet/edges/types/types.d.ts +0 -18
  138. package/package/components/graph/svelvet/edges/types/types.js +0 -1
  139. package/package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte +0 -104
  140. package/package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte.d.ts +0 -18
  141. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +0 -42
  142. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte.d.ts +0 -17
  143. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +0 -151
  144. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte.d.ts +0 -17
  145. package/package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte +0 -157
  146. package/package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte.d.ts +0 -60
  147. package/package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte +0 -8
  148. package/package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte.d.ts +0 -25
  149. package/package/components/graph/svelvet/edges/views/Edges/types.d.ts +0 -52
  150. package/package/components/graph/svelvet/edges/views/Edges/types.js +0 -1
  151. package/package/components/graph/svelvet/edges/views/Edges/utils.d.ts +0 -33
  152. package/package/components/graph/svelvet/edges/views/Edges/utils.js +0 -31
  153. package/package/components/graph/svelvet/nodes/controllers/util.d.ts +0 -9
  154. package/package/components/graph/svelvet/nodes/controllers/util.js +0 -13
  155. package/package/components/graph/svelvet/nodes/models/Node.d.ts +0 -74
  156. package/package/components/graph/svelvet/nodes/models/Node.js +0 -156
  157. package/package/components/graph/svelvet/nodes/views/Node.svelte +0 -84
  158. package/package/components/graph/svelvet/nodes/views/Node.svelte.d.ts +0 -21
  159. package/package/components/graph/svelvet/store/controllers/storeApi.d.ts +0 -25
  160. package/package/components/graph/svelvet/store/controllers/storeApi.js +0 -91
  161. package/package/components/graph/svelvet/store/controllers/userApi.d.ts +0 -3
  162. package/package/components/graph/svelvet/store/controllers/userApi.js +0 -18
  163. package/package/components/graph/svelvet/store/controllers/util.d.ts +0 -24
  164. package/package/components/graph/svelvet/store/controllers/util.js +0 -148
  165. package/package/components/graph/svelvet/store/models/store.d.ts +0 -13
  166. package/package/components/graph/svelvet/store/models/store.js +0 -12
  167. package/package/components/graph/svelvet/store/types/types.d.ts +0 -127
  168. package/package/components/graph/svelvet/store/types/types.js +0 -1
  169. package/package/components/graph/svelvet/types/README.md +0 -3
  170. package/package/components/graph/svelvet/types/index.d.ts +0 -2
  171. package/package/components/graph/svelvet/types/index.js +0 -1
  172. package/package/components/graph/svelvet/types/types.d.ts +0 -50
  173. package/package/components/graph/svelvet/types/types.js +0 -18
@@ -7,13 +7,16 @@ import { Skeleton } from './common';
7
7
  import FlowModuleScript from './flows/content/FlowModuleScript.svelte';
8
8
  import { createEventDispatcher } from 'svelte';
9
9
  import Button from './common/button/Button.svelte';
10
- import { ExternalLink, Pencil, ArrowRight, X } from 'lucide-svelte';
10
+ import { ExternalLink, Pencil, ArrowRight, X, Diff, Code } from 'lucide-svelte';
11
+ import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
12
+ import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
11
13
  const dispatch = createEventDispatcher();
12
14
  export let openDetails = false;
13
15
  export let scriptPath;
14
16
  let deploymentMsgUpdateMode = false;
15
17
  let deploymentMsgUpdate = undefined;
16
18
  let selectedVersion = undefined;
19
+ let selectedVersionIndex = undefined;
17
20
  let versions = undefined;
18
21
  let loading = false;
19
22
  async function loadVersions() {
@@ -43,6 +46,8 @@ async function updateDeploymentMsg(scriptHash) {
43
46
  loadVersions();
44
47
  }
45
48
  loadVersions();
49
+ let showDiff = false;
50
+ let previousHash = undefined;
46
51
  </script>
47
52
 
48
53
  <Splitpanes class="!overflow-visible">
@@ -52,17 +57,34 @@ loadVersions();
52
57
  {#if !loading}
53
58
  {#if versions && versions.length > 0}
54
59
  <div class="flex gap-2 flex-col">
55
- {#each versions ?? [] as version}
60
+ {#each versions ?? [] as version, versionIndex}
56
61
  <!-- svelte-ignore a11y-click-events-have-key-events -->
62
+ <!-- svelte-ignore a11y-no-static-element-interactions -->
57
63
  <div
58
64
  class={classNames(
59
- 'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-md cursor-pointer hover:bg-blue-50 hover:text-blue-400',
65
+ 'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-md cursor-pointer ',
60
66
  selectedVersion?.script_hash == version.script_hash
61
- ? 'bg-blue-100 text-blue-600'
62
- : ''
67
+ ? 'bg-surface-selected'
68
+ : '',
69
+ 'hover:bg-surface-hover'
63
70
  )}
64
71
  on:click={() => {
65
72
  selectedVersion = version
73
+ selectedVersionIndex = versionIndex
74
+
75
+ if (showDiff && versions && selectedVersionIndex === versions.length - 1) {
76
+ showDiff = false
77
+ }
78
+
79
+ const availableVersions = versions?.slice(selectedVersionIndex + 1)
80
+
81
+ if (
82
+ previousHash &&
83
+ !availableVersions?.find((v) => v.script_hash === previousHash)
84
+ ) {
85
+ previousHash = availableVersions?.[0]?.script_hash
86
+ }
87
+
66
88
  deploymentMsgUpdate = undefined
67
89
  deploymentMsgUpdateMode = false
68
90
  }}
@@ -99,7 +121,7 @@ loadVersions();
99
121
  <div class="h-full w-full overflow-auto">
100
122
  {#if selectedVersion}
101
123
  {#key selectedVersion}
102
- <div class="flex flex-col">
124
+ <div class="flex flex-col min-h-full">
103
125
  <span class="flex flex-row text-sm p-2 text-tertiary">
104
126
  {#if deploymentMsgUpdateMode}
105
127
  <div class="flex w-full">
@@ -158,7 +180,41 @@ loadVersions();
158
180
  </button>
159
181
  {/if}
160
182
  </span>
161
- <FlowModuleScript showDate path={scriptPath} hash={selectedVersion.script_hash} />
183
+
184
+ {#if selectedVersionIndex !== undefined && versions?.slice(selectedVersionIndex + 1).length}
185
+ <div class="p-2 flex flex-row items-center gap-2 h-8">
186
+ <div class="w-min">
187
+ <ToggleButtonGroup bind:selected={showDiff}>
188
+ <ToggleButton light small value={false} label="Code" icon={Code} />
189
+ <ToggleButton light small value={true} label="Diff" icon={Diff} />
190
+ </ToggleButtonGroup>
191
+ </div>
192
+
193
+ {#if showDiff}
194
+ <div class="text-xs">Versions:</div>
195
+ <select bind:value={previousHash} class="!text-xs !w-40">
196
+ {#each versions?.slice(selectedVersionIndex + 1) ?? [] as version}
197
+ <option
198
+ value={version.script_hash}
199
+ selected={version.script_hash === selectedVersion.script_hash}
200
+ class="!text-xs"
201
+ >
202
+ {version.deployment_msg ?? version.script_hash}
203
+ </option>
204
+ {/each}
205
+ </select>
206
+ {/if}
207
+ </div>
208
+ {:else}
209
+ <div class="p-2 text-xs text-secondary"> No previous version found </div>
210
+ {/if}
211
+ <FlowModuleScript
212
+ showDate
213
+ path={scriptPath}
214
+ hash={selectedVersion.script_hash}
215
+ {previousHash}
216
+ {showDiff}
217
+ />
162
218
  </div>
163
219
  {/key}
164
220
  {:else}
@@ -25,10 +25,11 @@ let renderCountLast = -1;
25
25
  let quicksearchLast = undefined;
26
26
  let localColumnDefs = columnDefs;
27
27
  let lastTable = table;
28
- $: {
28
+ $: lastTable != undefined && table && onTableChange();
29
+ function onTableChange() {
29
30
  if (table !== lastTable) {
30
- localColumnDefs = [];
31
31
  lastTable = table;
32
+ localColumnDefs = [];
32
33
  }
33
34
  }
34
35
  $: table && renderCount != undefined && quicksearch != undefined && computeCount();
@@ -95,20 +95,21 @@ const tableActionsFactory = cellRendererFactory((c, p) => {
95
95
  ['AppViewerContext', context],
96
96
  ['ContextPanel', contextPanel]
97
97
  ]);
98
- new AppAggridTableActions({
98
+ const ta = new AppAggridTableActions({
99
99
  target: c.eGui,
100
100
  props: {
101
+ p,
101
102
  id: id,
102
103
  actions,
103
104
  rowIndex,
104
105
  row,
105
106
  render: true,
106
107
  wrapActions: resolvedConfig.wrapActions,
107
- selectRow: () => {
108
+ selectRow: (p) => {
108
109
  toggleRow(p);
109
110
  p.node.setSelected(true);
110
111
  },
111
- onSet: (id, value) => {
112
+ onSet: (id, value, rowIndex) => {
112
113
  if (!inputs[id]) {
113
114
  inputs[id] = { [rowIndex]: value };
114
115
  }
@@ -117,7 +118,7 @@ const tableActionsFactory = cellRendererFactory((c, p) => {
117
118
  }
118
119
  outputs?.inputs.set(inputs, true);
119
120
  },
120
- onRemove: (id) => {
121
+ onRemove: (id, rowIndex) => {
121
122
  if (inputs?.[id] == undefined) {
122
123
  return;
123
124
  }
@@ -132,6 +133,14 @@ const tableActionsFactory = cellRendererFactory((c, p) => {
132
133
  },
133
134
  context: componentContext
134
135
  });
136
+ return {
137
+ destroy: () => {
138
+ ta.$destroy();
139
+ },
140
+ refresh(params) {
141
+ ta.$set({ rowIndex: params.node.rowIndex ?? 0, row: params.data, p: params });
142
+ }
143
+ };
135
144
  });
136
145
  function transformColumnDefs(columnDefs) {
137
146
  if (!columnDefs) {
@@ -148,7 +157,7 @@ function transformColumnDefs(columnDefs) {
148
157
  field: 'delete',
149
158
  headerName: 'Delete',
150
159
  cellRenderer: cellRendererFactory((c, p) => {
151
- new Button({
160
+ let ta = new Button({
152
161
  target: c.eGui,
153
162
  props: {
154
163
  btnClasses: 'w-12',
@@ -161,6 +170,14 @@ function transformColumnDefs(columnDefs) {
161
170
  nonCaptureEvent: true
162
171
  }
163
172
  });
173
+ return {
174
+ destroy: () => {
175
+ ta.$destroy();
176
+ },
177
+ refresh(params) {
178
+ //
179
+ }
180
+ };
164
181
  }),
165
182
  cellRendererParams: {
166
183
  onClick: (e) => {
@@ -84,7 +84,7 @@ function toggleRow(row) {
84
84
  outputs?.selectedRowIndex.set(rowIndex);
85
85
  }
86
86
  if (!deepEqual(outputs?.selectedRow?.peak(), data)) {
87
- outputs?.selectedRow.set(data);
87
+ outputs?.selectedRow?.set(data);
88
88
  }
89
89
  if (iterContext && listInputs) {
90
90
  listInputs.set(id, { selectedRow: data, selectedRowIndex: selectedRowIndex });
@@ -147,20 +147,21 @@ const tableActionsFactory = cellRendererFactory((c, p) => {
147
147
  ['AppViewerContext', context],
148
148
  ['ContextPanel', contextPanel]
149
149
  ]);
150
- new AppAggridTableActions({
150
+ let ta = new AppAggridTableActions({
151
151
  target: c.eGui,
152
152
  props: {
153
+ p,
153
154
  id: id,
154
155
  actions,
155
156
  rowIndex,
156
157
  row,
157
158
  render,
158
159
  wrapActions: resolvedConfig.wrapActions,
159
- selectRow: () => {
160
+ selectRow: (p) => {
160
161
  toggleRow(p);
161
162
  p.node.setSelected(true);
162
163
  },
163
- onSet: (id, value) => {
164
+ onSet: (id, value, rowIndex) => {
164
165
  if (!inputs[id]) {
165
166
  inputs[id] = { [rowIndex]: value };
166
167
  }
@@ -169,7 +170,7 @@ const tableActionsFactory = cellRendererFactory((c, p) => {
169
170
  }
170
171
  outputs?.inputs.set(inputs, true);
171
172
  },
172
- onRemove: (id) => {
173
+ onRemove: (id, rowIndex) => {
173
174
  if (inputs?.[id] == undefined) {
174
175
  return;
175
176
  }
@@ -184,6 +185,14 @@ const tableActionsFactory = cellRendererFactory((c, p) => {
184
185
  },
185
186
  context: componentContext
186
187
  });
188
+ return {
189
+ destroy: () => {
190
+ ta.$destroy();
191
+ },
192
+ refresh(params) {
193
+ ta.$set({ rowIndex: params.node.rowIndex ?? 0, row: params.data, p: params });
194
+ }
195
+ };
187
196
  });
188
197
  function mountGrid() {
189
198
  if (eGui) {
@@ -10,6 +10,7 @@ import { Plug2 } from 'lucide-svelte';
10
10
  import ComponentOutputViewer from '../../../editor/contextPanel/ComponentOutputViewer.svelte';
11
11
  import { connectOutput } from '../../../editor/appUtils';
12
12
  import RowWrapper from '../../layout/RowWrapper.svelte';
13
+ export let p;
13
14
  export let id;
14
15
  export let render;
15
16
  export let actions = [];
@@ -29,11 +30,25 @@ onMount(() => {
29
30
  if (parent) {
30
31
  parent.classList.add('w-full');
31
32
  }
33
+ else {
34
+ //sometimes the parent is not available immediately
35
+ setTimeout(() => {
36
+ const parent = rowDiv?.parentElement?.parentElement?.parentElement;
37
+ if (parent) {
38
+ parent.classList.add('w-full');
39
+ }
40
+ }, 10);
41
+ }
32
42
  }
33
43
  });
34
44
  </script>
35
45
 
36
- <RowWrapper value={row} index={rowIndex} {onSet} {onRemove}>
46
+ <RowWrapper
47
+ value={row}
48
+ index={rowIndex}
49
+ onSet={(id, value) => onSet(id, value, rowIndex)}
50
+ onRemove={(id) => onRemove(id, rowIndex)}
51
+ >
37
52
  <div
38
53
  class={twMerge(
39
54
  'flex flex-row justify-center items-center gap-4 h-full px-4 py-1 w-full',
@@ -57,7 +72,7 @@ onMount(() => {
57
72
  }
58
73
  }}
59
74
  on:pointerdown|stopPropagation={(e) => {
60
- selectRow()
75
+ selectRow(p)
61
76
 
62
77
  if (!$connectingInput.opened) {
63
78
  $selectedComponent = [action.id]
@@ -159,7 +174,7 @@ onMount(() => {
159
174
  noWFull
160
175
  preclickAction={async () => {
161
176
  dispatch('toggleRow')
162
- selectRow()
177
+ selectRow(p)
163
178
  }}
164
179
  id={action.id}
165
180
  customCss={action.customCss}
@@ -185,7 +200,7 @@ onMount(() => {
185
200
  onToggle={action.onToggle}
186
201
  preclickAction={async () => {
187
202
  dispatch('toggleRow')
188
- selectRow()
203
+ selectRow(p)
189
204
  }}
190
205
  verticalAlignment="center"
191
206
  {controls}
@@ -204,7 +219,7 @@ onMount(() => {
204
219
  onSelect={action.onSelect}
205
220
  preclickAction={async () => {
206
221
  dispatch('toggleRow')
207
- selectRow()
222
+ selectRow(p)
208
223
  }}
209
224
  {controls}
210
225
  />
@@ -216,7 +231,7 @@ onMount(() => {
216
231
  {render}
217
232
  preclickAction={async () => {
218
233
  dispatch('toggleRow')
219
- selectRow()
234
+ selectRow(p)
220
235
  }}
221
236
  noWFull
222
237
  id={action.id}
@@ -241,7 +256,7 @@ onMount(() => {
241
256
  onToggle={action.onToggle}
242
257
  preclickAction={async () => {
243
258
  dispatch('toggleRow')
244
- selectRow()
259
+ selectRow(p)
245
260
  }}
246
261
  />
247
262
  {:else if action.type == 'selectcomponent'}
@@ -258,7 +273,7 @@ onMount(() => {
258
273
  onSelect={action.onSelect}
259
274
  preclickAction={async () => {
260
275
  dispatch('toggleRow')
261
- selectRow()
276
+ selectRow(p)
262
277
  }}
263
278
  />
264
279
  {/if}
@@ -2,8 +2,10 @@ import { SvelteComponent } from "svelte";
2
2
  import type { TableAction } from '../../../editor/component';
3
3
  import 'ag-grid-community/styles/ag-grid.css';
4
4
  import 'ag-grid-community/styles/ag-theme-alpine.css';
5
+ import type { ICellRendererParams } from 'ag-grid-community';
5
6
  declare const __propDef: {
6
7
  props: {
8
+ p: ICellRendererParams<any>;
7
9
  id: string;
8
10
  render: boolean;
9
11
  actions?: TableAction[] | undefined;
@@ -11,10 +13,10 @@ declare const __propDef: {
11
13
  row: {
12
14
  original: Record<string, any>;
13
15
  };
14
- onSet: (id: string, value: any) => void;
15
- onRemove: (id: string) => void;
16
+ onSet: (id: string, value: any, rowIndex: number) => void;
17
+ onRemove: (id: string, rowIndex: number) => void;
16
18
  wrapActions?: boolean | undefined;
17
- selectRow: () => void;
19
+ selectRow: (params: ICellRendererParams<any>) => void;
18
20
  };
19
21
  events: {
20
22
  toggleRow: CustomEvent<any>;
@@ -5,25 +5,26 @@
5
5
  */
6
6
  export class AbstractCellRenderer {
7
7
  eGui;
8
- value;
9
- params;
8
+ component;
10
9
  constructor(parentElement = 'span') {
11
10
  // create empty span (or other element) to place svelte component in
11
+ this.component = undefined;
12
12
  this.eGui = document.createElement(parentElement);
13
13
  }
14
14
  init(params) {
15
- this.value = params.value;
16
- this.createComponent(params);
15
+ this.component = this.createComponent(params);
17
16
  this.eGui.addEventListener('click', () => params.onClick?.(params.data));
18
- this.params = params;
19
17
  }
20
18
  getGui() {
21
19
  return this.eGui;
22
20
  }
23
21
  refresh(params) {
24
- this.value = params.value;
22
+ this.component?.refresh?.(params);
25
23
  return true;
26
24
  }
25
+ destroy() {
26
+ this.component?.destroy?.();
27
+ }
27
28
  }
28
29
  /**
29
30
  * Creates a cell renderer using the given callback for how to initialise a svelte component.
@@ -34,7 +35,7 @@ export class AbstractCellRenderer {
34
35
  export function cellRendererFactory(svelteComponent) {
35
36
  class Renderer extends AbstractCellRenderer {
36
37
  createComponent(params) {
37
- svelteComponent(this, params);
38
+ return svelteComponent(this, params);
38
39
  }
39
40
  }
40
41
  return Renderer;
@@ -514,6 +514,18 @@ function updateBgRuns(loading) {
514
514
  bgRuns.update((runs) => runs.filter((r) => r !== id));
515
515
  }
516
516
  }
517
+ function getError(obj) {
518
+ try {
519
+ if (obj?.error) {
520
+ return obj.error;
521
+ }
522
+ return undefined;
523
+ }
524
+ catch (e) {
525
+ console.error('Error accessing error from result', e);
526
+ return undefined;
527
+ }
528
+ }
517
529
  </script>
518
530
 
519
531
  {#each Object.entries(fields ?? {}) as [key, v] (key)}
@@ -608,7 +620,7 @@ function updateBgRuns(loading) {
608
620
  <Alert type="warning" size="xs" class="mt-2 px-1" title="Missing runnable">
609
621
  Please select a runnable
610
622
  </Alert>
611
- {:else if result?.error && $mode === 'preview' && !errorHandledByComponent}
623
+ {:else if getError(result) && $mode === 'preview' && !errorHandledByComponent}
612
624
  <div
613
625
  title="Error"
614
626
  class={classNames(
@@ -19,7 +19,7 @@ function create_context_function_template(eval_string, contextKeys, noReturn) {
19
19
  return async function (context, state, createProxy, goto, setTab, recompute, getAgGrid, setValue, setSelectedIndex, openModal, closeModal, open, close, validate, invalidate, validateAll, clearFiles, showToast, waitJob, askNewResource) {
20
20
  "use strict";
21
21
  ${contextKeys && contextKeys.length > 0
22
- ? `let ${contextKeys.map((key) => ` ${key} = createProxy('${key}', context['${key}'] ?? {})`)};`
22
+ ? `let ${contextKeys.map((key) => ` ${key} = createProxy('${key}', context['${key}'])`)};`
23
23
  : ``}
24
24
  ${hasReturnAsLastLine
25
25
  ? eval_string
@@ -54,31 +54,37 @@ function hashCode(s) {
54
54
  }
55
55
  export async function eval_like(text, context = {}, state, editor, controlComponents, worldStore, runnableComponents, noReturn, groupContextId) {
56
56
  const createProxy = (name, obj) => {
57
- if (name == 'group' && groupContextId) {
58
- return createGroupProxy(groupContextId, obj);
59
- }
60
- return new Proxy(obj, {
61
- set(target, key, value) {
62
- if (name != 'state') {
63
- throw new Error('Cannot set value on objects that are neither the global state or a container group field');
64
- }
65
- if (typeof key !== 'string') {
66
- throw new Error('Invalid key');
67
- }
68
- target[key] = value;
69
- let o = worldStore?.newOutput(name, key, value);
70
- o?.set(value, true);
71
- return true;
72
- },
73
- get(obj, prop) {
74
- if (name != 'state' && prop == 'group') {
75
- return createGroupProxy(name, obj[prop]);
76
- }
77
- else {
78
- return obj[prop];
79
- }
57
+ // console.log('Creating proxy', name, obj)
58
+ if (obj != null && obj != undefined && typeof obj == 'object') {
59
+ if (name == 'group' && groupContextId) {
60
+ return createGroupProxy(groupContextId, obj);
80
61
  }
81
- });
62
+ return new Proxy(obj, {
63
+ set(target, key, value) {
64
+ if (name != 'state') {
65
+ throw new Error('Cannot set value on objects that are neither the global state or a container group field');
66
+ }
67
+ if (typeof key !== 'string') {
68
+ throw new Error('Invalid key');
69
+ }
70
+ target[key] = value;
71
+ let o = worldStore?.newOutput(name, key, value);
72
+ o?.set(value, true);
73
+ return true;
74
+ },
75
+ get(obj, prop) {
76
+ if (name != 'state' && prop == 'group') {
77
+ return createGroupProxy(name, obj[prop]);
78
+ }
79
+ else {
80
+ return obj[prop];
81
+ }
82
+ }
83
+ });
84
+ }
85
+ else {
86
+ return obj;
87
+ }
82
88
  };
83
89
  const createGroupProxy = (name, obj) => {
84
90
  return new Proxy(obj, {
@@ -144,6 +144,7 @@ async function computeTriggerables() {
144
144
  input: getCountInput(resourceValue, tableValue, dbType, columnDefs, whereClause),
145
145
  id: x.id + '_count'
146
146
  });
147
+ console.log(x.id, getCountInput(resourceValue, tableValue, dbType, columnDefs, whereClause), columnDefs);
147
148
  r.push({
148
149
  input: getInsertInput(tableValue, columnDefs, resourceValue, dbType),
149
150
  id: x.id + '_insert'
@@ -17,6 +17,7 @@ import Toggle from '../../Toggle.svelte';
17
17
  import { RotateCw, Save } from 'lucide-svelte';
18
18
  import { CUSTOM_TAGS_SETTING, WORKSPACE_SLACK_BOT_TOKEN_PATH } from '../../../consts';
19
19
  import { loadSchemaFromPath } from '../../../infer';
20
+ import { hubPaths } from '../../../hub';
20
21
  export let appPath;
21
22
  export let open = false;
22
23
  let appReportingEnabled = false;
@@ -155,7 +156,7 @@ export async function main(app_path: string, startup_duration = 5, kind: 'pdf' |
155
156
  }`;
156
157
  const notificationScripts = {
157
158
  discord: {
158
- path: 'hub/7838/discord',
159
+ path: hubPaths.discordReport,
159
160
  schema: {
160
161
  type: 'object',
161
162
  properties: {
@@ -171,7 +172,7 @@ const notificationScripts = {
171
172
  }
172
173
  },
173
174
  slack: {
174
- path: 'hub/7836/slack',
175
+ path: hubPaths.slackReport,
175
176
  schema: {
176
177
  type: 'object',
177
178
  properties: {
@@ -184,7 +185,7 @@ const notificationScripts = {
184
185
  }
185
186
  },
186
187
  email: {
187
- path: 'hub/7837/smtp',
188
+ path: hubPaths.smtpReport,
188
189
  schema: {
189
190
  type: 'object',
190
191
  properties: {
@@ -519,7 +519,7 @@ export declare const components: {
519
519
  readonly fieldType: "select";
520
520
  readonly type: "static";
521
521
  readonly selectOptions: string[];
522
- readonly value: "Body" | "Title" | "Subtitle" | "Label" | "Caption";
522
+ readonly value: "Title" | "Subtitle" | "Body" | "Label" | "Caption";
523
523
  };
524
524
  readonly copyButton: {
525
525
  readonly type: "static";
@@ -37,7 +37,6 @@ setContext('DecisionTreeEditor', { selectedNodeId });
37
37
  <DecisionTreePreview
38
38
  bind:nodes
39
39
  bind:component
40
- {rebuildOnChange}
41
40
  {paneHeight}
42
41
  {paneWidth}
43
42
  on:render={() => {