windmill-components 1.504.6 → 1.511.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 (233) hide show
  1. package/package/ata/index.js +1 -1
  2. package/package/components/AppConnectInner.svelte +184 -29
  3. package/package/components/ArgInput.svelte +33 -103
  4. package/package/components/AuthSettings.svelte +45 -1
  5. package/package/components/Dev.svelte +31 -24
  6. package/package/components/DisplayResult.svelte +53 -26
  7. package/package/components/DisplayResult.svelte.d.ts +1 -1
  8. package/package/components/DynSelect.svelte +3 -3
  9. package/package/components/Editor.svelte +115 -88
  10. package/package/components/Editor.svelte.d.ts +30 -55
  11. package/package/components/EditorBar.svelte +2 -2
  12. package/package/components/ErrorOrRecoveryHandler.svelte +73 -67
  13. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +8 -24
  14. package/package/components/FlowBuilder.svelte +11 -2
  15. package/package/components/FlowJobResult.svelte +12 -17
  16. package/package/components/FlowJobResult.svelte.d.ts +5 -18
  17. package/package/components/FlowPreviewContent.svelte +13 -10
  18. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  19. package/package/components/FlowPreviewResult.svelte +14 -6
  20. package/package/components/FlowStatusViewer.svelte +11 -24
  21. package/package/components/FlowStatusViewer.svelte.d.ts +19 -18
  22. package/package/components/FlowStatusViewerInner.svelte +110 -131
  23. package/package/components/FlowStatusViewerInner.svelte.d.ts +20 -18
  24. package/package/components/GitDiffPreview.svelte +55 -0
  25. package/package/components/GitDiffPreview.svelte.d.ts +13 -0
  26. package/package/components/HistoricInputs.svelte +2 -2
  27. package/package/components/HttpAgentWorkerDrawer.svelte +1 -1
  28. package/package/components/InitGitRepoPopover.svelte +410 -0
  29. package/package/components/InitGitRepoPopover.svelte.d.ts +13 -0
  30. package/package/components/InstanceSetting.svelte +21 -9
  31. package/package/components/InstanceSettings.svelte +16 -3
  32. package/package/components/JobLoader.svelte +567 -0
  33. package/package/components/JobLoader.svelte.d.ts +53 -0
  34. package/package/components/JobLogs.svelte +6 -4
  35. package/package/components/JobLogs.svelte.d.ts +5 -18
  36. package/package/components/JsonEditor.svelte +11 -11
  37. package/package/components/JsonEditor.svelte.d.ts +14 -56
  38. package/package/components/Label.svelte +6 -11
  39. package/package/components/Label.svelte.d.ts +14 -39
  40. package/package/components/LightweightResourcePicker.svelte +18 -39
  41. package/package/components/LightweightResourcePicker.svelte.d.ts +6 -22
  42. package/package/components/LogViewer.svelte +35 -41
  43. package/package/components/LogViewer.svelte.d.ts +6 -20
  44. package/package/components/ModulePreviewResultViewer.svelte +3 -1
  45. package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -0
  46. package/package/components/ModuleTest.svelte +16 -11
  47. package/package/components/NumberTypeNarrowing.svelte +13 -16
  48. package/package/components/NumberTypeNarrowing.svelte.d.ts +4 -18
  49. package/package/components/PullGitRepoPopover.svelte +355 -0
  50. package/package/components/PullGitRepoPopover.svelte.d.ts +18 -0
  51. package/package/components/ResourceTypePicker.svelte +20 -17
  52. package/package/components/ResourceTypePicker.svelte.d.ts +7 -6
  53. package/package/components/S3FilePicker.svelte +5 -3
  54. package/package/components/SavedInputs.svelte +2 -2
  55. package/package/components/ScriptBuilder.svelte +4 -3
  56. package/package/components/ScriptEditor.svelte +34 -31
  57. package/package/components/ScriptEditor.svelte.d.ts +3 -3
  58. package/package/components/Section.svelte +7 -20
  59. package/package/components/Section.svelte.d.ts +20 -47
  60. package/package/components/ServiceLogsInner.svelte +2 -1
  61. package/package/components/ServiceLogsInner.svelte.d.ts +1 -0
  62. package/package/components/SimpleEditor.svelte +4 -4
  63. package/package/components/SimpleEditor.svelte.d.ts +1 -0
  64. package/package/components/SqlRepl.svelte +0 -1
  65. package/package/components/Subsection.svelte +10 -12
  66. package/package/components/Subsection.svelte.d.ts +15 -39
  67. package/package/components/UserSettings.svelte +1 -1
  68. package/package/components/WorkerGroup.svelte +260 -165
  69. package/package/components/WorkerGroup.svelte.d.ts +2 -0
  70. package/package/components/WorkerTagPicker.svelte +3 -3
  71. package/package/components/WorkerTagSelect.svelte +33 -4
  72. package/package/components/apps/components/buttons/AppButton.svelte +7 -1
  73. package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
  74. package/package/components/apps/components/display/AppCustomComponent.svelte +1 -1
  75. package/package/components/apps/components/display/AppDisplayComponentByJobId.svelte +16 -11
  76. package/package/components/apps/components/display/AppJobIdLogComponent.svelte +13 -10
  77. package/package/components/apps/components/display/AppMenu.svelte +5 -0
  78. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +3 -3
  79. package/package/components/apps/components/display/dbtable/DeleteRow.svelte +3 -3
  80. package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte +3 -3
  81. package/package/components/apps/components/display/dbtable/UpdateCell.svelte +3 -3
  82. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +3 -3
  83. package/package/components/apps/components/helpers/RunnableComponent.svelte +65 -54
  84. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +5 -5
  85. package/package/components/apps/components/inputs/AppUserResource.svelte +26 -8
  86. package/package/components/apps/editor/AppEditorHeader.svelte +11 -5
  87. package/package/components/apps/editor/AppJobsDrawer.svelte +5 -5
  88. package/package/components/apps/editor/RunnableJobPanel.svelte +4 -4
  89. package/package/components/apps/editor/component/components.d.ts +12 -0
  90. package/package/components/apps/editor/component/components.js +19 -7
  91. package/package/components/assets/AssetButtons.svelte +38 -0
  92. package/package/components/assets/AssetButtons.svelte.d.ts +15 -0
  93. package/package/components/assets/AssetsDropdownButton.svelte +60 -72
  94. package/package/components/assets/AssetsDropdownButton.svelte.d.ts +3 -4
  95. package/package/components/assets/AssetsUsageDrawer.svelte +10 -10
  96. package/package/components/assets/JobAssetsViewer.svelte +79 -0
  97. package/package/components/assets/JobAssetsViewer.svelte.d.ts +7 -0
  98. package/package/components/assets/README_DEV.md +0 -0
  99. package/package/components/assets/lib.d.ts +9 -1
  100. package/package/components/assets/lib.js +48 -7
  101. package/package/components/common/fileUpload/FileUpload.svelte +126 -84
  102. package/package/components/common/fileUpload/FileUpload.svelte.d.ts +13 -3
  103. package/package/components/common/fileUpload/S3ArgInput.svelte +111 -0
  104. package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +21 -0
  105. package/package/components/common/table/ScriptRow.svelte +3 -1
  106. package/package/components/copilot/AIFormSettings.svelte +3 -4
  107. package/package/components/copilot/AIFormSettings.svelte.d.ts +5 -19
  108. package/package/components/copilot/autocomplete/Autocompletor.d.ts +3 -1
  109. package/package/components/copilot/autocomplete/Autocompletor.js +269 -35
  110. package/package/components/copilot/autocomplete/request.d.ts +3 -0
  111. package/package/components/copilot/autocomplete/request.js +15 -7
  112. package/package/components/copilot/chat/AIChatDisplay.svelte +8 -0
  113. package/package/components/copilot/chat/AIChatManager.svelte.js +13 -8
  114. package/package/components/copilot/chat/flow/ModuleAcceptReject.svelte +5 -5
  115. package/package/components/copilot/chat/flow/core.d.ts +1 -1
  116. package/package/components/copilot/chat/flow/core.js +2 -38
  117. package/package/components/copilot/chat/navigator/apiTools.d.ts +8 -0
  118. package/package/components/copilot/chat/navigator/apiTools.js +95 -15
  119. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  120. package/package/components/copilot/chat/navigator/core.js +2 -1
  121. package/package/components/copilot/chat/script/core.d.ts +11 -2
  122. package/package/components/copilot/chat/script/core.js +165 -23
  123. package/package/components/copilot/chat/shared.d.ts +10 -0
  124. package/package/components/copilot/chat/shared.js +56 -0
  125. package/package/components/copilot/lib.d.ts +1 -0
  126. package/package/components/copilot/lib.js +30 -9
  127. package/package/components/custom_ui.d.ts +1 -0
  128. package/package/components/flows/FlowAssetsHandler.svelte +133 -0
  129. package/package/components/flows/FlowAssetsHandler.svelte.d.ts +14 -0
  130. package/package/components/flows/content/FlowModuleCache.svelte +4 -4
  131. package/package/components/flows/content/FlowModuleCache.svelte.d.ts +4 -18
  132. package/package/components/flows/content/FlowModuleComponent.svelte +16 -19
  133. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte +3 -4
  134. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte.d.ts +4 -18
  135. package/package/components/flows/content/FlowModuleSleep.svelte +6 -7
  136. package/package/components/flows/content/FlowModuleSleep.svelte.d.ts +4 -18
  137. package/package/components/flows/content/FlowModuleSuspend.svelte +19 -17
  138. package/package/components/flows/content/FlowModuleSuspend.svelte.d.ts +4 -18
  139. package/package/components/flows/content/FlowModuleTimeout.svelte +4 -4
  140. package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +4 -18
  141. package/package/components/flows/flowStore.d.ts +1 -1
  142. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -0
  143. package/package/components/flows/propPicker/OutputPicker.svelte +9 -4
  144. package/package/components/flows/scheduleUtils.js +1 -1
  145. package/package/components/flows/types.d.ts +2 -1
  146. package/package/components/graph/FlowGraphV2.svelte +8 -104
  147. package/package/components/graph/FlowGraphV2.svelte.d.ts +0 -2
  148. package/package/components/graph/graphBuilder.svelte.d.ts +6 -3
  149. package/package/components/graph/graphBuilder.svelte.js +35 -9
  150. package/package/components/graph/renderers/edges/BaseEdge.svelte +2 -5
  151. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +1 -0
  152. package/package/components/graph/renderers/nodes/AssetNode.svelte +23 -20
  153. package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +5 -10
  154. package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte +1 -1
  155. package/package/components/graph/util.js +1 -1
  156. package/package/components/home/ItemsList.svelte +2 -0
  157. package/package/components/icons/AssetGenericIcon.svelte +0 -3
  158. package/package/components/jobs/JobPreview.svelte +10 -6
  159. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +13 -12
  160. package/package/components/runs/BatchReRunOptionsPane.svelte +5 -1
  161. package/package/components/runs/JobPreview.svelte +26 -16
  162. package/package/components/runs/{JobLoader.svelte.d.ts → JobsLoader.svelte.d.ts} +3 -3
  163. package/package/components/runs/NoWorkerWithTagWarning.svelte +2 -2
  164. package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -0
  165. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  166. package/package/components/scriptEditor/LogPanel.svelte +3 -2
  167. package/package/components/script_builder.d.ts +2 -2
  168. package/package/components/settings/CreateToken.svelte +76 -41
  169. package/package/components/settings/CreateToken.svelte.d.ts +1 -1
  170. package/package/components/settings/ScopeSelector.svelte +613 -0
  171. package/package/components/settings/ScopeSelector.svelte.d.ts +8 -0
  172. package/package/components/settings/TokenDisplay.svelte +103 -0
  173. package/package/components/settings/TokenDisplay.svelte.d.ts +10 -0
  174. package/package/components/settings/TokensTable.svelte +70 -349
  175. package/package/components/sidebar/CriticalAlertModal.svelte +3 -0
  176. package/package/components/triggers/DeleteTriggerButton.svelte +1 -1
  177. package/package/components/triggers/TriggerEditorToolbar.svelte +3 -3
  178. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte +55 -0
  179. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +13 -0
  180. package/package/components/triggers/TriggersEditor.svelte +45 -3
  181. package/package/components/triggers/TriggersWrapper.svelte +2 -2
  182. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +47 -6
  183. package/package/components/triggers/gcp/utils.js +9 -1
  184. package/package/components/triggers/http/OpenAPISpecGenerator.svelte +3 -2
  185. package/package/components/triggers/http/RouteEditorConfigSection.svelte +26 -23
  186. package/package/components/triggers/http/RouteEditorConfigSection.svelte.d.ts +5 -19
  187. package/package/components/triggers/http/RouteEditorInner.svelte +219 -175
  188. package/package/components/triggers/http/RouteEditorInner.svelte.d.ts +6 -2
  189. package/package/components/triggers/http/utils.js +9 -3
  190. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +47 -6
  191. package/package/components/triggers/kafka/utils.js +9 -1
  192. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte +4 -132
  193. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte.d.ts +2 -5
  194. package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +182 -13
  195. package/package/components/triggers/mqtt/utils.js +9 -1
  196. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +47 -6
  197. package/package/components/triggers/nats/utils.js +9 -1
  198. package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +41 -2
  199. package/package/components/triggers/postgres/utils.js +9 -1
  200. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +38 -92
  201. package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +47 -6
  202. package/package/components/triggers/sqs/utils.js +9 -1
  203. package/package/components/triggers/utils.js +12 -0
  204. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +47 -6
  205. package/package/components/triggers/websocket/utils.js +11 -1
  206. package/package/components/workspaceSettings/AISettings.svelte +0 -2
  207. package/package/components/workspaceSettings/FilterList.svelte +56 -0
  208. package/package/components/workspaceSettings/FilterList.svelte.d.ts +8 -0
  209. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +785 -0
  210. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +18 -0
  211. package/package/gen/core/OpenAPI.js +1 -1
  212. package/package/gen/schemas.gen.d.ts +305 -23
  213. package/package/gen/schemas.gen.js +305 -23
  214. package/package/gen/services.gen.d.ts +33 -1
  215. package/package/gen/services.gen.js +66 -2
  216. package/package/gen/types.gen.d.ts +216 -11
  217. package/package/history.svelte.js +0 -2
  218. package/package/hub.d.ts +1 -0
  219. package/package/hubPaths.json +5 -2
  220. package/package/infer.js +16 -10
  221. package/package/svelte5Utils.svelte.d.ts +1 -0
  222. package/package/svelte5Utils.svelte.js +25 -18
  223. package/package/toast.js +10 -0
  224. package/package/utils.d.ts +3 -2
  225. package/package/utils.js +20 -5
  226. package/package.json +11 -11
  227. package/package/components/ResultJobLoader.svelte +0 -219
  228. package/package/components/ResultJobLoader.svelte.d.ts +0 -52
  229. package/package/components/TestJobLoader.svelte +0 -274
  230. package/package/components/TestJobLoader.svelte.d.ts +0 -43
  231. package/package/components/icons/AssetVarIcon.svelte +0 -31
  232. package/package/components/icons/AssetVarIcon.svelte.d.ts +0 -9
  233. /package/package/components/runs/{JobLoader.svelte → JobsLoader.svelte} +0 -0
