@quillsql/react 2.13.35 → 2.13.36

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 (185) hide show
  1. package/dist/cjs/Chart.d.ts +0 -1
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +17 -14
  4. package/dist/cjs/ChartBuilder.d.ts +1 -0
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +178 -96
  7. package/dist/cjs/Context.d.ts.map +1 -1
  8. package/dist/cjs/Context.js +6 -8
  9. package/dist/cjs/Dashboard.js +17 -7
  10. package/dist/cjs/ReportBuilder.d.ts +2 -0
  11. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  12. package/dist/cjs/ReportBuilder.js +398 -271
  13. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  14. package/dist/cjs/SQLEditor.js +33 -11
  15. package/dist/cjs/Table.d.ts.map +1 -1
  16. package/dist/cjs/Table.js +17 -1
  17. package/dist/cjs/components/Chart/InternalChart.d.ts +0 -1
  18. package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
  19. package/dist/cjs/components/Chart/InternalChart.js +6 -7
  20. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  21. package/dist/cjs/components/Dashboard/DataLoader.js +75 -30
  22. package/dist/cjs/components/QuillMultiSelectSectionList.d.ts.map +1 -1
  23. package/dist/cjs/components/QuillMultiSelectSectionList.js +21 -16
  24. package/dist/cjs/components/QuillMultiSelectWithCombo.js +18 -8
  25. package/dist/cjs/components/QuillSelectWithCombo.js +17 -7
  26. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts +1 -1
  27. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  28. package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +2 -2
  29. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +16 -4
  30. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  31. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +9 -18
  32. package/dist/cjs/components/UiComponents.d.ts +2 -1
  33. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  34. package/dist/cjs/components/UiComponents.js +44 -28
  35. package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
  36. package/dist/cjs/hooks/useAskQuill.js +28 -4
  37. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  38. package/dist/cjs/hooks/useQuill.js +9 -1
  39. package/dist/cjs/hooks/useVirtualTables.d.ts.map +1 -1
  40. package/dist/cjs/hooks/useVirtualTables.js +11 -35
  41. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  42. package/dist/cjs/internals/ReportBuilder/PivotForm.js +14 -2
  43. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +12 -11
  44. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  45. package/dist/cjs/internals/ReportBuilder/PivotModal.js +63 -18
  46. package/dist/cjs/models/Client.d.ts +4 -5
  47. package/dist/cjs/models/Client.d.ts.map +1 -1
  48. package/dist/cjs/models/Pivot.d.ts +10 -0
  49. package/dist/cjs/models/Pivot.d.ts.map +1 -1
  50. package/dist/cjs/models/Report.d.ts +13 -1
  51. package/dist/cjs/models/Report.d.ts.map +1 -1
  52. package/dist/cjs/utils/astFilterProcessing.d.ts +1 -1
  53. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
  54. package/dist/cjs/utils/astFilterProcessing.js +799 -64
  55. package/dist/cjs/utils/astProcessing.d.ts +4 -1
  56. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  57. package/dist/cjs/utils/astProcessing.js +2 -2
  58. package/dist/cjs/utils/client.d.ts.map +1 -1
  59. package/dist/cjs/utils/client.js +6 -3
  60. package/dist/cjs/utils/columnProcessing.d.ts +1 -0
  61. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  62. package/dist/cjs/utils/columnProcessing.js +1 -0
  63. package/dist/cjs/utils/dashboard.d.ts +2 -1
  64. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  65. package/dist/cjs/utils/dashboard.js +38 -10
  66. package/dist/cjs/utils/filterProcessing.d.ts +1 -1
  67. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  68. package/dist/cjs/utils/merge.d.ts +16 -0
  69. package/dist/cjs/utils/merge.d.ts.map +1 -1
  70. package/dist/cjs/utils/merge.js +210 -0
  71. package/dist/cjs/utils/paginationProcessing.d.ts +1 -1
  72. package/dist/cjs/utils/paginationProcessing.d.ts.map +1 -1
  73. package/dist/cjs/utils/paginationProcessing.js +3 -2
  74. package/dist/cjs/utils/pivotConstructor.d.ts +19 -9
  75. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  76. package/dist/cjs/utils/pivotConstructor.js +90 -34
  77. package/dist/cjs/utils/queryConstructor.d.ts +8 -1
  78. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  79. package/dist/cjs/utils/queryConstructor.js +276 -310
  80. package/dist/cjs/utils/report.d.ts +25 -12
  81. package/dist/cjs/utils/report.d.ts.map +1 -1
  82. package/dist/cjs/utils/report.js +13 -7
  83. package/dist/cjs/utils/schema.d.ts +1 -1
  84. package/dist/cjs/utils/schema.d.ts.map +1 -1
  85. package/dist/cjs/utils/schema.js +3 -32
  86. package/dist/cjs/utils/tableProcessing.d.ts +43 -13
  87. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  88. package/dist/cjs/utils/tableProcessing.js +140 -75
  89. package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
  90. package/dist/cjs/utils/textProcessing.js +10 -1
  91. package/dist/cjs/utils/valueFormatter.d.ts +2 -1
  92. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  93. package/dist/cjs/utils/valueFormatter.js +18 -14
  94. package/dist/esm/Chart.d.ts +0 -1
  95. package/dist/esm/Chart.d.ts.map +1 -1
  96. package/dist/esm/Chart.js +0 -6
  97. package/dist/esm/ChartBuilder.d.ts +1 -0
  98. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  99. package/dist/esm/ChartBuilder.js +179 -97
  100. package/dist/esm/Context.d.ts.map +1 -1
  101. package/dist/esm/Context.js +7 -9
  102. package/dist/esm/ReportBuilder.d.ts +2 -0
  103. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  104. package/dist/esm/ReportBuilder.js +399 -272
  105. package/dist/esm/SQLEditor.d.ts.map +1 -1
  106. package/dist/esm/SQLEditor.js +33 -11
  107. package/dist/esm/Table.d.ts.map +1 -1
  108. package/dist/esm/Table.js +17 -1
  109. package/dist/esm/components/Chart/InternalChart.d.ts +0 -1
  110. package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
  111. package/dist/esm/components/Chart/InternalChart.js +6 -6
  112. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  113. package/dist/esm/components/Dashboard/DataLoader.js +75 -30
  114. package/dist/esm/components/QuillMultiSelectSectionList.d.ts.map +1 -1
  115. package/dist/esm/components/QuillMultiSelectSectionList.js +5 -12
  116. package/dist/esm/components/QuillMultiSelectWithCombo.js +1 -1
  117. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts +1 -1
  118. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  119. package/dist/esm/components/ReportBuilder/AddLimitPopover.js +2 -2
  120. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +16 -4
  121. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  122. package/dist/esm/components/ReportBuilder/AddSortPopover.js +9 -18
  123. package/dist/esm/components/UiComponents.d.ts +2 -1
  124. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  125. package/dist/esm/components/UiComponents.js +27 -21
  126. package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
  127. package/dist/esm/hooks/useAskQuill.js +28 -4
  128. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  129. package/dist/esm/hooks/useQuill.js +10 -2
  130. package/dist/esm/hooks/useVirtualTables.d.ts.map +1 -1
  131. package/dist/esm/hooks/useVirtualTables.js +12 -36
  132. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  133. package/dist/esm/internals/ReportBuilder/PivotForm.js +14 -2
  134. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +12 -11
  135. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  136. package/dist/esm/internals/ReportBuilder/PivotModal.js +63 -18
  137. package/dist/esm/models/Client.d.ts +4 -5
  138. package/dist/esm/models/Client.d.ts.map +1 -1
  139. package/dist/esm/models/Pivot.d.ts +10 -0
  140. package/dist/esm/models/Pivot.d.ts.map +1 -1
  141. package/dist/esm/models/Report.d.ts +13 -1
  142. package/dist/esm/models/Report.d.ts.map +1 -1
  143. package/dist/esm/utils/astFilterProcessing.d.ts +1 -1
  144. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
  145. package/dist/esm/utils/astFilterProcessing.js +799 -64
  146. package/dist/esm/utils/astProcessing.d.ts +4 -1
  147. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  148. package/dist/esm/utils/astProcessing.js +2 -2
  149. package/dist/esm/utils/client.d.ts.map +1 -1
  150. package/dist/esm/utils/client.js +6 -3
  151. package/dist/esm/utils/columnProcessing.d.ts +1 -0
  152. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  153. package/dist/esm/utils/columnProcessing.js +1 -1
  154. package/dist/esm/utils/dashboard.d.ts +2 -1
  155. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  156. package/dist/esm/utils/dashboard.js +39 -11
  157. package/dist/esm/utils/filterProcessing.d.ts +1 -1
  158. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  159. package/dist/esm/utils/merge.d.ts +16 -0
  160. package/dist/esm/utils/merge.d.ts.map +1 -1
  161. package/dist/esm/utils/merge.js +207 -0
  162. package/dist/esm/utils/paginationProcessing.d.ts +1 -1
  163. package/dist/esm/utils/paginationProcessing.d.ts.map +1 -1
  164. package/dist/esm/utils/paginationProcessing.js +3 -2
  165. package/dist/esm/utils/pivotConstructor.d.ts +19 -9
  166. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  167. package/dist/esm/utils/pivotConstructor.js +91 -35
  168. package/dist/esm/utils/queryConstructor.d.ts +8 -1
  169. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  170. package/dist/esm/utils/queryConstructor.js +274 -314
  171. package/dist/esm/utils/report.d.ts +25 -12
  172. package/dist/esm/utils/report.d.ts.map +1 -1
  173. package/dist/esm/utils/report.js +13 -7
  174. package/dist/esm/utils/schema.d.ts +1 -1
  175. package/dist/esm/utils/schema.d.ts.map +1 -1
  176. package/dist/esm/utils/schema.js +1 -30
  177. package/dist/esm/utils/tableProcessing.d.ts +43 -13
  178. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  179. package/dist/esm/utils/tableProcessing.js +140 -75
  180. package/dist/esm/utils/textProcessing.d.ts.map +1 -1
  181. package/dist/esm/utils/textProcessing.js +10 -1
  182. package/dist/esm/utils/valueFormatter.d.ts +2 -1
  183. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  184. package/dist/esm/utils/valueFormatter.js +18 -14
  185. package/package.json +1 -1
