windmill-components 1.306.10 → 1.309.2

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 (244) hide show
  1. package/package/autosize.js +6 -1
  2. package/package/common.d.ts +2 -2
  3. package/package/components/ApiConnectForm.svelte +2 -1
  4. package/package/components/AppConnect.svelte +1 -1
  5. package/package/components/DeployWorkspace.svelte +2 -2
  6. package/package/components/DeployWorkspace.svelte.d.ts +1 -1
  7. package/package/components/DeployWorkspaceDrawer.svelte.d.ts +2 -2
  8. package/package/components/Dev.svelte +2 -1
  9. package/package/components/DropdownV2.svelte +4 -1
  10. package/package/components/DropdownV2.svelte.d.ts +2 -2
  11. package/package/components/Editor.svelte +1 -1
  12. package/package/components/Editor.svelte.d.ts +2 -2
  13. package/package/components/EditorBar.svelte +25 -23
  14. package/package/components/EditorBar.svelte.d.ts +2 -3
  15. package/package/components/ErrorOrRecoveryHandler.svelte +2 -2
  16. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +1 -1
  17. package/package/components/FlowBuilder.svelte +6 -6
  18. package/package/components/FlowBuilder.svelte.d.ts +1 -1
  19. package/package/components/FlowLoopIterationPreview.svelte +1 -1
  20. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  21. package/package/components/FlowPreviewContent.svelte +1 -1
  22. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  23. package/package/components/FlowStatusViewerInner.svelte +13 -15
  24. package/package/components/FlowStatusViewerInner.svelte.d.ts +1 -1
  25. package/package/components/FlowStatusWaitingForEvents.svelte +3 -3
  26. package/package/components/FlowStatusWaitingForEvents.svelte.d.ts +1 -1
  27. package/package/components/HighlightCode.svelte.d.ts +1 -1
  28. package/package/components/InstanceSettings.svelte +4 -2
  29. package/package/components/LogViewer.svelte +65 -20
  30. package/package/components/ModulePreview.svelte +2 -2
  31. package/package/components/ModulePreview.svelte.d.ts +2 -2
  32. package/package/components/ModuleStatus.svelte +6 -7
  33. package/package/components/ModuleStatus.svelte.d.ts +2 -2
  34. package/package/components/MoveDrawer.svelte.d.ts +2 -2
  35. package/package/components/ParqetTableRenderer.svelte +3 -3
  36. package/package/components/Path.svelte.d.ts +1 -1
  37. package/package/components/ResultJobLoader.svelte.d.ts +1 -1
  38. package/package/components/SavedInputs.svelte +6 -5
  39. package/package/components/ScheduleEditorInner.svelte +6 -6
  40. package/package/components/ScriptBuilder.svelte +9 -9
  41. package/package/components/ScriptBuilder.svelte.d.ts +1 -1
  42. package/package/components/ScriptEditor.svelte +1 -1
  43. package/package/components/ScriptEditor.svelte.d.ts +4 -4
  44. package/package/components/ScriptPicker.svelte +2 -2
  45. package/package/components/ScriptPicker.svelte.d.ts +2 -3
  46. package/package/components/ShareModal.svelte +1 -2
  47. package/package/components/ShareModal.svelte.d.ts +2 -2
  48. package/package/components/SuperadminSettings.svelte +1 -1
  49. package/package/components/TestConnection.svelte +2 -2
  50. package/package/components/TestJobLoader.svelte +1 -1
  51. package/package/components/TestJobLoader.svelte.d.ts +4 -4
  52. package/package/components/WorkspaceGroup.svelte +2 -2
  53. package/package/components/apps/components/display/AppText.svelte +2 -2
  54. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +4 -0
  55. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte.d.ts +2 -0
  56. package/package/components/apps/components/display/dbtable/queries/count.js +1 -2
  57. package/package/components/apps/components/display/dbtable/queries/delete.js +20 -12
  58. package/package/components/apps/components/display/dbtable/queries/select.js +2 -1
  59. package/package/components/apps/components/display/dbtable/queries/update.js +20 -12
  60. package/package/components/apps/components/display/dbtable/utils.d.ts +2 -1
  61. package/package/components/apps/components/display/dbtable/utils.js +14 -13
  62. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +75 -1
  63. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte.d.ts +2 -1
  64. package/package/components/apps/components/display/table/AppAggridTable.svelte +10 -28
  65. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +2 -2
  66. package/package/components/apps/components/display/table/utils.js +0 -1
  67. package/package/components/apps/components/inputs/AppTextInput.svelte +1 -1
  68. package/package/components/apps/editor/AppEditorHeader.svelte +60 -45
  69. package/package/components/apps/editor/AppEditorHeader.svelte.d.ts +1 -1
  70. package/package/components/apps/editor/AppEditorTutorial.svelte +10 -6
  71. package/package/components/apps/editor/AppInputs.svelte +1 -1
  72. package/package/components/apps/editor/AppReportsDrawer.svelte +6 -4
  73. package/package/components/apps/editor/DeploymentHistory.svelte +1 -1
  74. package/package/components/apps/editor/PreviewToggle.svelte +10 -1
  75. package/package/components/apps/editor/SettingsPanel.svelte +6 -2
  76. package/package/components/apps/editor/appUtils.js +19 -7
  77. package/package/components/apps/editor/component/Component.svelte +1 -0
  78. package/package/components/apps/editor/component/ComponentCallbacks.svelte +4 -1
  79. package/package/components/apps/editor/component/components.d.ts +77 -70
  80. package/package/components/apps/editor/component/components.js +7 -1
  81. package/package/components/apps/editor/componentsPanel/CustomComponentRow.svelte +24 -21
  82. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +6 -2
  83. package/package/components/apps/editor/contextPanel/components/TableActionsOutput.svelte +1 -1
  84. package/package/components/apps/editor/inlineScriptsPanel/CacheTtlPopup.svelte +5 -4
  85. package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +2 -3
  86. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +20 -18
  87. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +1 -1
  88. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelWithTable.svelte +1 -1
  89. package/package/components/apps/editor/inlineScriptsPanel/utils.js +3 -1
  90. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +2 -0
  91. package/package/components/apps/editor/settingsPanel/mainInput/WorkspaceScriptList.svelte +1 -1
  92. package/package/components/apps/svelte-select/lib/Select.svelte.d.ts +2 -2
  93. package/package/components/apps/types.d.ts +1 -1
  94. package/package/components/apps/utils.js +3 -1
  95. package/package/components/auditLogs/AuditLogDetails.svelte +6 -4
  96. package/package/components/auditLogs/AuditLogDetails.svelte.d.ts +1 -1
  97. package/package/components/auditLogs/AuditLogsFilters.svelte +1 -1
  98. package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
  99. package/package/components/build_workers.js +5 -5
  100. package/package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +5 -2
  101. package/package/components/common/languageIcons/LanguageIcon.svelte +13 -12
  102. package/package/components/common/table/AppRow.svelte +1 -1
  103. package/package/components/common/table/Row.svelte.d.ts +1 -1
  104. package/package/components/copilot/FlowCopilotDrawer.svelte +6 -4
  105. package/package/components/copilot/ScriptGen.svelte +5 -5
  106. package/package/components/copilot/ScriptGen.svelte.d.ts +1 -1
  107. package/package/components/copilot/StepGen.svelte +1 -1
  108. package/package/components/copilot/flow.d.ts +3 -3
  109. package/package/components/copilot/flow.js +1 -1
  110. package/package/components/copilot/lib.d.ts +2 -2
  111. package/package/components/copilot/lib.js +1 -1
  112. package/package/components/details/WebhooksPanel.svelte +1 -1
  113. package/package/components/details/utils.d.ts +1 -1
  114. package/package/components/details/utils.js +1 -1
  115. package/package/components/flows/FlowProgressBar.svelte +3 -4
  116. package/package/components/flows/FlowProgressBar.svelte.d.ts +1 -1
  117. package/package/components/flows/content/FlowInputs.svelte +5 -8
  118. package/package/components/flows/content/FlowLoop.svelte.d.ts +1 -1
  119. package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -1
  120. package/package/components/flows/content/FlowModuleWrapper.svelte +5 -5
  121. package/package/components/flows/content/FlowWhileLoop.svelte +10 -3
  122. package/package/components/flows/content/FlowWhileLoop.svelte.d.ts +1 -1
  123. package/package/components/flows/content/ScriptEditorDrawer.svelte +2 -1
  124. package/package/components/flows/content/SuspendDrawer.svelte +5 -6
  125. package/package/components/flows/dfs.d.ts +1 -1
  126. package/package/components/flows/flowStateUtils.d.ts +2 -2
  127. package/package/components/flows/flowStateUtils.js +1 -1
  128. package/package/components/graph/FlowGraph.svelte +3 -3
  129. package/package/components/graph/model.d.ts +1 -1
  130. package/package/components/graph/util.d.ts +2 -2
  131. package/package/components/graph/util.js +5 -6
  132. package/package/components/home/ItemsList.svelte +1 -1
  133. package/package/components/home/ItemsList.svelte.d.ts +1 -1
  134. package/package/components/icons/VismaIcon.svelte +10 -0
  135. package/package/components/icons/VismaIcon.svelte.d.ts +17 -0
  136. package/package/components/icons/index.d.ts +2 -0
  137. package/package/components/icons/index.js +3 -1
  138. package/package/components/jobs/JobPreview.svelte +2 -2
  139. package/package/components/runs/JobLoader.svelte +26 -8
  140. package/package/components/runs/JobLoader.svelte.d.ts +1 -1
  141. package/package/components/runs/JobPreview.svelte +3 -3
  142. package/package/components/runs/QueuePopover.svelte +1 -1
  143. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  144. package/package/components/scriptEditor/LogPanel.svelte +2 -2
  145. package/package/components/scriptEditor/LogPanel.svelte.d.ts +2 -2
  146. package/package/components/tutorials/FlowErrorHandler.svelte +1 -2
  147. package/package/components/tutorials/utils.js +1 -1
  148. package/package/gen/core/ApiError.d.ts +1 -1
  149. package/package/gen/core/ApiRequestOptions.d.ts +5 -5
  150. package/package/gen/core/ApiResult.d.ts +3 -3
  151. package/package/gen/core/CancelablePromise.d.ts +10 -4
  152. package/package/gen/core/CancelablePromise.js +38 -39
  153. package/package/gen/core/OpenAPI.d.ts +17 -6
  154. package/package/gen/core/OpenAPI.js +25 -5
  155. package/package/gen/core/request.d.ts +6 -7
  156. package/package/gen/core/request.js +77 -57
  157. package/package/gen/enums.gen.d.ts +149 -0
  158. package/package/gen/enums.gen.js +150 -0
  159. package/package/gen/index.d.ts +5 -178
  160. package/package/gen/index.js +5 -52
  161. package/package/gen/models/AppWithLastVersionWDraft.d.ts +2 -2
  162. package/package/gen/models/Flow.d.ts +1 -1
  163. package/package/gen/models/FlowModuleValue.d.ts +1 -1
  164. package/package/gen/models/FlowStatus.d.ts +2 -2
  165. package/package/gen/models/InputTransform.d.ts +1 -1
  166. package/package/gen/models/Job.d.ts +2 -2
  167. package/package/gen/models/MainArgSignature.d.ts +4 -4
  168. package/package/gen/models/NewScriptWithDraft.d.ts +2 -2
  169. package/package/gen/models/OpenFlowWPath.d.ts +2 -2
  170. package/package/gen/models/ScheduleWJobs.d.ts +2 -2
  171. package/package/gen/schemas.gen.d.ts +3155 -0
  172. package/package/gen/schemas.gen.js +3217 -0
  173. package/package/gen/services/AdminService.d.ts +3 -3
  174. package/package/gen/services/AdminService.js +12 -12
  175. package/package/gen/services/AppService.d.ts +16 -16
  176. package/package/gen/services/AppService.js +69 -69
  177. package/package/gen/services/AuditService.d.ts +2 -2
  178. package/package/gen/services/AuditService.js +15 -15
  179. package/package/gen/services/CaptureService.d.ts +3 -3
  180. package/package/gen/services/CaptureService.js +13 -13
  181. package/package/gen/services/ConcurrencyGroupsService.d.ts +1 -1
  182. package/package/gen/services/ConcurrencyGroupsService.js +4 -4
  183. package/package/gen/services/ConfigService.d.ts +3 -3
  184. package/package/gen/services/ConfigService.js +10 -10
  185. package/package/gen/services/DraftService.d.ts +2 -2
  186. package/package/gen/services/DraftService.js +8 -8
  187. package/package/gen/services/FavoriteService.d.ts +2 -2
  188. package/package/gen/services/FavoriteService.js +6 -6
  189. package/package/gen/services/FlowService.d.ts +21 -21
  190. package/package/gen/services/FlowService.js +58 -58
  191. package/package/gen/services/FolderService.d.ts +9 -9
  192. package/package/gen/services/FolderService.js +36 -36
  193. package/package/gen/services/GranularAclService.d.ts +3 -3
  194. package/package/gen/services/GranularAclService.js +15 -15
  195. package/package/gen/services/GroupService.d.ts +14 -14
  196. package/package/gen/services/GroupService.js +50 -50
  197. package/package/gen/services/HelpersService.d.ts +14 -14
  198. package/package/gen/services/HelpersService.js +70 -70
  199. package/package/gen/services/InputService.d.ts +5 -5
  200. package/package/gen/services/InputService.js +26 -26
  201. package/package/gen/services/IntegrationService.d.ts +1 -1
  202. package/package/gen/services/IntegrationService.js +3 -3
  203. package/package/gen/services/JobService.d.ts +51 -42
  204. package/package/gen/services/JobService.js +326 -311
  205. package/package/gen/services/MetricsService.d.ts +1 -1
  206. package/package/gen/services/MetricsService.js +4 -4
  207. package/package/gen/services/OauthService.d.ts +6 -6
  208. package/package/gen/services/OauthService.js +22 -22
  209. package/package/gen/services/OidcService.d.ts +1 -1
  210. package/package/gen/services/OidcService.js +4 -4
  211. package/package/gen/services/RawAppService.d.ts +6 -6
  212. package/package/gen/services/RawAppService.js +30 -30
  213. package/package/gen/services/ResourceService.d.ts +19 -19
  214. package/package/gen/services/ResourceService.js +77 -77
  215. package/package/gen/services/ScheduleService.d.ts +10 -10
  216. package/package/gen/services/ScheduleService.js +41 -41
  217. package/package/gen/services/ScriptService.d.ts +23 -23
  218. package/package/gen/services/ScriptService.js +104 -104
  219. package/package/gen/services/SettingService.d.ts +6 -6
  220. package/package/gen/services/SettingService.js +16 -16
  221. package/package/gen/services/SettingsService.js +4 -4
  222. package/package/gen/services/UserService.d.ts +26 -26
  223. package/package/gen/services/UserService.js +85 -85
  224. package/package/gen/services/VariableService.d.ts +9 -9
  225. package/package/gen/services/VariableService.js +36 -36
  226. package/package/gen/services/WorkerService.d.ts +2 -2
  227. package/package/gen/services/WorkerService.js +11 -11
  228. package/package/gen/services/WorkspaceService.d.ts +39 -39
  229. package/package/gen/services/WorkspaceService.js +118 -118
  230. package/package/gen/services.gen.d.ts +1928 -0
  231. package/package/gen/services.gen.js +5309 -0
  232. package/package/gen/types.gen.d.ts +6898 -0
  233. package/package/gen/types.gen.js +2 -0
  234. package/package/hub.d.ts +1 -1
  235. package/package/infer.d.ts +1 -1
  236. package/package/infer.js +2 -2
  237. package/package/script_helpers.d.ts +3 -3
  238. package/package/script_helpers.js +2 -2
  239. package/package/scripts.d.ts +2 -2
  240. package/package/scripts.js +20 -16
  241. package/package/stores.d.ts +1 -2
  242. package/package/utils.d.ts +1 -1
  243. package/package/utils.js +1 -1
  244. package/package.json +6 -6