@@ -3,7 +3,7 @@ import { twMerge } from 'tailwind-merge';
3
3
  import { initConfig, initOutput } from '../../editor/appUtils';
4
4
  import { IS_APP_PUBLIC_CONTEXT_KEY } from '../../types';
5
5
  import { initCss } from '../../utils';
6
- import TestJobLoader from '../../../TestJobLoader.svelte';
6
+ import JobLoader from '../../../JobLoader.svelte';
7
7
  import { components } from '../../editor/component';
8
8
  import ResolveConfig from '../helpers/ResolveConfig.svelte';
9
9
  import ResolveStyle from '../helpers/ResolveStyle.svelte';
@@ -21,7 +21,7 @@ const outputs = initOutput($worldStore, id, {
21
21
  });
22
22
  initializing = false;
23
23
  let css = $state(initCss($app.css?.jobiddisplaycomponent, customCss));
24
- let testJobLoader = $state(undefined);
24
+ let jobLoader = $state(undefined);
25
25
  let testIsLoading = $state(false);
26
26
  let testJob = $state(undefined);
27
27
  $effect(() => {
@@ -30,12 +30,22 @@ $effect(() => {
30
30
  outputs.loading.set(true);
31
31
  const jobId = resolvedConfig?.['jobId'];
32
32
  if (jobId) {
33
- testJobLoader?.watchJob(jobId);
33
+ jobLoader?.watchJob(jobId, {
34
+ done(x) {
35
+ onDone(x);
36
+ }
37
+ });
34
38
  }
35
39
  });
36
40
  }
37
41
  });