@@ -108,7 +108,15 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
108
108
  const [rows, setRows] = (0, react_1.useState)([]);
109
109
  const [formattedRows, setFormattedRows] = (0, react_1.useState)([]);
110
110
  const [columns, setColumns] = (0, react_1.useState)([]);
111
- const [tempReport, setTempReport] = (0, react_1.useState)(report_1.EMPTY_INTERNAL_REPORT);
111
+ const REPORT_BUILDER_PAGINATION = {
112
+ page: 0,
113
+ rowsPerPage: 20,
114
+ rowsPerRequest: 100,
115
+ };
116
+ const [tempReport, setTempReport] = (0, react_1.useState)({
117
+ ...report_1.EMPTY_INTERNAL_REPORT,
118
+ pagination: REPORT_BUILDER_PAGINATION,
119
+ });
112
120
  const [uniqueValues, setUniqueValues] = (0, react_1.useState)({});
113
121
  const [uniqueValuesIsLoading, setUniqueValuesIsLoading] = (0, react_1.useState)(false);
114
122
  const [pivot, setPivot] = (0, react_1.useState)(null);
@@ -144,11 +152,6 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
144
152
  const { filterTree, filterStack } = (0, useAstToFilterTree_1.default)(formData, client, columns); // Stores the state of filters
145
153
  const [removingFilter, setRemovingFilter] = (0, react_1.useState)(false);
146
154
  const [pivotRecommendationsEnabledState, setPivotRecommendationsEnabledState,] = (0, react_1.useState)(pivotRecommendationsEnabled);
147
- const REPORT_BUILDER_PAGINATION = {
148
- page: 0,
149
- rowsPerPage: 20,
150
- rowsPerRequest: 1000,
151
- };
152
155
  const [unresolvedReportMessage, setUnresolvedReportMessage] = (0, react_1.useState)('');