@@ -25,6 +25,7 @@ export let configuration;
25
25
  export let customCss = undefined;
26
26
  export let render;
27
27
  export let initializing = true;
28
+ export let actions = [];
28
29
  $: table = resolvedConfig.type.configuration?.[resolvedConfig.type?.selected]?.table;
29
30
  $: table !== null && render && clearColumns();
30
31
  function clearColumns() {
@@ -95,6 +96,7 @@ let outputs = initOutput($worldStore, id, {
95
96
  selectedRow: {},
96
97
  selectedRows: [],
97
98
  result: [],
99
+ inputs: {},
98
100
  loading: false,
99
101
  page: 0,
100
102
  newChange: { row: 0, column: '', value: undefined },
@@ -414,6 +416,7 @@ $: hideInsert = resolvedConfig.hideInsert;
414
416
  bind:this={deleteRow}
415
417
  />
416
418
  {/if}
419
+
417
420
  <UpdateCell {id} bind:this={updateCell} />
418
421
  {#if render}
419
422
  <DbExplorerCount
@@ -484,6 +487,7 @@ $: hideInsert = resolvedConfig.hideInsert;
484
487
  containerHeight={componentContainerHeight - (buttonContainerHeight ?? 0)}
485
488
  on:update={onUpdate}
486
489
  on:delete={onDelete}
490
+ {actions}
487
491
  />
488
492
  {/key}
489
493
  {/if}
@@ -1,5 +1,6 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  import type { ComponentCustomCSS, RichConfigurations } from '../../../types';
3
+ import { type TableAction } from '../../../editor/component';
3
4
  declare const __propDef: {
4
5
  props: {
5
6
  id: string;
@@ -7,6 +8,7 @@ declare const __propDef: {
7
8
  customCss?: ComponentCustomCSS<'dbexplorercomponent'> | undefined;
8
9
  render: boolean;
9
10
  initializing?: boolean | undefined;
11
+ actions?: TableAction[] | undefined;
10
12
  };
11
13
  events: {
12
14
  [evt: string]: CustomEvent<any>;
@@ -1,4 +1,3 @@
1
- import { Preview } from '../../../../../../gen';
2
1
  import { buildParameters } from '../utils';
3
2
  import { getLanguageByResourceType, buildVisibleFieldList } from '../utils';
4
3
  function makeCountQuery(dbType, table, whereClause = undefined, columnDefs) {
@@ -89,7 +88,7 @@ function makeCountQuery(dbType, table, whereClause = undefined, columnDefs) {
89
88
  query += quicksearchCondition;
90
89
  }
91
90
  if (!whereClause &&
92
- (dbType === Preview.language.MYSQL ||
91
+ (dbType === 'mysql' ||
93
92
  dbType === 'postgresql' ||
94
93
  dbType === 'snowflake' ||
95
94
  dbType === 'bigquery')) {
@@ -1,32 +1,40 @@
1
1
  import { getLanguageByResourceType, buildParameters } from '../utils';
2
2
  function deleteWithAllValues(table, columns, dbType) {
3
- let query = buildParameters(columns, dbType);
3
+ let query = buildParameters(dbType === 'snowflake' ? columns.flatMap((c) => [c, c]) : columns, dbType);
4
4
  switch (dbType) {
5
5
  case 'postgresql': {
6
6
  const conditions = columns
7
- .map((c, i) => `${c.field} = $${i + 1}::text::${c.datatype} `)
8
- .join(' AND ');
9
- query += `\nDELETE FROM ${table} WHERE ${conditions} RETURNING 1;`;
7
+ .map((c, i) => `($${i + 1}::${c.datatype} IS NULL AND ${c.field} IS NULL OR ${c.field} = $${i + 1}::${c.datatype})`)
8
+ .join('\n AND ');
9
+ query += `\nDELETE FROM ${table} \nWHERE ${conditions} RETURNING 1;`;
10
10
  return query;
11
11
  }
12
12
  case 'mysql': {
13
- const conditions = columns.map((c) => `${c.field} = :${c.field}`).join(' AND ');
14
- query += `\nDELETE FROM ${table} WHERE ${conditions}`;
13
+ const conditions = columns
14
+ .map((c) => `(:${c.field} IS NULL AND ${c.field} IS NULL OR ${c.field} = :${c.field})`)
15
+ .join('\n AND ');
16
+ query += `\nDELETE FROM ${table} \nWHERE ${conditions}`;
15
17
  return query;
16
18
  }
17
19
  case 'ms_sql_server': {
18
- const conditions = columns.map((c, i) => `${c.field} = @p${i + 1} `).join(' AND ');
19
- query += `\nDELETE FROM ${table} WHERE ${conditions}`;
20
+ const conditions = columns
21
+ .map((c, i) => `(@p${i + 1} IS NULL AND ${c.field} IS NULL OR ${c.field} = @p${i + 1})`)
22
+ .join('\n AND ');
23
+ query += `\nDELETE FROM ${table} \nWHERE ${conditions}`;
20
24
  return query;
21
25
  }
22
26
  case 'snowflake': {
23
- const conditions = columns.map((c, i) => `${c.field} = ? `).join(' AND ');
24
- query += `\nDELETE FROM ${table} WHERE ${conditions}`;
27
+ const conditions = columns
28
+ .map((c, i) => `(? = 'null' AND ${c.field} IS NULL OR ${c.field} = ?)`)
29
+ .join('\n AND ');
30
+ query += `\nDELETE FROM ${table} \nWHERE ${conditions}`;
25
31
  return query;
26
32
  }
27
33
  case 'bigquery': {
28
- const conditions = columns.map((c, i) => `${c.field} = @${c.field}`).join(' AND ');
29
- query += `\nDELETE FROM ${table} WHERE ${conditions}`;
34
+ const conditions = columns
35
+ .map((c, i) => `(CAST(@${c.field} AS STRING) = 'null' AND ${c.field} IS NULL OR ${c.field} = @${c.field})`)
36
+ .join('\n AND ');
37
+ query += `\nDELETE FROM ${table} \nWHERE ${conditions}`;
30
38
  return query;
31
39
  }
32
40
  default:
@@ -192,7 +192,8 @@ export function getSelectInput(resource, table, columnDefs, whereClause, dbType,
192
192
  }
193
193
  },
194
194
  type: 'runnable',
195
- fieldType: 'object'
195
+ fieldType: 'object',
196
+ hideRefreshButton: false
196
197
  };
197
198
  return getQuery;
198
199
  }
@@ -5,35 +5,43 @@ function updateWithAllValues(table, column, columns, dbType) {
5
5
  field: 'value_to_update',
6
6
  datatype: column.datatype
7
7
  },
8
- ...columns
8
+ ...(dbType === 'snowflake' ? columns.flatMap((c) => [c, c]) : columns)
9
9
  ], dbType);
10
10
  query += `\n`;
11
11
  switch (dbType) {
12
12
  case 'postgresql': {
13
13
  const conditions = columns
14
- .map((c, i) => `${c.field} = $${i + 2}::text::${c.datatype} `)
15
- .join(' AND ');
16
- query += `\nUPDATE ${table} SET ${column.field} = $1::text::${column.datatype} WHERE ${conditions} RETURNING 1`;
14
+ .map((c, i) => `($${i + 2}::${c.datatype} IS NULL AND ${c.field} IS NULL OR ${c.field} = $${i + 2}::${c.datatype})`)
15
+ .join('\n AND ');
16
+ query += `\nUPDATE ${table} SET ${column.field} = $1::${column.datatype} \nWHERE ${conditions} RETURNING 1`;
17
17
  return query;
18
18
  }
19
19
  case 'mysql': {
20
- const conditions = columns.map((c) => `${c.field} = :${c.field}`).join(' AND ');
21
- query += `\nUPDATE ${table} SET ${column.field} = :value_to_update WHERE ${conditions}`;
20
+ const conditions = columns
21
+ .map((c) => `(:${c.field} IS NULL AND ${c.field} IS NULL OR ${c.field} = :${c.field})`)
22
+ .join('\n AND ');
23
+ query += `\nUPDATE ${table} SET ${column.field} = :value_to_update \nWHERE ${conditions}`;
22
24
  return query;
23
25
  }
24
26
  case 'ms_sql_server': {
25
- const conditions = columns.map((c, i) => `${c.field} = @p${i + 2} `).join(' AND ');
26
- query += `\nUPDATE ${table} SET ${column.field} = @p1 WHERE ${conditions}`;
27
+ const conditions = columns
28
+ .map((c, i) => `(@p${i + 2} IS NULL AND ${c.field} IS NULL OR ${c.field} = @p${i + 2})`)
29
+ .join('\n AND ');
30
+ query += `\nUPDATE ${table} SET ${column.field} = @p1 \nWHERE ${conditions}`;
27
31
  return query;
28
32
  }
29
33
  case 'snowflake': {
30
- const conditions = columns.map((c, i) => `${c.field} = ? `).join(' AND ');
31
- query += `\nUPDATE ${table} SET ${column.field} = ? WHERE ${conditions}`;
34
+ const conditions = columns
35
+ .map((c, i) => `(? = 'null' AND ${c.field} IS NULL OR ${c.field} = ?)`)
36
+ .join('\n AND ');
37
+ query += `\nUPDATE ${table} SET ${column.field} = ? \nWHERE ${conditions}`;
32
38
  return query;
33
39
  }
34
40
  case 'bigquery': {
35
- const conditions = columns.map((c, i) => `${c.field} = @${c.field}`).join(' AND ');
36
- query += `\nUPDATE ${table} SET ${column.field} = @value_to_update WHERE ${conditions}`;
41
+ const conditions = columns
42
+ .map((c, i) => `(CAST(@${c.field} AS STRING) = 'null' AND ${c.field} IS NULL OR ${c.field} = @${c.field})`)
43
+ .join('\n AND ');
44
+ query += `\nUPDATE ${table} SET ${column.field} = @value_to_update \nWHERE ${conditions}`;
37
45
  return query;
38
46
  }
39
47
  default:
@@ -1,3 +1,4 @@
1
+ import { type Preview } from '../../../../../gen';
1
2
  import type { DBSchema, DBSchemas, SQLSchema } from '../../../../../stores';
2
3
  import { type IntrospectionQuery } from 'graphql';
3
4
  export declare enum ColumnIdentity {
@@ -75,7 +76,7 @@ export declare function formatGraphqlSchema(schema: IntrospectionQuery): string;
75
76
  export declare function getFieldType(type: string, databaseType: DbType): "number" | "text" | "date" | "checkbox";
76
77
  export type DbType = 'mysql' | 'ms_sql_server' | 'postgresql' | 'snowflake' | 'bigquery';
77
78
  export declare function buildVisibleFieldList(columnDefs: ColumnDef[], dbType: DbType): string[];
78
- export declare function getLanguageByResourceType(name: string): any;
79
+ export declare function getLanguageByResourceType(name: string): Preview['language'];
79
80
  export declare function buildParameters(columns: Array<{
80
81
  field: string;
81
82
  datatype: string;
@@ -1,4 +1,4 @@
1
- import { JobService, Preview, ResourceService } from '../../../../../gen';
1
+ import { JobService, ResourceService } from '../../../../../gen';
2
2
  import { buildClientSchema, getIntrospectionQuery, printSchema } from 'graphql';
3
3
  import { tryEvery } from '../../../../../utils';
4
4
  import { stringifySchema } from '../../../../copilot/lib';
@@ -14,10 +14,10 @@ export async function loadTableMetaData(resource, workspace, table, resourceType
14
14
  }
15
15
  let code = '';
16
16
  if (resourceType === 'mysql') {
17
- const resourceObj = await ResourceService.getResourceValue({
17
+ const resourceObj = (await ResourceService.getResourceValue({
18
18
  workspace,
19
19
  path: resource.split(':')[1]
20
- });
20
+ }));
21
21
  code = `
22
22
  SELECT
23
23
  COLUMN_NAME as field,
@@ -135,10 +135,10 @@ order by c.ORDINAL_POSITION;`;
135
135
  }
136
136
  });
137
137
  await new Promise((resolve) => setTimeout(resolve, 3000));
138
- const testResult = await JobService.getCompletedJob({
138
+ const testResult = (await JobService.getCompletedJob({
139
139
  workspace: workspace,
140
140
  id: job
141
- });
141
+ }));
142
142
  if (testResult.success) {
143
143
  attempts = maxRetries;
144
144
  if (resourceType === 'ms_sql_server') {
@@ -379,7 +379,8 @@ export async function getDbSchemas(resourceType, resourcePath, workspace, dbSche
379
379
  };
380
380
  }
381
381
  else {
382
- if (typeof testResult.result !== 'object' || !('__schema' in testResult.result)) {
382
+ if (typeof testResult.result !== 'object' ||
383
+ !('__schema' in (testResult?.result ?? {}))) {
383
384
  console.error('Invalid GraphQL schema');
384
385
  errorCallback('Invalid GraphQL schema');
385
386
  }
@@ -538,11 +539,11 @@ export function buildVisibleFieldList(columnDefs, dbType) {
538
539
  }
539
540
  export function getLanguageByResourceType(name) {
540
541
  const language = {
541
- postgresql: Preview.language.POSTGRESQL,
542
- mysql: Preview.language.MYSQL,
543
- ms_sql_server: Preview.language.MSSQL,
544
- snowflake: Preview.language.SNOWFLAKE,
545
- bigquery: Preview.language.BIGQUERY
542
+ postgresql: 'postgresql',
543
+ mysql: 'mysql',
544
+ ms_sql_server: 'mssql',
545
+ snowflake: 'snowflake',
546
+ bigquery: 'bigquery'
546
547
  };
547
548
  return language[name];
548
549
  }
@@ -586,10 +587,10 @@ export async function getTablesByResource(schema, dbType, resourcePath, workspac
586
587
  return paths;
587
588
  }
588
589
  case 'mysql': {
589
- const resourceObj = await ResourceService.getResourceValue({
590
+ const resourceObj = (await ResourceService.getResourceValue({
590
591
  workspace,
591
592
  path: resourcePath
592
- });
593
+ }));
593
594
  const paths = [];
594
595
  for (const key in s?.schema) {
595
596
  for (const subKey in s.schema[key]) {
@@ -11,6 +11,7 @@ import ResolveStyle from '../../helpers/ResolveStyle.svelte';
11
11
  import { Button } from '../../../../common';
12
12
  import { cellRendererFactory } from './utils';
13
13
  import { Trash2 } from 'lucide-svelte';
14
+ import AppAggridTableActions from './AppAggridTableActions.svelte';
14
15
  // import 'ag-grid-community/dist/styles/ag-theme-alpine-dark.css'
15
16
  export let id;
16
17
  export let customCss = undefined;
@@ -20,7 +21,10 @@ export let datasource;
20
21
  export let state = undefined;
21
22
  export let outputs;
22
23
  export let allowDelete;
23
- const { app, selectedComponent, componentControl, darkMode } = getContext('AppViewerContext');
24
+ export let actions = [];
25
+ let inputs = {};
26
+ const context = getContext('AppViewerContext');
27
+ const { app, selectedComponent, componentControl, darkMode } = context;
24
28
  let css = initCss($app.css?.aggridcomponent, customCss);
25
29
  // let result: any[] | undefined = undefined
26
30
  // $: result && setValues()
@@ -95,6 +99,51 @@ function onCellValueChanged(event) {
95
99
  let api = undefined;
96
100
  let eGui;
97
101
  $: eGui && mountGrid();
102
+ function refreshActions(actions) {
103
+ if (!deepEqual(actions, lastActions)) {
104
+ lastActions = [...actions];
105
+ updateOptions();
106
+ }
107
+ }
108
+ let lastActions = undefined;
109
+ $: actions && refreshActions(actions);
110
+ const tableActionsFactory = cellRendererFactory((c, p) => {
111
+ const rowIndex = p.node.rowIndex ?? 0;
112
+ const row = p.data;
113
+ new AppAggridTableActions({
114
+ target: c.eGui,
115
+ props: {
116
+ id: id,
117
+ actions,
118
+ rowIndex,
119
+ row,
120
+ render: true,
121
+ wrapActions: resolvedConfig.wrapActions,
122
+ onSet: (id, value) => {
123
+ if (!inputs[id]) {
124
+ inputs[id] = { [rowIndex]: value };
125
+ }
126
+ else {
127
+ inputs[id] = { ...inputs[id], [rowIndex]: value };
128
+ }
129
+ outputs?.inputs.set(inputs, true);
130
+ },
131
+ onRemove: (id) => {
132
+ if (inputs?.[id] == undefined) {
133
+ return;
134
+ }
135
+ delete inputs[id][rowIndex];
136
+ inputs[id] = { ...inputs[id] };
137
+ if (Object.keys(inputs?.[id] ?? {}).length == 0) {
138
+ delete inputs[id];
139
+ inputs = { ...inputs };
140
+ }
141
+ outputs?.inputs.set(inputs, true);
142
+ }
143
+ },
144
+ context: new Map([['AppViewerContext', context]])
145
+ });
146
+ });
98
147
  function transformColumnDefs(columnDefs) {
99
148
  const { isValid, errors } = validateColumnDefs(columnDefs);
100
149
  if (!isValid) {
@@ -132,6 +181,17 @@ function transformColumnDefs(columnDefs) {
132
181
  width: 100
133
182
  });
134
183
  }
184
+ if (actions && actions.length > 0) {
185
+ r.push({
186
+ headerName: 'Actions',
187
+ cellRenderer: tableActionsFactory,
188
+ autoHeight: true,
189
+ cellStyle: { textAlign: 'center' },
190
+ cellClass: 'grid-cell-centered',
191
+ lockPosition: 'right',
192
+ ...(!resolvedConfig?.wrapActions ? { minWidth: 130 * actions?.length } : {})
193
+ });
194
+ }
135
195
  return r;
136
196
  }
137
197
  let firstRow = 0;
@@ -165,6 +225,13 @@ function mountGrid() {
165
225
  cacheBlockSize: 100,
166
226
  cacheOverflowSize: 10,
167
227
  maxBlocksInCache: 20,
228
+ ...(resolvedConfig?.wrapActions
229
+ ? {
230
+ rowHeight: Math.max(44, actions.length * 48)
231
+ }
232
+ : {
233
+ rowHeight: 44
234
+ }),
168
235
  suppressColumnMoveAnimation: true,
169
236
  rowSelection: resolvedConfig?.multipleSelectable ? 'multiple' : 'single',
170
237
  rowMultiSelectWithClick: resolvedConfig?.multipleSelectable
@@ -240,6 +307,13 @@ function updateOptions() {
240
307
  editable: resolvedConfig?.allEditable,
241
308
  onCellValueChanged
242
309
  },
310
+ ...(resolvedConfig?.wrapActions
311
+ ? {
312
+ rowHeight: Math.max(44, actions.length * 48)
313
+ }
314
+ : {
315
+ rowHeight: 44
316
+ }),
243
317
  rowSelection: resolvedConfig?.multipleSelectable ? 'multiple' : 'single',
244
318
  rowMultiSelectWithClick: resolvedConfig?.multipleSelectable
245
319
  ? resolvedConfig.rowMultiselectWithClick
@@ -1,7 +1,7 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  import { type IDatasource } from 'ag-grid-community';
3
3
  import type { ComponentCustomCSS } from '../../../types';
4
- import type { components } from '../../../editor/component';
4
+ import type { TableAction, components } from '../../../editor/component';
5
5
  import 'ag-grid-community/styles/ag-grid.css';
6
6
  import 'ag-grid-community/styles/ag-theme-alpine.css';
7
7
  import type { Output } from '../../../rx';
@@ -16,6 +16,7 @@ declare const __propDef: {
16
16
  state?: any;
17
17
  outputs: Record<string, Output<any>>;
18
18
  allowDelete: boolean;
19
+ actions?: TableAction[] | undefined;
19
20
  clearRows?: (() => void) | undefined;
20
21
  };
21
22
  events: {
@@ -1,6 +1,6 @@
1
1
  <script>import { GridApi, createGrid } from 'ag-grid-community';
2
2
  import { isObject, sendUserToast } from '../../../../../utils';
3
- import { SvelteComponent, getContext, onDestroy } from 'svelte';
3
+ import { getContext, onDestroy } from 'svelte';
4
4
  import RunnableWrapper from '../../helpers/RunnableWrapper.svelte';
5
5
  import { initConfig, initOutput } from '../../../editor/appUtils';
6
6
  import { components } from '../../../editor/component';
@@ -14,6 +14,7 @@ import { twMerge } from 'tailwind-merge';
14
14
  import { initCss } from '../../../utils';
15
15
  import ResolveStyle from '../../helpers/ResolveStyle.svelte';
16
16
  import AppAggridTableActions from './AppAggridTableActions.svelte';
17
+ import { cellRendererFactory } from './utils';
17
18
  // import 'ag-grid-community/dist/styles/ag-theme-alpine-dark.css'
18
19
  export let id;
19
20
  export let componentInput;
@@ -125,33 +126,20 @@ let api = undefined;
125
126
  let eGui;
126
127
  let state = undefined;
127
128
  $: loaded && eGui && mountGrid();
128
- const cachedDivs = new Map();
129
129
  function refreshActions(actions) {
130
130
  if (!deepEqual(actions, lastActions)) {
131
131
  lastActions = [...actions];
132
- cachedDivs.forEach((cachedDiv) => {
133
- cachedDiv.svelteComponent.$destroy();
134
- cachedDiv.div.remove();
135
- });
136
- cachedDivs.clear();
137
132
  updateOptions();
138
133
  }
139
134
  }
140
135
  let lastActions = undefined;
141
136
  $: actions && refreshActions(actions);
142
137
  let inputs = {};
143
- function actionRenderer(params) {
144
- const { rowIndex, data: row } = params;
145
- if (rowIndex === -1 || actions == undefined || actions?.length == 0) {
146
- return null;
147
- }
148
- if (cachedDivs.has(rowIndex)) {
149
- return cachedDivs.get(rowIndex)?.div;
150
- }
151
- const div = document.createElement('div');
152
- div.classList.add('flex', 'flex-row', 'items-center', 'w-full', 'h-full');
153
- const svelteComponent = new AppAggridTableActions({
154
- target: div,
138
+ const tableActionsFactory = cellRendererFactory((c, p) => {
139
+ const rowIndex = p.node.rowIndex ?? 0;
140
+ const row = p.data;
141
+ new AppAggridTableActions({
142
+ target: c.eGui,
155
143
  props: {
156
144
  id: id,
157
145
  actions,
@@ -183,13 +171,7 @@ function actionRenderer(params) {
183
171
  },
184
172
  context: new Map([['AppViewerContext', context]])
185
173
  });
186
- cachedDivs.set(rowIndex, {
187
- div,
188
- actions,
189
- svelteComponent
190
- });
191
- return div;
192
- }
174
+ });
193
175
  function mountGrid() {
194
176
  if (eGui) {
195
177
  try {
@@ -200,7 +182,7 @@ function mountGrid() {
200
182
  if (actions && actions.length > 0) {
201
183
  columnDefs.push({
202
184
  headerName: 'Actions',
203
- cellRenderer: actionRenderer,
185
+ cellRenderer: tableActionsFactory,
204
186
  autoHeight: true,
205
187
  cellStyle: { textAlign: 'center' },
206
188
  cellClass: 'grid-cell-centered',
@@ -311,7 +293,7 @@ function updateOptions() {
311
293
  if (actions && actions.length > 0) {
312
294
  columnDefs.push({
313
295
  headerName: 'Actions',
314
- cellRenderer: actionRenderer,
296
+ cellRenderer: tableActionsFactory,
315
297
  autoHeight: true,
316
298
  cellStyle: { textAlign: 'center' },
317
299
  cellClass: 'grid-cell-centered',
@@ -24,8 +24,8 @@ const { selectedComponent, hoverStore, mode, connectingInput } = getContext('App
24
24
  <RowWrapper value={row} index={rowIndex} {onSet} {onRemove}>
25
25
  <div
26
26
  class={twMerge(
27
- 'flex flex-row justify-center items-center gap-4 h-full px-4 py-1',
28
- !wrapActions ? 'flex-wrap' : ''
27
+ 'flex flex-row justify-center items-center gap-4 h-full px-4 py-1 w-full',
28
+ wrapActions ? 'flex-wrap' : ''
29
29
  )}
30
30
  >
31
31
  {#each actions as action, actionIndex}
@@ -22,7 +22,6 @@ export class AbstractCellRenderer {
22
22
  }
23
23
  refresh(params) {
24
24
  this.value = params.value;
25
- this.eGui.innerHTML = '';
26
25
  return true;
27
26
  }
28
27
  }
@@ -146,7 +146,7 @@ async function handleAfterIcon() {
146
146
  <input
147
147
  class={twMerge(
148
148
  classInput,
149
- resolvedConfig.beforeIcon != undefined ? '!pl-8' : '',
149
+ resolvedConfig.beforeIcon ? '!pl-8' : '',
150
150
  resolvedConfig.afterIcon ? '!pr-8' : ''
151
151
  )}
152
152
  style={css?.input?.style ?? ''}