38
42
  let result = $state(undefined);
43
+ function onDone(job) {
44
+ outputs.loading.set(false);
45
+ outputs.jobId.set(job.id);
46
+ outputs.result.set(job.result);
47
+ result = job.result;
48
+ }
39
49
  </script>
40
50
 
41
51
  {#each Object.keys(components['jobiddisplaycomponent'].initialData.configuration) as key (key)}
@@ -57,17 +67,12 @@ let result = $state(undefined);
57
67
  />
58
68
  {/each}
59
69
 
60
- <TestJobLoader
70
+ <JobLoader
71
+ noCode={true}
61
72
  workspaceOverride={workspace}
62
- bind:this={testJobLoader}
73
+ bind:this={jobLoader}
63
74
  bind:isLoading={testIsLoading}
64
75
  bind:job={testJob}
65
- on:done={(e) => {
66
- outputs.loading.set(false)
67
- outputs.jobId.set(e.detail.id)
68
- outputs.result.set(e.detail.result)
69
- result = e.detail.result
70
- }}
71
76
  />
72
77
 
73
78
  <InitializeComponent {id} />
@@ -3,7 +3,7 @@ import { twMerge } from 'tailwind-merge';
3
3
  import { initConfig, initOutput } from '../../editor/appUtils';
4
4
  import { initCss } from '../../utils';
5
5
  import LogViewer from '../../../LogViewer.svelte';
6
- import TestJobLoader from '../../../TestJobLoader.svelte';
6
+ import JobLoader from '../../../JobLoader.svelte';
7
7
  import { components } from '../../editor/component';
8
8
  import ResolveConfig from '../helpers/ResolveConfig.svelte';
9
9
  import ResolveStyle from '../helpers/ResolveStyle.svelte';
@@ -23,7 +23,7 @@ const outputs = initOutput($worldStore, id, {
23
23
  });
24
24
  initializing = false;
25
25
  let css = $state(initCss($app.css?.jobidlogcomponent, customCss));
26
- let testJobLoader = $state(undefined);
26
+ let jobLoader = $state(undefined);
27
27
  let testIsLoading = $state(false);
28
28
  let testJob = $state(undefined);
29
29
  $effect(() => {
@@ -32,7 +32,14 @@ $effect(() => {
32
32
  outputs.loading.set(true);
33
33
  const jobId = resolvedConfig?.['jobId'];
34
34
  if (jobId) {
35
- testJobLoader?.watchJob(jobId);
35
+ let callbacks = {
36
+ done(x) {
37
+ outputs.loading.set(false);
38
+ outputs.jobId.set(x.id);
39
+ outputs.result.set(x.result);
40
+ }
41
+ };
42
+ jobLoader?.watchJob(jobId, callbacks);
36
43
  }
37
44
  });
38
45
  }
@@ -58,16 +65,12 @@ $effect(() => {
58
65
  />
59
66
  {/each}
60
67
 
61
- <TestJobLoader
68
+ <JobLoader
69
+ noCode={true}
62
70
  workspaceOverride={workspace}
63
- bind:this={testJobLoader}
71
+ bind:this={jobLoader}
64
72
  bind:isLoading={testIsLoading}
65
73
  bind:job={testJob}
66
- on:done={(e) => {
67
- outputs.loading.set(false)
68
- outputs.jobId.set(e.detail.id)
69
- outputs.result.set(e.detail.result)
70
- }}
71
74
  />
72
75
 
73
76
  <InitializeComponent {id} />
@@ -38,6 +38,7 @@ $effect(() => {
38
38
  $effect(() => {
39
39
  resolvedConfig.afterIcon && afterIconComponent && untrack(() => handleAfterIcon());
40
40
  });
41
+ let menu = $state();
41
42
  </script>
42
43
 
43
44
  <InitializeComponent {id} />
@@ -66,6 +67,7 @@ $effect(() => {
66
67
  <Menubar class={resolvedConfig.fillContainer ? 'w-full h-full' : ''}>
67
68
  {#snippet children({ createMenu })}
68
69
  <Menu
70
+ bind:this={menu}
69
71
  {createMenu}
70
72
  placement="bottom-end"
71
73
  justifyEnd={false}
@@ -134,6 +136,9 @@ $effect(() => {
134
136
  componentInput={actionButton.componentInput}
135
137
  noWFull={false}
136
138
  isMenuItem={true}
139
+ onDone={() => {
140
+ menu?.close()
141
+ }}
137
142
  />
138
143
  </div>
139
144
  {/if}
@@ -150,7 +150,7 @@ let datasource = $state({
150
150
  return;
151
151
  }
152
152
  runnableComponent?.runComponent(undefined, undefined, undefined, currentParams, {
153
- done: (items) => {
153
+ onDone: (items) => {
154
154
  let lastRow = -1;
155
155
  if (datasource?.rowCount && datasource.rowCount <= params.endRow) {
156
156
  lastRow = datasource.rowCount;
@@ -178,10 +178,10 @@ let datasource = $state({
178
178
  params.failCallback();
179
179
  }
180
180
  },
181
- cancel: () => {
181
+ onCancel: () => {
182
182
  params.failCallback();
183
183
  },
184
- error: () => {
184
+ onError: (error) => {
185
185
  params.failCallback();
186
186
  }
187
187
  });
@@ -26,14 +26,14 @@ export async function triggerDelete(resource, table, allColumns, data, dbType) {
26
26
  ndata[x.field] = data[x.field];
27
27
  });
28
28
  await runnableComponent?.runComponent(undefined, undefined, undefined, { ...ndata }, {
29
- done: (x) => {
29
+ onDone: (_x) => {
30
30
  sendUserToast('Row deleted', false);
31
31
  dispatch('deleted');
32
32
  },
33
- cancel: () => {
33
+ onCancel: () => {
34
34
  sendUserToast('Error deleting row', true);
35
35
  },
36
- error: () => {
36
+ onError: () => {
37
37
  sendUserToast('Error updating row', true);
38
38
  }
39
39
  });
@@ -23,14 +23,14 @@ export async function insertRow(resource, workspace, table, columns, values, res
23
23
  await tick();
24
24
  if (runnableComponent) {
25
25
  await runnableComponent?.runComponent(undefined, undefined, undefined, values, {
26
- done: (x) => {
26
+ onDone: (_x) => {
27
27
  dispatch('insert');
28
28
  sendUserToast('Row inserted', false);
29
29
  },
30
- cancel: () => {
30
+ onCancel: () => {
31
31
  sendUserToast('Error inserting row', true);
32
32
  },
33
- error: () => {
33
+ onError: () => {
34
34
  sendUserToast('Error inserting row', true);
35
35
  }
36
36
  });
@@ -27,13 +27,13 @@ export async function triggerUpdate(resource, table, column, allColumns, valueTo
27
27
  });
28
28
  ndata[column.field] = oldValue;
29
29
  await runnableComponent?.runComponent(undefined, undefined, undefined, { value_to_update: valueToUpdate, ...ndata }, {
30
- done: (x) => {
30
+ onDone: (x) => {
31
31
  sendUserToast('Value updated', false);
32
32
  },
33
- cancel: () => {
33
+ onCancel: () => {
34
34
  sendUserToast('Error updating value', true);
35
35
  },
36
- error: () => {
36
+ onError: () => {
37
37
  sendUserToast('Error updating value', true);
38
38
  }
39
39
  });
@@ -67,7 +67,7 @@ const datasource = $state({
67
67
  return;
68
68
  }
69
69
  runnableComponent?.runComponent(undefined, undefined, undefined, currentParams, {
70
- done: (items) => {
70
+ onDone: (items) => {
71
71
  let lastRow = -1;
72
72
  if (datasource?.rowCount && datasource.rowCount <= params.endRow) {
73
73
  lastRow = datasource.rowCount;
@@ -92,10 +92,10 @@ const datasource = $state({
92
92
  params.failCallback();
93
93
  }
94
94
  },
95
- cancel: () => {
95
+ onCancel: () => {
96
96
  params.failCallback();
97
97
  },
98
- error: () => {
98
+ onError: () => {
99
99
  params.failCallback();
100
100
  }
101
101
  });
@@ -8,7 +8,6 @@ import { createEventDispatcher, getContext, onDestroy, onMount, untrack } from '
8
8
  import { computeGlobalContext, eval_like } from './eval';
9
9
  import InputValue from './InputValue.svelte';
10
10
  import { collectOneOfFields, selectId } from '../../editor/appUtils';
11
- import ResultJobLoader from '../../../ResultJobLoader.svelte';
12
11
  import { userStore } from '../../../../stores';
13
12
  import { get } from 'svelte/store';
14
13
  import RefreshButton from './RefreshButton.svelte';
@@ -16,6 +15,7 @@ import { ctxRegex } from '../../utils';
16
15
  import { computeWorkspaceS3FileInputPolicy } from '../../editor/appUtilsS3';
17
16
  import { executeRunnable } from './executeRunnable';
18
17
  import SchemaForm from '../../../SchemaForm.svelte';
18
+ import JobLoader, {} from '../../../JobLoader.svelte';
19
19
  let { id, fields, runnable, transformer, extraQueryParams = {}, autoRefresh = true, result = $bindable(undefined), forceSchemaDisplay = false, wrapperClass = '', wrapperStyle = '', render, outputs, extraKey = '', initializing = false, recomputeOnInputChanged = true, loading = $bindable(false), refreshOnStart = false, recomputableByRefreshButton, errorHandledByComponent = false, hideRefreshButton = false, hasChildrens, allowConcurentRequests = false, noInitialize = false, overrideCallback = undefined, overrideAutoRefresh = false, replaceCallback = false, children } = $props();
20
20
  const { worldStore, runnableComponents, workspace, appPath, isEditor, jobs, jobsById, noBackend, errorByComponent, mode, stateId, state: stateStore, componentControl, initialized, selectedComponent, app, connectingInput, bgRuns, recomputeAllContext } = getContext('AppViewerContext');
21
21
  const editorContext = getContext('AppEditorContext');
@@ -34,7 +34,7 @@ function setDebouncedExecute() {
34
34
  executeTimeout && clearTimeout(executeTimeout);
35
35
  executeTimeout = setTimeout(() => {
36
36
  console.debug('debounce execute');
37
- executeComponent(true);
37
+ executeComponent();
38
38
  }, 200);
39
39
  }
40
40
  function computeStaticValues() {
@@ -56,6 +56,57 @@ function refreshOnStaticChange() {
56
56
  // $: sendUserToast('args' + JSON.stringify(runnableInputValues) + Boolean(extraQueryParams) || args)
57
57
  // $: console.log(runnableInputValues)
58
58
  let firstRefresh = true;
59
+ function genCallbacks({ onDone, onCancel, onError }) {
60
+ const callbacks = {
61
+ started({ id }) {
62
+ console.log('started', id);
63
+ loading = true;
64
+ outputs.jobId?.set(id);
65
+ dispatch('started', id);
66
+ },
67
+ doneWithoutCompute(r) {
68
+ onDone?.(r);
69
+ },
70
+ doneResult({ id, result }) {
71
+ onDone?.(result);
72
+ lastJobId = id;
73
+ setResult(result, id);
74
+ loading = false;
75
+ dispatch('done', { id, result });
76
+ },
77
+ cancel({ id }) {
78
+ onCancel?.();
79
+ let jobId = id;
80
+ console.debug('cancel', jobId);
81
+ let job = $jobsById[jobId];
82
+ if (job && job.created_at && !job.duration_ms) {
83
+ $jobsById[jobId] = {
84
+ ...job,
85
+ started_at: job.started_at ?? Date.now(),
86
+ duration_ms: Date.now() - (job.started_at ?? job.created_at)
87
+ };
88
+ }
89
+ dispatch('cancel', { id });
90
+ },
91
+ doneError({ id, error }) {
92
+ onError?.(error);
93
+ setResult({ error }, id);
94
+ loading = false;
95
+ dispatch('doneError', { id, error });
96
+ }
97
+ };
98
+ if (isEditor) {
99
+ callbacks.running = ({ id }) => {
100
+ console.log('running', id);
101
+ let jobId = id;
102
+ let job = $jobsById[jobId];
103
+ if (job && !job.started_at) {
104
+ $jobsById[jobId] = { ...job, started_at: Date.now() };
105
+ }
106
+ };
107
+ }
108
+ return callbacks;
109
+ }
59
110
  function refreshIfAutoRefresh(src) {
60
111
  // console.log(
61
112
  // 'refreshIfAutoRefresh',
@@ -151,7 +202,7 @@ async function executeComponent(noToast = false, inlineScriptOverride, setRunnab
151
202
  let jobId;
152
203
  console.debug(`Executing ${id}`);
153
204
  if (iterContext && $iterContext.disabled) {
154
- callbacks?.done({});
205
+ callbacks?.onDone?.({});
155
206
  console.debug(`Skipping execution of ${id} because it is part of a disabled list`);
156
207
  return;
157
208
  }
@@ -185,7 +236,7 @@ async function executeComponent(noToast = false, inlineScriptOverride, setRunnab
185
236
  await setResult(r, job);
186
237
  }
187
238
  loading = false;
188
- callbacks?.done(r);
239
+ callbacks?.onDone?.(r);
189
240
  if (setRunnableJobEditorPanel && editorContext) {
190
241
  editorContext.runnableJobEditorPanel.update((p) => {
191
242
  return {
@@ -200,16 +251,16 @@ async function executeComponent(noToast = false, inlineScriptOverride, setRunnab
200
251
  if (!noToast) {
201
252
  sendUserToast('This app is not connected to a windmill backend, it is a static preview');
202
253
  }
203
- callbacks?.done({});
254
+ callbacks?.onDone?.({});
204
255
  return;
205
256
  }
206
257
  if (runnable?.type === 'runnableByName' && !runnable.inlineScript) {
207
- callbacks?.done({});
258
+ callbacks?.onDone?.({});
208
259
  return;
209
260
  }
210
261
  if (!resultJobLoader) {
211
262
  console.warn('No test job loader');
212
- callbacks?.done({});
263
+ callbacks?.onDone?.({});
213
264
  return;
214
265
  }
215
266
  try {
@@ -219,7 +270,7 @@ async function executeComponent(noToast = false, inlineScriptOverride, setRunnab
219
270
  addJob(uuid);
220
271
  }
221
272
  return uuid;
222
- }, callbacks);
273
+ }, genCallbacks(callbacks ?? {}));
223
274
  if (setRunnableJobEditorPanel && editorContext) {
224
275
  editorContext.runnableJobEditorPanel.update((p) => {
225
276
  return {
@@ -234,7 +285,7 @@ async function executeComponent(noToast = false, inlineScriptOverride, setRunnab
234
285
  let error = e.body ?? e.message;
235
286
  updateResult({ error });
236
287
  $errorByComponent[id] = { error };
237
- callbacks?.done({ error });
288
+ callbacks?.onError?.({ error });
238
289
  sendUserToast(error, true);
239
290
  loading = false;
240
291
  }
@@ -301,9 +352,6 @@ export async function runComponent(noToast = true, inlineScriptOverride, setRunn
301
352
  $errorByComponent[id] = { error };
302
353
  }
303
354
  }
304
- async function setJobId(jobId) {
305
- outputs.jobId?.set(jobId);
306
- }
307
355
  function recordJob(jobId, result, jobError, transformer) {
308
356
  const error = jobError ?? JSON.stringify(transformer?.error, null, 4);
309
357
  if (isEditor && jobId) {
@@ -415,13 +463,13 @@ onMount(() => {
415
463
  dispatch('recompute');
416
464
  rejectCb = reject;
417
465
  executeComponent(true, inlineScript, setRunnableJobEditorPanel, undefined, {
418
- done: (x) => {
466
+ onDone: (x) => {
419
467
  resolve(x);
420
468
  },
421
- cancel: () => {
469
+ onCancel: () => {
422
470
  reject();
423
471
  },
424
- error: (e) => {
472
+ onError: (e) => {
425
473
  console.error(e);
426
474
  reject(e);
427
475
  }
@@ -570,47 +618,10 @@ $effect(() => {
570
618
  {/each}
571
619
  {/if}
572
620
 
573
- <ResultJobLoader
621
+ <JobLoader
574
622
  {allowConcurentRequests}
575
- {isEditor}
576
- on:started={(e) => {
577
- console.log('started', e.detail)
578
- loading = true
579
- setJobId(e.detail)
580
- dispatch('started', e.detail)
581
- }}
623
+ onlyResult
582
624
  workspaceOverride={workspace}
583
- on:done={(e) => {
584
- lastJobId = e.detail.id
585
- setResult(e.detail.result, e.detail.id)
586
- loading = false
587
- dispatch('done', { id: e.detail?.id, result: e.detail?.result })
588
- }}
589
- on:cancel={(e) => {
590
- let jobId = e.detail
591
- console.debug('cancel', jobId)
592
- let job = $jobsById[jobId]
593
- if (job && job.created_at && !job.duration_ms) {
594
- $jobsById[jobId] = {
595
- ...job,
596
- started_at: job.started_at ?? Date.now(),
597
- duration_ms: Date.now() - (job.started_at ?? job.created_at)
598
- }
599
- }
600
- dispatch('cancel', { id: e.detail })
601
- }}
602
- on:running={(e) => {
603
- let jobId = e.detail
604
- let job = $jobsById[jobId]
605
- if (job && !job.started_at) {
606
- $jobsById[jobId] = { ...job, started_at: Date.now() }
607
- }
608
- }}
609
- on:doneError={(e) => {
610
- setResult({ error: e.detail.error }, e.detail.id)
611
- loading = false
612
- dispatch('doneError', { id: e.detail.id, result: e.detail.result })
613
- }}
614
625
  bind:this={resultJobLoader}
615
626
  />
616
627
 
@@ -36,10 +36,10 @@ interface Props {
36
36
  replaceCallback?: boolean;
37
37
  children?: import('svelte').Snippet;
38
38
  }
39
- type Callbacks = {
40
- done: (x: any) => void;
41
- cancel: () => void;
42
- error: (e: any) => void;
39
+ type RunnableCallback = {
40
+ onDone?: (r: any) => void;
41
+ onCancel?: () => void;
42
+ onError?: (e: any) => void;
43
43
  };
44
44
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
45
45
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
@@ -92,7 +92,7 @@ declare const RunnableComponent: $$__sveltets_2_IsomorphicComponent<Props, {
92
92
  };
93
93
  force_viewer_allow_user_resources?: Array<(string)>;
94
94
  }>;
95
- runComponent: (noToast?: boolean, inlineScriptOverride?: InlineScript, setRunnableJobEditorPanel?: boolean, dynamicArgsOverride?: Record<string, any>, callbacks?: Callbacks) => Promise<string | undefined>;
95
+ runComponent: (noToast?: boolean, inlineScriptOverride?: InlineScript, setRunnableJobEditorPanel?: boolean, dynamicArgsOverride?: Record<string, any>, callbacks?: RunnableCallback) => Promise<string | undefined>;
96
96
  }, "result" | "loading">;
97
97
  type RunnableComponent = InstanceType<typeof RunnableComponent>;
98
98
  export default RunnableComponent;
@@ -1,4 +1,4 @@
1
- <script lang="ts">import { getContext, onDestroy } from 'svelte';
1
+ <script lang="ts">import { getContext, onDestroy, untrack } from 'svelte';
2
2
  import { initConfig, initOutput } from '../../editor/appUtils';
3
3
  import { initCss } from '../../utils';
4
4
  import AlignWrapper from '../helpers/AlignWrapper.svelte';
@@ -9,7 +9,7 @@ import ResolveStyle from '../helpers/ResolveStyle.svelte';
9
9
  import { twMerge } from 'tailwind-merge';
10
10
  import LightweightResourcePicker from '../../../LightweightResourcePicker.svelte';
11
11
  let { id, configuration, verticalAlignment = undefined, customCss = undefined, render } = $props();
12
- const { app, worldStore, componentControl } = getContext('AppViewerContext');
12
+ const { app, worldStore, componentControl, isEditor, mode } = getContext('AppViewerContext');
13
13
  let resolvedConfig = $state(initConfig(components['userresourcecomponent'].initialData.configuration, configuration));
14
14
  const iterContext = getContext('ListWrapperContext');
15
15
  const listInputs = getContext('ListInputs');
@@ -18,8 +18,29 @@ let outputs = initOutput($worldStore, id, {
18
18
  });
19
19
  let css = $state(initCss($app.css?.['userresourcecomponent'], customCss));
20
20
  let classInput = $derived(twMerge('windmillapp w-full px-2', css?.input?.class ?? '', 'wm-input', 'wm-user-resource-select'));
21
- let value = $state(outputs.result.peak()?.replace('$res:', ''));
22
- value && assignValue(outputs.result.peak());
21
+ function getDefaultValue() {
22
+ if (resolvedConfig.defaultValue && typeof resolvedConfig.defaultValue === 'string') {
23
+ const nval = resolvedConfig.defaultValue;
24
+ return nval.replace('$res:', '');
25
+ }
26
+ return undefined;
27
+ }
28
+ let value = $state(outputs.result.peak()?.replace('$res:', '') ?? getDefaultValue());
29
+ $effect(() => {
30
+ value;
31
+ untrack(() => assignValue(value));
32
+ });
33
+ let lastDefaultValue = $state(getDefaultValue());
34
+ $effect(() => {
35
+ // when in dnd mode, we react to the default value being changed for better UX
36
+ if (isEditor && $mode === 'dnd') {
37
+ const currentDefaultValue = getDefaultValue(); // reactive
38
+ if (lastDefaultValue !== currentDefaultValue) {
39
+ value = currentDefaultValue;
40
+ lastDefaultValue = currentDefaultValue;
41
+ }
42
+ }
43
+ });
23
44
  onDestroy(() => {
24
45
  listInputs?.remove(id);
25
46
  });
@@ -76,10 +97,7 @@ let resourcePicker = $state(undefined);
76
97
  <LightweightResourcePicker
77
98
  expressOAuthSetup={resolvedConfig.expressOauthSetup}
78
99
  bind:this={resourcePicker}
79
- {value}
80
- on:change={(e) => {
81
- assignValue(e.detail)
82
- }}
100
+ bind:value
83
101
  disabled={resolvedConfig.disabled}
84
102
  resourceType={resolvedConfig.resourceType}
85
103
  />
@@ -179,11 +179,17 @@ async function computeTriggerables() {
179
179
  .filter(Boolean);
180
180
  if (items.findIndex((x) => {
181
181
  const c = x.data;
182
- if (c.type === 'schemaformcomponent') {
183
- return (Object.values(c.componentInput?.value?.properties ?? {}).findIndex((p) => p?.type === 'object' && p?.format === 'resource-s3_object') !== -1);
184
- }
185
- else if (c.type === 'formbuttoncomponent' || c.type === 'formcomponent') {
186
- return (Object.values(c.componentInput?.fields ?? {}).findIndex((p) => p?.fieldType === 'object' && p?.format === 'resource-s3_object') !== -1);
182
+ if (c.type === 'schemaformcomponent' ||
183
+ c.type === 'formbuttoncomponent' ||
184
+ c.type === 'formcomponent') {
185
+ const props = c.type === 'schemaformcomponent'
186
+ ? c.componentInput?.value?.properties
187
+ : c.componentInput?.runnable?.type === 'runnableByName'
188
+ ? c.componentInput?.runnable?.inlineScript?.schema?.properties
189
+ : c.componentInput?.runnable?.schema?.properties;
190
+ return (Object.values(props ?? {}).findIndex((p) => (p?.type === 'object' && p?.format === 'resource-s3_object') ||
191
+ (p?.type === 'array' &&
192
+ (p?.items?.resourceType === 's3object' || p?.items?.resourceType === 's3_object'))) !== -1);
187
193
  }
188
194
  else {
189
195
  return false;
@@ -12,18 +12,18 @@ import { classNames, truncateRev, isFlowPreview } from '../../../utils';
12
12
  import PanelSection from './settingsPanel/common/PanelSection.svelte';
13
13
  import AppTimeline from './AppTimeline.svelte';
14
14
  import HighlightCode from '../../HighlightCode.svelte';
15
- import TestJobLoader from '../../TestJobLoader.svelte';
15
+ import JobLoader from '../../JobLoader.svelte';
16
16
  import { createEventDispatcher, untrack } from 'svelte';
17
17
  let { open = $bindable(false), jobs, jobsById, hasErrors = false, selectedJobId = $bindable(undefined), refreshComponents = undefined, errorByComponent = {} } = $props();
18
18
  const dispatch = createEventDispatcher();
19
- let testJobLoader = $state();
19
+ let jobLoader = $state();
20
20
  let job = $state(undefined);
21
21
  let testIsLoading = $state(false);
22
22
  let rightColumnSelect = $state('timeline');
23
23
  $effect(() => {
24
24
  selectedJobId &&
25
25
  !selectedJobId?.includes('Frontend') &&
26
- untrack(() => selectedJobId && testJobLoader?.watchJob(selectedJobId));
26
+ untrack(() => selectedJobId && jobLoader?.watchJob(selectedJobId));
27
27
  });
28
28
  $effect(() => {
29
29
  if (selectedJobId?.includes('Frontend') && selectedJobId) {
@@ -32,7 +32,7 @@ $effect(() => {
32
32
  });
33
33
  </script>
34
34
 
35
- <TestJobLoader bind:this={testJobLoader} bind:isLoading={testIsLoading} bind:job />
35
+ <JobLoader noCode={true} bind:this={jobLoader} bind:isLoading={testIsLoading} bind:job />
36
36
 
37
37
  <Drawer bind:open size="900px">
38
38
  <DrawerContent
@@ -149,7 +149,7 @@ $effect(() => {
149
149
  <Button
150
150
  color="red"
151
151
  variant="border"
152
- on:click={() => testJobLoader?.cancelJob()}
152
+ on:click={() => jobLoader?.cancelJob()}
153
153
  >
154
154
  <Loader2 size={14} class="animate-spin mr-2" />
155
155
 
@@ -1,10 +1,10 @@
1
1
  <script lang="ts">import { getContext, untrack } from 'svelte';
2
- import TestJobLoader from '../../TestJobLoader.svelte';
2
+ import JobLoader from '../../JobLoader.svelte';
3
3
  import RunnableJobPanelInner from './RunnableJobPanelInner.svelte';
4
4
  let { float = true, hidden = false, testJob = $bindable(undefined), jobToWatch = $bindable(undefined), width = undefined } = $props();
5
5
  const { runnableJobEditorPanel, selectedComponentInEditor } = getContext('AppEditorContext');
6
6
  let testIsLoading = $state(false);
7
- let testJobLoader = $state();
7
+ let jobLoader = $state();
8
8
  function updateSelectedJob() {
9
9
  const selectedComponent = $selectedComponentInEditor;
10
10
  if (selectedComponent) {
@@ -17,7 +17,7 @@ function updateSelectedJob() {
17
17
  testJob = undefined;
18
18
  }
19
19
  jobToWatch = { componentId: selectedComponent, job: backendJob };
20
- testJobLoader?.watchJob(backendJob);
20
+ jobLoader?.watchJob(backendJob);
21
21
  }
22
22
  else {
23
23
  testJob = undefined;
@@ -38,7 +38,7 @@ $effect(() => {
38
38
  });
39
39
  </script>
40
40
 
41
- <TestJobLoader bind:this={testJobLoader} bind:isLoading={testIsLoading} bind:job={testJob} />
41
+ <JobLoader bind:this={jobLoader} bind:isLoading={testIsLoading} bind:job={testJob} />
42
42
 
43
43
  {#if ($runnableJobEditorPanel.focused && $selectedComponentInEditor) || logDrawerOpen || resultDrawerOpen || !float}
44
44
  {@const frontendJob = $runnableJobEditorPanel?.frontendJobs[$selectedComponentInEditor ?? '']}
@@ -2665,6 +2665,12 @@ export declare const components: {
2665
2665
  readonly componentInput: undefined;
2666
2666
  readonly configuration: {
2667
2667
  readonly items: StaticAppInput;
2668
+ readonly defaultValue: {
2669
+ readonly type: "static";
2670
+ readonly fieldType: "text";
2671
+ readonly value: undefined;
2672
+ readonly tooltip: "Format: $res:path/to/resource";
2673
+ };
2668
2674
  readonly placeholder: {
2669
2675
  readonly type: "static";
2670
2676
  readonly fieldType: "text";
@@ -2704,6 +2710,12 @@ export declare const components: {
2704
2710
  readonly fieldType: "text";
2705
2711
  readonly value: "postgresql";
2706
2712
  };
2713
+ readonly defaultValue: {
2714
+ readonly type: "static";
2715
+ readonly fieldType: "text";
2716
+ readonly value: undefined;
2717
+ readonly tooltip: "Format: $res:path/to/resource";
2718
+ };
2707
2719
  readonly expressOauthSetup: {
2708
2720
  readonly type: "static";
2709
2721
  readonly fieldType: "boolean";