153
156
  const dashboardName = (0, react_1.useMemo)(() => {
154
157
  if (destinationDashboard) {
@@ -160,12 +163,20 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
160
163
  return dashboard[reportId]?.dashboardName;
161
164
  }, [reportId, dashboard, destinationDashboard]);
162
165
  const [filtersEnabled, setFiltersEnabled] = (0, react_1.useState)(!!reportId);
166
+ const mssqlSortWarning = (0, react_1.useMemo)(() => {
167
+ if (!client || client?.databaseType !== 'mssql') {
168
+ return undefined;
169
+ }
170
+ else if (!pivot && !baseAst?.top) {
171
+ return 'Please add a limit.';
172
+ }
173
+ }, [client, baseAst, pivot]);
163
174
  (0, react_1.useEffect)(() => {
164
175
  if (!client) {
165
176
  return;
166
177
  }
167
- if (client.recommendedPivotsDisabled !== undefined) {
168
- setPivotRecommendationsEnabledState(!client.recommendedPivotsDisabled);
178
+ if (client.featureFlags?.['recommendedPivotsDisabled'] !== undefined) {
179
+ setPivotRecommendationsEnabledState(!client.featureFlags?.['recommendedPivotsDisabled']);
169
180
  }
170
181
  if (!initialLoad && client.publicKey) {
171
182
  clearAllState();
@@ -211,6 +222,14 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
211
222
  setPivotError(undefined);
212
223
  // @ts-ignore
213
224
  newPivot[fieldKey] = changeField;
225
+ if (fieldKey === 'columnField' &&
226
+ !changeField &&
227
+ pivotValueField === pivotValueField2) {
228
+ setPivotValueField2(undefined);
229
+ newPivot.valueField2 = undefined;
230
+ }
231
+ newPivot.rowLimit = undefined;
232
+ newPivot.sort = undefined;
214
233
  if (fieldKey === 'rowField') {
215
234
  // check to see if the new rowField value is a date field
216
235
  const column = columns.find((c) => c.field === changeField);
@@ -226,11 +245,15 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
226
245
  newPivot.sort = undefined;
227
246
  }
228
247
  }
248
+ setPivot(newPivot);
229
249
  const { valid, reason } = (0, pivotProcessing_1.isValidPivot)(newPivot);
230
250
  if (!valid) {
231
251
  setPivotError(reason);
232
252
  return;
233
253
  }
254
+ resetLimit();
255
+ resetSort();
256
+ setPreviousPage(0);
234
257
  setTableLoading(true);
235
258
  let dateBucket = undefined;
236
259
  const tempDateRange = dateRanges && dateRanges[newPivot.rowField || ''];
@@ -240,16 +263,20 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
240
263
  let distinctValuesForQuery = {};
241
264
  const prevPivot = pivot;
242
265
  const prevPivotData = pivotData;
243
- setPivot(newPivot);
244
266
  setPivotHint('');
245
267
  if (newPivot.columnField) {
246
- distinctValuesForQuery = await (0, tableProcessing_1.getUniqueValuesByColumns)([
247
- {
248
- field: newPivot.columnField,
249
- label: newPivot.columnField,
250
- format: 'string',
251
- },
252
- ], activeQuery, [], client, tenants, schemaData.customFields ?? [], undefined, dashboardName);
268
+ if (uniqueValues?.[newPivot.columnField]) {
269
+ distinctValuesForQuery = uniqueValues;
270
+ }
271
+ else {
272
+ distinctValuesForQuery = await (0, tableProcessing_1.getUniqueValuesByColumns)([
273
+ {
274
+ field: newPivot.columnField,
275
+ label: newPivot.columnField,
276
+ format: 'string',
277
+ },
278
+ ], activeQuery, [], client, tenants, schemaData.customFields ?? [], undefined, dashboardName);
279
+ }
253
280
  }
254
281
  try {
255
282
  const pivotedData = await (0, PivotModal_1.generatePivotTable)({
@@ -260,7 +287,9 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
260
287
  uniqueValues: distinctValuesForQuery,
261
288
  dashboardName,
262
289
  tenants,
290
+ additionalProcessing: { page: REPORT_BUILDER_PAGINATION },
263
291
  });
292
+ resetProcessing();
264
293
  setPivotData(pivotedData || []);
265
294
  const formattedRows = formatRows(pivotedData.rows, columns, true, newPivot.aggregationType);
266
295
  setFormattedRows(formattedRows);
@@ -292,6 +321,65 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
292
321
  setTableLoading(false);
293
322
  }
294
323
  };
324
+ const resetLimit = (fetchData) => {
325
+ const newAst = {
326
+ ...baseAst,
327
+ limit: null,
328
+ top: null,
329
+ orderby: client?.databaseType === 'mssql' ? null : baseAst.orderby,
330
+ };
331
+ setBaseAst((prevAst) => ({
332
+ ...prevAst,
333
+ limit: null,
334
+ top: null,
335
+ orderby: client?.databaseType === 'mssql' ? null : prevAst.orderby,
336
+ }));
337
+ setPivot((oldPivot) => {
338
+ if (!oldPivot)
339
+ return null;
340
+ return {
341
+ ...oldPivot,
342
+ rowLimit: undefined,
343
+ };
344
+ });
345
+ if (fetchData) {
346
+ fetchReportFromASTHelper({
347
+ baseAst: newAst,
348
+ curPivot: pivot ? { ...pivot, rowLimit: undefined } : undefined,
349
+ });
350
+ }
351
+ };
352
+ const resetSort = (fetchData) => {
353
+ if (pivot) {
354
+ setPivot((oldPivot) => {
355
+ if (!oldPivot)
356
+ return null;
357
+ return {
358
+ ...oldPivot,
359
+ sort: undefined,
360
+ sortField: undefined,
361
+ sortDirection: undefined,
362
+ sortFieldType: undefined,
363
+ };
364
+ });
365
+ }
366
+ const newAst = { ...baseAst, orderby: null };
367
+ setBaseAst((prevAst) => ({ ...prevAst, orderby: null }));
368
+ if (fetchData) {
369
+ fetchReportFromASTHelper({
370
+ baseAst: newAst,
371
+ curPivot: pivot
372
+ ? {
373
+ ...pivot,
374
+ sort: undefined,
375
+ sortField: undefined,
376
+ sortDirection: undefined,
377
+ sortFieldType: undefined,
378
+ }
379
+ : undefined,
380
+ });
381
+ }
382
+ };
295
383
  const enforceOrderOnColumns = (columnNames) => {
296
384
  if (pivot) {
297
385
  const rowName = pivot.rowField;
@@ -440,7 +528,10 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
440
528
  const data = await response.json();
441
529
  setActiveQuery(data.query);
442
530
  if (fetchData) {
443
- fetchReportFromASTHelper(ast, formData);
531
+ fetchReportFromASTHelper({
532
+ baseAst: ast,
533
+ newFormData: formData,
534
+ });
444
535
  }
445
536
  return data.query;
446
537
  }
@@ -560,7 +651,13 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
560
651
  }
561
652
  const { ast: newAst, pivot: newPivot, schema: curSchema, } = await (0, astProcessing_1.fetchASTFromQuillReport)(report, client, schemaData.schema);
562
653
  setBaseAst({ ...newAst, where: null });
563
- await fetchReportFromASTHelper({ ...newAst, where: null }, newAst.where, newPivot, curSchema, report);
654
+ await fetchReportFromASTHelper({
655
+ baseAst: { ...newAst, where: null },
656
+ newFormData: newAst.where,
657
+ curPivot: newPivot,
658
+ curSchema,
659
+ previousReport: report,
660
+ });
564
661
  await onSchemaChange();
565
662
  setReportInfo(report);
566
663
  const query = await fetchSqlQuery(newAst, null, false);
@@ -642,7 +739,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
642
739
  ];
643
740
  }
644
741
  else {
645
- return [{ label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(pivot.valueField) }];
742
+ return [{ label: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(pivot?.valueField || '') }];
646
743
  }
647
744
  };
648
745
  const [previousPage, setPreviousPage] = (0, react_1.useState)(0);
@@ -652,12 +749,15 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
652
749
  const [numberOfRows, setNumberOfRows] = (0, react_1.useState)(0);
653
750
  const [rowCountIsLoading, setRowCountIsLoading] = (0, react_1.useState)(false);
654
751
  const [tableLoading, setTableLoading] = (0, react_1.useState)(false);
752
+ const resetProcessing = () => {
753
+ setCurrentProcessing({ page: REPORT_BUILDER_PAGINATION });
754
+ };
655
755
  const onPageChange = (page, initiator = 'ReportBuilder') => {
656
756
  const pagination = initiator === 'ReportBuilder'
657
757
  ? REPORT_BUILDER_PAGINATION
658
758
  : paginationProcessing_1.DEFAULT_PAGINATION;
659
759
  if (currentProcessing.page &&
660
- (0, paginationProcessing_1.shouldFetchMore)(pagination, page, previousPage)) {
760
+ (0, paginationProcessing_1.shouldFetchMore)(pagination, page, previousPage, pivotData ? pivotData.rows.length : rows.length)) {
661
761
  const newPagination = { ...currentProcessing.page, page };
662
762
  const updatedProcessing = { ...currentProcessing, page: newPagination };
663
763
  setCurrentProcessing(updatedProcessing);
@@ -667,40 +767,130 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
667
767
  setPreviousPage(page);
668
768
  }
669
769
  };
670
- const onSortChange = (sort) => {
671
- if ((0, paginationProcessing_1.shouldSortInMemory)(REPORT_BUILDER_PAGINATION, numberOfRows) ||
672
- (pivot && pivot.rowField !== sort.field)) {
673
- return;
770
+ const onSortChange = (sort, isDelete) => {
771
+ if (pivot) {
772
+ let newPivot = null;
773
+ if (isDelete) {
774
+ setPivot((oldPivot) => {
775
+ if (!oldPivot)
776
+ return null;
777
+ newPivot = {
778
+ ...oldPivot,
779
+ sort: undefined,
780
+ sortField: undefined,
781
+ sortDirection: undefined,
782
+ sortFieldType: undefined,
783
+ };
784
+ return newPivot;
785
+ });
786
+ }
787
+ else {
788
+ setPivot((oldPivot) => {
789
+ if (!oldPivot)
790
+ return null;
791
+ newPivot = {
792
+ ...oldPivot,
793
+ sort: true,
794
+ sortField: sort.field,
795
+ sortDirection: sort.direction,
796
+ sortFieldType: getColumnTypeByName(sort.field),
797
+ };
798
+ return newPivot;
799
+ });
800
+ }
801
+ fetchReportFromASTHelper({
802
+ baseAst: baseAst,
803
+ curPivot: newPivot,
804
+ });
674
805
  }
675
- const newAst = { ...baseAst };
676
- if (!newAst.orderby) {
677
- newAst.orderby = [];
806
+ else {
807
+ const newAst = { ...baseAst };
808
+ if (!newAst.orderby) {
809
+ newAst.orderby = [];
810
+ }
811
+ const existingSortIndex = newAst.orderby.findIndex((item) => (0, astFilterProcessing_1.getFieldFromExpression)(item.expr) === sort.field);
812
+ if (isDelete) {
813
+ if (existingSortIndex !== -1) {
814
+ newAst.orderby.splice(existingSortIndex, 1);
815
+ }
816
+ }
817
+ else if (existingSortIndex !== -1) {
818
+ newAst.orderby[existingSortIndex] = {
819
+ expr: { type: 'column_ref', column: sort.field },
820
+ type: sort.direction.toUpperCase(),
821
+ };
822
+ }
823
+ else {
824
+ newAst.orderby.push({
825
+ expr: { type: 'column_ref', column: sort.field },
826
+ type: sort.direction.toUpperCase(),
827
+ });
828
+ }
829
+ setBaseAst((0, util_1.deepCopy)(newAst));
830
+ fetchReportFromASTHelper({
831
+ baseAst: newAst,
832
+ });
833
+ setPreviousPage(0);
678
834
  }
679
- const existingSortIndex = newAst.orderby.findIndex((item) => (0, astFilterProcessing_1.getFieldFromExpression)(item.expr) === sort.field);
680
- if (existingSortIndex !== -1) {
681
- newAst.orderby[existingSortIndex] = {
682
- expr: { type: 'column_ref', column: sort.field },
683
- type: sort.direction.toUpperCase(),
684
- };
835
+ };
836
+ const onLimitChange = (limit) => {
837
+ if (limit) {
838
+ if (pivot) {
839
+ setPivot((oldPivot) => {
840
+ if (!oldPivot)
841
+ return null;
842
+ const newPivot = { ...oldPivot, rowLimit: limit };
843
+ fetchReportFromASTHelper({ baseAst, curPivot: newPivot });
844
+ return newPivot;
845
+ });
846
+ }
847
+ else {
848
+ const newAst = { ...baseAst };
849
+ if (client.databaseType.toLowerCase() === 'mssql') {
850
+ newAst.top = {
851
+ value: limit,
852
+ };
853
+ }
854
+ else {
855
+ newAst.limit = {
856
+ seperator: '',
857
+ value: [
858
+ {
859
+ type: 'number',
860
+ value: limit,
861
+ },
862
+ ],
863
+ };
864
+ }
865
+ setBaseAst((0, util_1.deepCopy)(newAst));
866
+ fetchSqlQuery((0, util_1.deepCopy)(newAst), undefined, true);
867
+ }
685
868
  }
686
869
  else {
687
- newAst.orderby.push({
688
- expr: { type: 'column_ref', column: sort.field },
689
- type: sort.direction.toUpperCase(),
690
- });
870
+ resetLimit(true);
691
871
  }
692
- setBaseAst((0, util_1.deepCopy)(newAst));
693
- fetchReportFromASTHelper(newAst, newAst.where);
694
- setPreviousPage(0);
872
+ setOpenPopover(null);
695
873
  };
696
874
  const fetchRowCount = async (processing, includeFilters) => {
697
875
  if (!client || !activeQuery) {
698
876
  return;
699
877
  }
700
878
  setRowCountIsLoading(true);
701
- const tableInfo = await (0, tableProcessing_1.fetchResultsByQuery)(activeQuery, client, tenants, processing, schemaData.customFields, includeFilters ? specificDashboardFilters : undefined, includeFilters
702
- ? (tempReport.dateField ?? reportInfo?.dateField)
703
- : undefined, false, true, undefined, dashboardName);
879
+ const tableInfo = await (0, tableProcessing_1.fetchResultsByQuery)({
880
+ query: activeQuery,
881
+ client,
882
+ tenants,
883
+ processing,
884
+ customFields: schemaData.customFields,
885
+ filters: includeFilters ? specificDashboardFilters : undefined,
886
+ dateField: includeFilters
887
+ ? (tempReport.dateField ?? reportInfo?.dateField)
888
+ : undefined,
889
+ rowsOnly: false,
890
+ rowCountOnly: true,
891
+ filterMap: undefined,
892
+ dashboardName,
893
+ });
704
894
  if (tableInfo.rowCount) {
705
895
  setNumberOfRows(tableInfo.rowCount);
706
896
  // @ts-ignore
@@ -726,29 +916,62 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
726
916
  };
727
917
  const handleRunQuery = async (processing, resetRows = false, includeFilters = false) => {
728
918
  try {
919
+ const isPivotPagination = !!(pivot && pivotData);
729
920
  setErrorMessage('');
730
921
  setTableLoading(true);
731
- const tableInfo = await (0, tableProcessing_1.fetchResultsByQuery)(activeQuery, client, tenants, processing, schemaData.customFields, undefined, undefined, true, undefined, undefined, dashboardName);
922
+ const tableInfo = await (0, tableProcessing_1.fetchResultsByQuery)({
923
+ query: isPivotPagination ? pivotData.pivotQuery : activeQuery,
924
+ comparisonQuery: pivot && pivotData ? pivotData.comparisonPivotQuery : undefined,
925
+ client,
926
+ tenants,
927
+ processing,
928
+ customFields: schemaData.customFields,
929
+ rowsOnly: true,
930
+ dashboardName,
931
+ pivot: pivot,
932
+ getPivotRowCount: false,
933
+ });
732
934
  if (tableInfo.error) {
733
935
  throw new Error(tableInfo.error);
734
936
  }
735
937
  else if (tableInfo.rows.length === 0) {
736
938
  throw new Error('No data found');
737
939
  }
738
- fetchRowCount(processing, includeFilters);
739
- let tempRows = [...rows, ...tableInfo.rows];
740
- if (resetRows) {
741
- tempRows = tableInfo.rows;
742
- setPreviousPage(0);
940
+ if (!isPivotPagination) {
941
+ // fetching row count for non-pivot query
942
+ fetchRowCount(processing, includeFilters);
943
+ let tempRows = [...rows, ...tableInfo.rows];
944
+ if (resetRows) {
945
+ tempRows = tableInfo.rows;
946
+ setPreviousPage(0);
947
+ }
948
+ setRows(tempRows);
949
+ setFormattedRows((0, report_1.formatRowsFromReport)({ rows: tempRows, columns: tableInfo.columns }));
950
+ setTempReport((tempReport) => ({
951
+ ...tempReport,
952
+ rows: tempRows,
953
+ rowCount: tableInfo.rowCount ?? tempReport.rowCount,
954
+ }));
955
+ setColumns(tableInfo.columns);
956
+ }
957
+ else {
958
+ let tempRows = [...pivotData.rows, ...tableInfo.rows];
959
+ if (resetRows) {
960
+ tempRows = tableInfo.rows;
961
+ setPreviousPage(0);
962
+ }
963
+ setPivotData((oldPivotData) => {
964
+ if (oldPivotData) {
965
+ return {
966
+ ...oldPivotData,
967
+ rows: tempRows,
968
+ columns: tableInfo.columns,
969
+ };
970
+ }
971
+ return null;
972
+ });
973
+ setFormattedRows((0, report_1.formatRowsFromReport)({ rows: tempRows, columns: tableInfo.columns }));
743
974
  }
744
- setRows(tempRows);
745
- setFormattedRows((0, report_1.formatRowsFromReport)({ rows: tempRows, columns: tableInfo.columns }));
746
- setTempReport((tempReport) => ({
747
- ...tempReport,
748
- rows: tempRows,
749
- rowCount: tableInfo.rowCount ?? tempReport.rowCount,
750
- }));
751
- setColumns(tableInfo.columns);
752
975
  setTableLoading(false);
753
976
  }
754
977
  catch (e) {
@@ -789,12 +1012,31 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
789
1012
  updateFieldValuesMap(uniqueStringsObj, table);
790
1013
  return uniqueStringsObj;
791
1014
  };
792
- const fetchReportFromASTHelper = async (baseAst, newFormData, curPivot, curSchema, previousReport, keepPivotHint = false) => {
1015
+ const fetchReportFromASTHelper = async ({ baseAst, newFormData, curPivot, curSchema, previousReport, keepPivotHint = false, }) => {
793
1016
  const curFormData = newFormData !== undefined ? newFormData : formData;
794
1017
  let reportBuilderInfo = undefined;
795
1018
  try {
796
1019
  setLoading(true);
797
- reportBuilderInfo = await (0, report_1.fetchReportBuilderDataFromAST)(baseAst, curFormData, curSchema ?? schemaData.schema, client, tenants, curPivot ?? pivot, formData, currentTable, { uniqueStrings: uniqueValues, dateRanges: dateRanges ?? {} }, previousReport ?? reportInfo ?? undefined, schemaData.customFields, true, true, { page: REPORT_BUILDER_PAGINATION }, dashboardName);
1020
+ reportBuilderInfo = await (0, report_1.fetchReportBuilderDataFromAST)({
1021
+ baseAst,
1022
+ formData: curFormData,
1023
+ schema: curSchema ?? schemaData.schema,
1024
+ client,
1025
+ tenants,
1026
+ pivot: curPivot ?? pivot,
1027
+ previousFormData: formData,
1028
+ currentTable,
1029
+ previousRelevant: {
1030
+ uniqueStrings: uniqueValues,
1031
+ dateRanges: dateRanges ?? {},
1032
+ },
1033
+ report: previousReport ?? reportInfo ?? undefined,
1034
+ customFields: schemaData.customFields,
1035
+ skipUniqueValues: true,
1036
+ skipRowCount: true,
1037
+ processing: { page: REPORT_BUILDER_PAGINATION },
1038
+ dashboardName,
1039
+ });
798
1040
  if (reportBuilderInfo.error) {
799
1041
  throw new Error(reportBuilderInfo.error);
800
1042
  }
@@ -814,7 +1056,10 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
814
1056
  setErrorMessage('Failed to fetch');
815
1057
  return;
816
1058
  }
817
- setTempReport(reportBuilderInfo.report);
1059
+ setTempReport({
1060
+ ...reportBuilderInfo.report,
1061
+ pagination: REPORT_BUILDER_PAGINATION,
1062
+ });
818
1063
  fetchRowCountFromAST(baseAst, curFormData);
819
1064
  const reportTable = reportBuilderInfo.table;
820
1065
  const reportBuilderInfoColumns = reportBuilderInfo.columns.map((column) => {
@@ -832,7 +1077,6 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
832
1077
  if (prevTable !== reportBuilderInfo.table) {
833
1078
  setSelectedOrderedColumns([]); // reset selected ordered columns
834
1079
  }
835
- setNumberOfRows(reportBuilderInfo.rowCount);
836
1080
  setPivot(reportBuilderInfo.pivot);
837
1081
  if (!keepPivotHint) {
838
1082
  setPivotHint('');
@@ -908,7 +1152,14 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
908
1152
  }
909
1153
  setUniqueValuesIsLoading(false);
910
1154
  if (pivotChanged) {
911
- fetchReportFromASTHelper(baseAst, curFormData, newPivot, curSchema, previousReport, true);
1155
+ fetchReportFromASTHelper({
1156
+ baseAst,
1157
+ newFormData: curFormData,
1158
+ curPivot: newPivot,
1159
+ curSchema,
1160
+ previousReport,
1161
+ keepPivotHint: true,
1162
+ });
912
1163
  }
913
1164
  else {
914
1165
  setLoading(false);
@@ -940,7 +1191,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
940
1191
  setLoading(true);
941
1192
  setAskAILoading(true);
942
1193
  setErrorMessage('');
943
- astInfo = await (0, astProcessing_1.fetchAndProcessASTFromPrompt)(prompt, schemaData.schema, client, pivot, activeQuery, currentTable, dashboardName);
1194
+ astInfo = await (0, astProcessing_1.fetchAndProcessASTFromPrompt)(prompt, schemaData.schema, client, pivot ?? undefined, activeQuery, currentTable, dashboardName, tenants);
944
1195
  if (astInfo.error) {
945
1196
  throw new Error(astInfo.error);
946
1197
  }
@@ -975,7 +1226,11 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
975
1226
  setBaseAst(astInfo.ast);
976
1227
  fetchSqlQuery(astInfo.ast, cleanAst, false);
977
1228
  setAskAILoading(false);
978
- await fetchReportFromASTHelper(astInfo.ast, cleanAst, astInfo.pivot);
1229
+ await fetchReportFromASTHelper({
1230
+ baseAst: astInfo.ast,
1231
+ newFormData: cleanAst,
1232
+ curPivot: astInfo.pivot,
1233
+ });
979
1234
  };
980
1235
  const makePivotValid = (pivot, uniqueValuesForPivot, reportTable, reportColumns) => {
981
1236
  if (!pivot) {
@@ -1179,6 +1434,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1179
1434
  ast.where = null;
1180
1435
  ast.orderby = null;
1181
1436
  ast.limit = null;
1437
+ ast.top = null;
1182
1438
  setBaseAst(ast);
1183
1439
  fetchSqlQuery(ast, null);
1184
1440
  }
@@ -1237,23 +1493,29 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1237
1493
  setPivot(null);
1238
1494
  setPivotHint('');
1239
1495
  setPivotData(null);
1496
+ resetLimit();
1497
+ resetSort(true);
1498
+ setPreviousPage(0);
1240
1499
  const formattedRows = formatRows(rows, columns, false);
1241
1500
  setFormattedRows(formattedRows);
1242
1501
  }, selectPivot: async (selectedPivot, uniqueValues, dateRange, pivotTable) => {
1243
1502
  if (!selectedPivot)
1244
1503
  return;
1245
- const newAst = { ...baseAst };
1246
- newAst.orderby = null;
1504
+ // const newAst = { ...baseAst };
1505
+ // newAst.orderby = null;
1247
1506
  if (selectedPivot.rowFieldType === 'date') {
1248
1507
  selectedPivot['sort'] = true;
1249
1508
  selectedPivot['sortDirection'] = 'ASC';
1250
1509
  }
1251
- setBaseAst(newAst); // trigger refetch
1510
+ // setBaseAst(newAst); // trigger refetch
1252
1511
  let dateBucket = undefined;
1253
1512
  if (dateRange) {
1254
1513
  dateBucket = (0, dates_1.getDateBucketFromRange)(dateRange);
1255
1514
  }
1256
1515
  setPivot(selectedPivot);
1516
+ resetLimit();
1517
+ resetSort();
1518
+ setPreviousPage(0);
1257
1519
  setPivotHint('');
1258
1520
  try {
1259
1521
  if (!pivotTable) {
@@ -1266,8 +1528,12 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1266
1528
  uniqueValues,
1267
1529
  dashboardName,
1268
1530
  tenants,
1531
+ additionalProcessing: {
1532
+ page: REPORT_BUILDER_PAGINATION,
1533
+ },
1269
1534
  });
1270
1535
  }
1536
+ resetProcessing();
1271
1537
  setPivotData(pivotTable || []);
1272
1538
  const formattedRows = formatRows(pivotTable.rows, columns, true, selectedPivot.aggregationType, dateBucket);
1273
1539
  setFormattedRows(formattedRows);
@@ -1305,167 +1571,48 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1305
1571
  setPivot(null);
1306
1572
  setPivotError(undefined);
1307
1573
  setPivotHint('');
1308
- setPivotData([]);
1574
+ setPivotData(null);
1575
+ resetLimit();
1576
+ resetSort();
1577
+ setPreviousPage(0);
1309
1578
  const formattedRows = formatRows(rows, columns, false);
1310
1579
  setFormattedRows(formattedRows);
1311
- }, isLoading: tableLoading || loading, pivotRowField: pivotRowField, pivotColumnField: pivotColumnField, pivotValueField: pivotValueField, pivotValueField2: pivotValueField2, pivotAggregation: pivotAggregation, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, PivotColumnContainer: PivotColumnContainer, pivotHint: pivotHint }))] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Sort" }), pivot && pivot.sort && ((0, jsx_runtime_1.jsx)("div", { style: {
1580
+ }, isLoading: tableLoading || loading, pivotRowField: pivotRowField, pivotColumnField: pivotColumnField, pivotValueField: pivotValueField, pivotValueField2: pivotValueField2, pivotAggregation: pivotAggregation, SecondaryButtonComponent: SecondaryButtonComponent, SelectComponent: SelectComponent, PivotColumnContainer: PivotColumnContainer, pivotHint: pivotHint }))] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Sort" }), pivot && pivot.sort && pivot.sortField && ((0, jsx_runtime_1.jsx)("div", { style: {
1312
1581
  display: 'flex',
1313
1582
  flexDirection: 'column',
1314
1583
  gap: 8,
1315
1584
  marginBottom: 12,
1316
- }, children: (0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortData: {
1317
- type: pivot.sortDirection,
1318
- expr: { type: 'column_ref', column: pivot.sortField },
1319
- }, columns: pivot
1320
- ? pivot.columnField
1321
- ? [`.${pivot.rowField}`]
1322
- : [
1323
- `.${pivot.rowField}`,
1324
- `.${pivot.valueField || 'count'}`,
1325
- ]
1326
- : selectedColumns, setIsPending: () => { }, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: async () => {
1327
- if (!pivot) {
1328
- setBaseAst((0, util_1.deepCopy)(baseAst));
1329
- fetchSqlQuery((0, util_1.deepCopy)(baseAst));
1330
- return;
1331
- }
1332
- const tempPivot = { ...pivot, sort: false };
1333
- let dateBucket = undefined;
1334
- const tempDateRange = dateRanges &&
1335
- pivot.rowField &&
1336
- dateRanges[pivot.rowField];
1337
- if (tempDateRange) {
1338
- dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
1339
- }
1340
- setPivot(tempPivot);
1341
- setPivotHint('');
1342
- try {
1343
- const pivotedData = await (0, PivotModal_1.generatePivotTable)({
1344
- pivot: tempPivot,
1345
- rowLimit: -1,
1346
- dateBucket,
1347
- report: tempReport,
1348
- client,
1349
- uniqueValues: uniqueValues[currentTable],
1350
- dashboardName,
1351
- tenants,
1352
- });
1353
- setPivotData(pivotedData || []);
1354
- const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType, dateBucket);
1355
- setFormattedRows(formattedRows);
1356
- setErrorMessage('');
1357
- }
1358
- catch (e) {
1359
- if (e instanceof Error)
1360
- setPivotError(e.message);
1361
- }
1362
- finally {
1363
- setTableLoading(false);
1364
- }
1585
+ }, children: (0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortField: pivot.sortField, sortDirection: pivot.sortDirection || 'ASC', columns: pivotData?.columns ?? [], setIsPending: () => { }, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: async () => {
1586
+ onSortChange({
1587
+ field: pivot.sortField ?? '',
1588
+ direction: pivot.sortDirection ?? 'ASC',
1589
+ }, true);
1365
1590
  }, onSave: async (column, direction) => {
1366
- if (!pivot) {
1367
- setOpenPopover(null);
1368
- setBaseAst((0, util_1.deepCopy)(baseAst));
1369
- fetchSqlQuery((0, util_1.deepCopy)(baseAst));
1370
- return;
1371
- }
1372
- const sortFieldType = column === (pivot.valueField || 'count')
1373
- ? 'number'
1374
- : pivot.rowFieldType;
1375
- const tempPivot = {
1376
- ...pivot,
1377
- sort: true,
1378
- sortDirection: direction,
1379
- sortField: column,
1380
- sortFieldType: sortFieldType,
1381
- };
1382
- setPivot(tempPivot);
1383
- setPivotHint('');
1384
- let dateBucket = undefined;
1385
- const tempDateRange = dateRanges &&
1386
- pivot.rowField &&
1387
- dateRanges[pivot.rowField];
1388
- if (tempDateRange) {
1389
- dateBucket = (0, dates_1.getDateBucketFromRange)(tempDateRange.dateRange);
1390
- }
1391
- try {
1392
- const pivotedData = await (0, PivotModal_1.generatePivotTable)({
1393
- pivot: tempPivot,
1394
- rowLimit: -1,
1395
- dateBucket,
1396
- report: tempReport,
1397
- client,
1398
- uniqueValues: uniqueValues[currentTable],
1399
- dashboardName,
1400
- tenants,
1401
- });
1402
- setPivotData(pivotedData || []);
1403
- const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType, dateBucket);
1404
- setFormattedRows(formattedRows);
1405
- setErrorMessage('');
1406
- }
1407
- catch (e) {
1408
- if (e instanceof Error)
1409
- setPivotError(e.message);
1410
- }
1591
+ onSortChange({ field: column, direction });
1411
1592
  }, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, disabled: tableLoading || loading }, `sort-sentence-pivot`) })), baseAst && baseAst.orderby && baseAst.orderby.length > 0 && ((0, jsx_runtime_1.jsx)("div", { style: {
1412
1593
  display: 'flex',
1413
1594
  flexDirection: 'column',
1414
1595
  gap: 8,
1415
1596
  marginBottom: 12,
1416
- }, children: baseAst.orderby.map((sortData, id) => ((0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortData: sortData, columns: selectedColumns, setIsPending: () => { }, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
1417
- if (pivot) {
1418
- setPivot({ ...pivot, sort: false });
1419
- setPivotHint('');
1420
- return;
1421
- }
1422
- const newAst = { ...baseAst };
1423
- newAst.orderby.splice(id, 1);
1424
- if (newAst.orderby.length === 0) {
1425
- newAst.orderby = null;
1426
- }
1427
- setBaseAst((0, util_1.deepCopy)(newAst));
1428
- fetchSqlQuery((0, util_1.deepCopy)(newAst));
1597
+ }, children: baseAst.orderby.map((sortData, id) => ((0, jsx_runtime_1.jsx)(AddSortPopover_1.SortSentence, { sortField: sortData.expr?.column || sortData.expr?.value, sortDirection: sortData.type, columns: columns, setIsPending: () => { }, setEditPopoverKey: () => { }, setActiveEditItem: setActiveEditItem, setOpenPopover: setOpenPopover, SortPopover: SortPopoverComponent, EditPopover: AddSortPopover_1.AddSortPopover, handleDelete: () => {
1598
+ onSortChange({
1599
+ field: sortData.expr?.column || sortData.expr?.value,
1600
+ direction: sortData.type,
1601
+ }, true);
1429
1602
  }, onSave: (column, direction) => {
1430
- if (pivot) {
1431
- const sortFieldType = column === (pivot.valueField || 'count')
1432
- ? 'number'
1433
- : pivot.rowFieldType;
1434
- setPivot({
1435
- ...pivot,
1436
- sort: true,
1437
- sortDirection: direction,
1438
- sortField: column,
1439
- sortFieldType: sortFieldType,
1440
- });
1441
- setPivotHint('');
1442
- return;
1443
- }
1444
- setActiveEditItem(null);
1445
- setOpenPopover(null);
1446
- if (column === '')
1447
- return;
1448
- const newAst = { ...baseAst };
1449
- newAst.orderby[id] = {
1450
- expr: {
1451
- type: 'column_ref',
1452
- table: null,
1453
- column: column,
1454
- },
1455
- type: direction,
1456
- };
1457
- // look through the columns
1458
- setOpenPopover(null);
1459
- setBaseAst((0, util_1.deepCopy)(newAst));
1460
- fetchSqlQuery((0, util_1.deepCopy)(newAst));
1461
- }, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, disabled: tableLoading || loading }, `sort-sentence-${id}`))) })), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { disabled: !baseAst || !dataDisplayed || loading || tableLoading, onClick: () => {
1603
+ onSortChange({ field: column, direction });
1604
+ }, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, disabled: tableLoading || loading }, `sort-sentence-${id}`))) })), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { disabled: !baseAst ||
1605
+ !dataDisplayed ||
1606
+ loading ||
1607
+ tableLoading ||
1608
+ mssqlSortWarning, onClick: () => {
1462
1609
  if (!selectedColumns || selectedColumns.length === 0) {
1463
1610
  return;
1464
1611
  }
1465
1612
  if (!openPopover) {
1466
1613
  setOpenPopover('AddSortPopover');
1467
1614
  }
1468
- }, label: 'Add sort' }), (0, jsx_runtime_1.jsx)("div", { style: {
1615
+ }, label: 'Add sort', tooltipText: mssqlSortWarning }), (0, jsx_runtime_1.jsx)("div", { style: {
1469
1616
  position: 'relative',
1470
1617
  ...(openPopover === 'AddSortPopover' && { top: 12 }),
1471
1618
  }, children: (0, jsx_runtime_1.jsx)(PopoverComponent, { isOpen: openPopover === 'AddSortPopover', setIsOpen: (isOpen) => {
@@ -1473,14 +1620,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1473
1620
  setActiveEditItem(null);
1474
1621
  setOpenPopover(null);
1475
1622
  }
1476
- }, popoverTitle: "Sort by", popoverChildren: (0, jsx_runtime_1.jsx)(AddSortPopover_1.AddSortPopover, { columns: pivot
1477
- ? pivot.columnField
1478
- ? [`.${pivot.rowField}`]
1479
- : [
1480
- `.${pivot.rowField}`,
1481
- `.${pivot.valueField || 'count'}`,
1482
- ]
1483
- : selectedColumns, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, onSave: async (column, direction) => {
1623
+ }, popoverTitle: "Sort by", popoverChildren: (0, jsx_runtime_1.jsx)(AddSortPopover_1.AddSortPopover, { columns: pivotData ? pivotData.columns : columns, Select: SelectComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, onSave: async (column, direction) => {
1484
1624
  if (column === '')
1485
1625
  return;
1486
1626
  if (pivot) {
@@ -1512,7 +1652,11 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1512
1652
  uniqueValues: uniqueValues[currentTable],
1513
1653
  dashboardName,
1514
1654
  tenants,
1655
+ additionalProcessing: {
1656
+ page: REPORT_BUILDER_PAGINATION,
1657
+ },
1515
1658
  });
1659
+ resetProcessing();
1516
1660
  setErrorMessage('');
1517
1661
  setPivotData(pivotedData || []);
1518
1662
  const formattedRows = formatRows(pivotedData.rows, columns, true, pivot.aggregationType, dateBucket);
@@ -1526,50 +1670,43 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1526
1670
  setBaseAst((0, util_1.deepCopy)(baseAst));
1527
1671
  return;
1528
1672
  }
1529
- const newAst = { ...baseAst };
1530
- if (!newAst.orderby)
1531
- newAst.orderby = [];
1532
- const existingSortIndex = newAst.orderby.findIndex((item) => (0, astFilterProcessing_1.getFieldFromExpression)(item.expr) === column);
1533
- if (existingSortIndex !== -1) {
1534
- newAst.orderby[existingSortIndex] = {
1535
- expr: { type: 'column_ref', column },
1536
- type: direction,
1537
- };
1538
- }
1539
1673
  else {
1540
- newAst.orderby.push({
1541
- expr: { type: 'column_ref', column },
1542
- type: direction,
1543
- });
1674
+ const newAst = { ...baseAst };
1675
+ if (!newAst.orderby)
1676
+ newAst.orderby = [];
1677
+ const existingSortIndex = newAst.orderby.findIndex((item) => (0, astFilterProcessing_1.getFieldFromExpression)(item.expr) === column);
1678
+ if (existingSortIndex !== -1) {
1679
+ newAst.orderby[existingSortIndex] = {
1680
+ expr: { type: 'column_ref', column },
1681
+ type: direction,
1682
+ };
1683
+ }
1684
+ else {
1685
+ newAst.orderby.push({
1686
+ expr: { type: 'column_ref', column },
1687
+ type: direction,
1688
+ });
1689
+ }
1690
+ // look through the columns
1691
+ setOpenPopover(null);
1692
+ setBaseAst((0, util_1.deepCopy)(newAst));
1693
+ fetchSqlQuery((0, util_1.deepCopy)(newAst));
1544
1694
  }
1545
- // look through the columns
1546
- setOpenPopover(null);
1547
- setBaseAst((0, util_1.deepCopy)(newAst));
1548
- fetchSqlQuery((0, util_1.deepCopy)(newAst));
1549
- } }) }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Limit" }), baseAst && baseAst.limit && baseAst.limit.value?.length > 0 ? ((0, jsx_runtime_1.jsx)("div", { style: {
1695
+ } }) }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: { width: '100%' }, children: [(0, jsx_runtime_1.jsx)(SidebarHeadingComponent, { label: "Limit" }), (baseAst &&
1696
+ ((baseAst.limit && baseAst.limit.value?.length > 0) ||
1697
+ (baseAst.top && baseAst.top.value))) ||
1698
+ pivot?.rowLimit ? ((0, jsx_runtime_1.jsx)("div", { style: {
1550
1699
  display: 'flex',
1551
1700
  flexDirection: 'column',
1552
1701
  gap: 8,
1553
1702
  marginBottom: 12,
1554
- }, children: (0, jsx_runtime_1.jsx)(AddLimitPopover_1.LimitSentence, { limit: baseAst.limit, setOpenPopover: setOpenPopover, LimitPopover: LimitPopoverComponent, EditPopover: AddLimitPopover_1.AddLimitPopover, handleDelete: () => {
1555
- const newAst = { ...baseAst };
1556
- newAst.limit = null;
1557
- setBaseAst((0, util_1.deepCopy)(newAst));
1558
- fetchSqlQuery((0, util_1.deepCopy)(newAst));
1703
+ }, children: (0, jsx_runtime_1.jsx)(AddLimitPopover_1.LimitSentence, { limit: baseAst.limit?.value?.[0]?.value ||
1704
+ baseAst.top?.value ||
1705
+ pivot?.rowLimit ||
1706
+ 0, setOpenPopover: setOpenPopover, LimitPopover: LimitPopoverComponent, EditPopover: AddLimitPopover_1.AddLimitPopover, handleDelete: () => {
1707
+ onLimitChange(null);
1559
1708
  }, onSave: (limit) => {
1560
- const newAst = { ...baseAst };
1561
- newAst.limit = {
1562
- seperator: '',
1563
- value: [
1564
- {
1565
- type: 'number',
1566
- value: limit,
1567
- },
1568
- ],
1569
- };
1570
- setOpenPopover(null);
1571
- setBaseAst((0, util_1.deepCopy)(newAst));
1572
- fetchSqlQuery((0, util_1.deepCopy)(newAst));
1709
+ onLimitChange(limit);
1573
1710
  }, TextInput: TextInputComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, disabled: tableLoading || loading }) })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { disabled: !baseAst || !dataDisplayed || loading || tableLoading, onClick: () => {
1574
1711
  if (!selectedColumns || selectedColumns.length === 0) {
1575
1712
  return;
@@ -1589,19 +1726,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1589
1726
  setOpenPopover(null);
1590
1727
  }
1591
1728
  }, popoverTitle: "Add limit", popoverChildren: (0, jsx_runtime_1.jsx)(AddLimitPopover_1.AddLimitPopover, { TextInputComponent: TextInputComponent, Button: ButtonComponent, SecondaryButton: SecondaryButtonComponent, onSave: (limit) => {
1592
- const newAst = { ...baseAst };
1593
- newAst.limit = {
1594
- seperator: '',
1595
- value: [
1596
- {
1597
- type: 'number',
1598
- value: Number(limit),
1599
- },
1600
- ],
1601
- };
1602
- setOpenPopover(null);
1603
- setBaseAst((0, util_1.deepCopy)(newAst));
1604
- fetchSqlQuery((0, util_1.deepCopy)(newAst));
1729
+ onLimitChange(limit);
1605
1730
  } }) }) })] }))] })] }), (0, jsx_runtime_1.jsxs)(ContainerComponent, { children: [isAIEnabled && ((0, jsx_runtime_1.jsx)("form", { ref: askAIContainerRef, onSubmit: (event) => {
1606
1731
  event.preventDefault();
1607
1732
  }, style: {
@@ -1617,7 +1742,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1617
1742
  ? 'Ask a follow-up question...'
1618
1743
  : 'Ask a question...' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {
1619
1744
  fetchAstFromPromptHelper();
1620
- }, isLoading: askAILoading && !baseAst, label: 'Ask AI' }), ((baseAst && dataDisplayed) || initialLoad) && !reportId && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: 'New report', onClick: clearAllState }))] }) })), baseAst && ((0, jsx_runtime_1.jsx)(TableComponent, { isLoading: tableLoading || (loading && errorMessage.length === 0), rows: formattedRows, rowCount: pivot ? undefined : numberOfRows, rowCountIsLoading: rowCountIsLoading, rowsPerPage: 20, columns: pivot
1745
+ }, isLoading: askAILoading && !baseAst, label: 'Ask AI' }), ((baseAst && dataDisplayed) || initialLoad) && !reportId && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { label: 'New report', onClick: clearAllState }))] }) })), baseAst && ((0, jsx_runtime_1.jsx)(TableComponent, { isLoading: tableLoading || (loading && errorMessage.length === 0), rows: formattedRows, rowCount: pivot ? pivotData?.rowCount : numberOfRows, rowCountIsLoading: rowCountIsLoading, rowsPerPage: 20, columns: pivot
1621
1746
  ? pivotData?.columns || emptyPivotColumns()
1622
1747
  : enforceOrderOnColumns(Object.keys(rows[0] ?? {})).map((c) => {
1623
1748
  return {
@@ -1626,7 +1751,7 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1626
1751
  };
1627
1752
  }), onPageChange: onPageChange, onSortChange: (sort) => {
1628
1753
  onSortChange(sort);
1629
- }, containerStyle: {
1754
+ }, disableSort: !!mssqlSortWarning, containerStyle: {
1630
1755
  maxHeight: Math.max(window.innerHeight - 290, 75 + Math.min(Math.max(10, rows.length), 20) * 37),
1631
1756
  } })), (0, jsx_runtime_1.jsxs)("div", { style: {
1632
1757
  display: 'flex',
@@ -1674,8 +1799,10 @@ SidebarComponent = ui_1.QuillSidebar, ContainerComponent = ui_1.CustomContainer,
1674
1799
  rows: rows,
1675
1800
  pivotRows: pivotData?.rows,
1676
1801
  pivotColumns: pivotData?.columns,
1677
- flags: reportInfo?.flags ??
1678
- tempReport?.flags,
1802
+ pivotRowCount: pivotData?.rowCount,
1803
+ pivotQuery: pivotData?.pivotQuery,
1804
+ comparisonPivotQuery: pivotData?.comparisonPivotQuery,
1805
+ flags: reportInfo?.flags ?? tempReport?.flags,
1679
1806
  }
1680
1807
  : {
1681
1808
  ...tempReport,