@quillsql/react 2.13.34 → 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 +4 -1
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +182 -106
  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 +399 -272
  13. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  14. package/dist/cjs/SQLEditor.js +34 -12
  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 +4 -1
  98. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  99. package/dist/esm/ChartBuilder.js +183 -107
  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 +400 -273
  105. package/dist/esm/SQLEditor.d.ts.map +1 -1
  106. package/dist/esm/SQLEditor.js +34 -12
  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
@@ -117,7 +117,8 @@ function createReportFromForm(formData, report, selectedPivotTable, rows = [], f
117
117
  filtersApplied: report?.filtersApplied || [],
118
118
  queryString: '',
119
119
  rows: rows,
120
- rowCount: report?.rowCount ||
120
+ rowCount: selectedPivotTable?.rowCount ||
121
+ report?.rowCount ||
121
122
  selectedPivotTable?.rows?.length ||
122
123
  rows.length ||
123
124
  0,
@@ -244,7 +245,7 @@ function ChartBuilderWithModal(props) {
244
245
  */
245
246
  function ChartBuilder({ TextInputComponent = UiComponents_1.QuillTextInput, SelectComponent = QuillSelect_1.QuillSelectComponent,
246
247
  // MultiSelectComponent = QuillMultiSelectComponentWithCombo,
247
- ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, HeaderComponent = UiComponents_1.MemoizedHeader, SubHeaderComponent = UiComponents_1.MemoizedSubHeader, LabelComponent = UiComponents_1.MemoizedLabel, DeleteButtonComponent = UiComponents_1.MemoizedDeleteButton, TextComponent = UiComponents_1.MemoizedText, PopoverComponent = UiComponents_1.MemoizedPopover, CardComponent = QuillCard_1.QuillCard, TableComponent = UiComponents_1.QuillTableComponent, ModalComponent = UiComponents_1.MemoizedModal, LoadingComponent = UiComponents_1.QuillLoadingComponent, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, ChartBuilderInputRowContainer = UiComponents_1.QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = UiComponents_1.QuillChartBuilderInputColumnContainer, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, FormContainer = UiComponents_1.QuillChartBuilderFormContainer, ErrorComponent = ChartError_1.QuillChartErrorWithAction, onClickChartError, isOpen, isHorizontalView = true, setIsOpen, dateRange, isAdmin = false, showDashboardDropdown = true, onAddToDashboardComplete, onDelete, onDiscardChanges, reportId, tempReport, recommendedPivots: rp = [], createdPivots: cp = [], dateColumn, buttonLabel, organizationName, hideDeleteButton = false, hideSubmitButton = false, hideDateRangeFilter = false, initialUniqueValues, initialUniqueValuesIsLoading, pivotRecommendationsEnabled = true, filtersEnabled, onFiltersEnabledChanged,
248
+ ButtonComponent = UiComponents_1.MemoizedButton, SecondaryButtonComponent = UiComponents_1.MemoizedSecondaryButton, HeaderComponent = UiComponents_1.MemoizedHeader, SubHeaderComponent = UiComponents_1.MemoizedSubHeader, LabelComponent = UiComponents_1.MemoizedLabel, DeleteButtonComponent = UiComponents_1.MemoizedDeleteButton, TextComponent = UiComponents_1.MemoizedText, PopoverComponent = UiComponents_1.MemoizedPopover, CardComponent = QuillCard_1.QuillCard, TableComponent = UiComponents_1.QuillTableComponent, ModalComponent = UiComponents_1.MemoizedModal, LoadingComponent = UiComponents_1.QuillLoadingComponent, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, ChartBuilderInputRowContainer = UiComponents_1.QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = UiComponents_1.QuillChartBuilderInputColumnContainer, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, FormContainer = UiComponents_1.QuillChartBuilderFormContainer, ErrorComponent = ChartError_1.QuillChartErrorWithAction, onClickChartError, isOpen, isHorizontalView = true, setIsOpen, dateRange, isAdmin = false, showDashboardDropdown = true, onAddToDashboardComplete, onDelete, onDiscardChanges, reportId, tempReport, recommendedPivots: rp = [], createdPivots: cp = [], dateColumn, buttonLabel, organizationName, hideDeleteButton = false, hideSubmitButton = false, hideDateRangeFilter = false, showTableFormatOptions, initialUniqueValues, initialUniqueValuesIsLoading, pivotRecommendationsEnabled = true, filtersEnabled, onFiltersEnabledChanged,
248
249
  // isLoading,
249
250
  onClickChartElement, isEditingMode = false, disableSort = true, }) {
250
251
  const [client] = (0, react_1.useContext)(Context_1.ClientContext);
@@ -343,6 +344,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
343
344
  }, [isOpen]);
344
345
  const [dashboardOptions, setDashboardOptions] = (0, react_1.useState)([]);
345
346
  const { reportFilters, reportFiltersDispatch, loadFiltersForReport } = (0, react_1.useContext)(Context_1.ReportFiltersContext);
347
+ const { reportsDispatch } = (0, react_1.useContext)(Context_1.ReportsContext);
346
348
  (0, react_1.useEffect)(() => {
347
349
  loadFiltersForReport(report?.id ?? Report_1.TEMP_REPORT_ID, 'ChartBuilder', specificDashboardFilters, undefined, undefined, canonicalFilterMap, report?.dashboardName);
348
350
  return () => {
@@ -350,16 +352,6 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
350
352
  type: 'CLEAR_REPORT_FILTERS',
351
353
  id: report?.id ?? tempReport?.id ?? Report_1.TEMP_REPORT_ID,
352
354
  });
353
- // TODO: Currently the behavior of Chart Builder is dependent on whether there is a TEMP_REPORT_ID in context or not
354
- /* The Chart Builder can essentially be in three states
355
- 1. Creating a new report, all we have is an ephemeral temp report
356
- 2. Editing an existing report, we have a report id and the report is in the dashboard context
357
- 3. Editing the query of an existing report, we have a report id and the new-query report is in context under TEMP_REPORT_ID
358
- One can imagine this going wrong: somehow the temp report gets set by SQLEditor or ReportBuilder but never cleared
359
- and now its going to start popping up during state 2 rather than the real report.
360
- For now we're going on faith that unmounting will always clear the temp report
361
- but we may want to fiddle with the props to make this more robust
362
- */
363
355
  };
364
356
  }, []);
365
357
  const currentDashboardFilters = (0, react_1.useMemo)(() => {
@@ -376,7 +368,13 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
376
368
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
377
369
  const [pivotError, setPivotError] = (0, react_1.useState)(undefined);
378
370
  const pivotData = report?.pivotRows && report?.pivotColumns
379
- ? { rows: report.pivotRows, columns: report.pivotColumns }
371
+ ? {
372
+ rows: report.pivotRows,
373
+ columns: report.pivotColumns,
374
+ rowCount: report.pivotRowCount ?? report.pivotRows.length,
375
+ pivotQuery: report.pivotQuery ?? '',
376
+ comparisonPivotQuery: report.comparisonPivotQuery,
377
+ }
380
378
  : undefined;
381
379
  const columns = report?.columnInternal ?? [];
382
380
  const destinationDashboard = report?.dashboardName;
@@ -468,7 +466,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
468
466
  if (!client) {
469
467
  return;
470
468
  }
471
- const { queryEndpoint, queryHeaders, publicKey, withCredentials, } = client;
469
+ const { queryEndpoint, queryHeaders, publicKey, withCredentials } = client;
472
470
  if (queryEndpoint) {
473
471
  const response = await fetch(queryEndpoint, {
474
472
  method: 'POST',
@@ -567,7 +565,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
567
565
  }, [dashboardConfig, formData.dashboardName, report?.dashboardName]);
568
566
  const currentDashboardTenants = (0, react_1.useMemo)(() => {
569
567
  return (currentDashboard?.tenantKeys?.map((tenantKey) => client?.allTenantTypes?.find((t) => t.tenantField === tenantKey)) ?? []);
570
- }, [tenants]);
568
+ }, [client?.allTenantTypes, currentDashboard?.tenantKeys]);
571
569
  const dashboardOwner = currentDashboardTenants?.[0];
572
570
  const invalidColumns = (0, react_1.useMemo)(() => {
573
571
  if (!rows || !rows.length) {
@@ -679,21 +677,23 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
679
677
  getFormData();
680
678
  }, []);
681
679
  const allTenantMap = (0, react_1.useMemo)(() => {
682
- return client?.allTenantTypes?.reduce((acc, tenantType) => {
680
+ return (client?.allTenantTypes?.reduce((acc, tenantType) => {
683
681
  if (tenantType.scope === 'database') {
684
- acc[tenantType.tenantField] = tenantType.flags?.map((t) => ({
685
- label: t,
686
- value: t,
687
- })) ?? [];
682
+ acc[tenantType.tenantField] =
683
+ tenantType.flags?.map((t) => ({
684
+ label: t,
685
+ value: t,
686
+ })) ?? [];
688
687
  }
689
688
  else {
690
- acc[tenantType.tenantField] = tenantType.tenantIds?.map((t) => ({
691
- label: t.label,
692
- value: t.flag,
693
- })) ?? [];
689
+ acc[tenantType.tenantField] =
690
+ tenantType.tenantIds?.map((t) => ({
691
+ label: t.label,
692
+ value: t.flag,
693
+ })) ?? [];
694
694
  }
695
695
  return acc;
696
- }, {}) ?? {};
696
+ }, {}) ?? {});
697
697
  }, [client?.allTenantTypes]);
698
698
  const [selectedPivotTable, setSelectedPivotTable] = (0, react_1.useState)(pivotData);
699
699
  const pivotCardTable = (0, react_1.useMemo)(() => {
@@ -716,8 +716,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
716
716
  : undefined;
717
717
  if (pivot) {
718
718
  let dateBucket = undefined;
719
+ let dateFilter = undefined;
719
720
  if (filtersEnabled) {
720
- const dateFilter = dashboardFilters?.find((f) => f.filterType === 'date_range');
721
+ dateFilter = dashboardFilters?.find((f) => f.filterType === 'date_range');
721
722
  dateBucket =
722
723
  dateFilter?.startDate && dateFilter?.endDate
723
724
  ? (0, dates_1.getDateBucketFromRange)({
@@ -730,11 +731,15 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
730
731
  const pivotTable = await (0, PivotModal_1.generatePivotTable)({
731
732
  pivot,
732
733
  dateBucket,
733
- report: { ...report, ...(tableInfo ?? { itemQuery }) },
734
+ dateFilter,
735
+ report: report
736
+ ? { ...report, ...(tableInfo ?? { itemQuery }) }
737
+ : undefined,
734
738
  client,
735
739
  uniqueValues,
736
740
  dashboardName: destinationDashboard,
737
741
  tenants,
742
+ additionalProcessing: baseProcessing,
738
743
  });
739
744
  setSelectedPivotTable(pivotTable);
740
745
  }
@@ -801,7 +806,21 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
801
806
  return;
802
807
  }
803
808
  setRowCountIsLoading(true);
804
- const tableInfo = await (0, tableProcessing_1.fetchResultsByQuery)(query, client, tenants, processing, schemaData.customFields, filtersEnabled ? overrideFilters : undefined, filtersEnabled ? (report?.dateField ?? formData.dateField) : undefined, false, true, canonicalFilterMap);
809
+ const tableInfo = await (0, tableProcessing_1.fetchResultsByQuery)({
810
+ query,
811
+ client,
812
+ tenants,
813
+ processing,
814
+ customFields: schemaData.customFields,
815
+ filters: filtersEnabled ? overrideFilters : undefined,
816
+ dateField: filtersEnabled
817
+ ? (report?.dateField ?? formData.dateField)
818
+ : undefined,
819
+ rowsOnly: false,
820
+ rowCountOnly: true,
821
+ filterMap: canonicalFilterMap,
822
+ dashboardName: destinationDashboard,
823
+ });
805
824
  if (tableInfo.rowCount !== undefined) {
806
825
  setRowCount(tableInfo.rowCount);
807
826
  }
@@ -839,7 +858,21 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
839
858
  }
840
859
  try {
841
860
  setIsLoading(true);
842
- const tableInfo = await (0, tableProcessing_1.fetchResultsByQuery)(query, client, tenants, processing, schemaData.customFields, filtersEnabled ? overrideFilters : undefined, filtersEnabled ? (report?.dateField ?? formData.dateField) : undefined, true, false, canonicalFilterMap, destinationDashboard);
861
+ const tableInfo = await (0, tableProcessing_1.fetchResultsByQuery)({
862
+ query,
863
+ client,
864
+ tenants,
865
+ processing,
866
+ customFields: schemaData.customFields,
867
+ filters: filtersEnabled ? overrideFilters : undefined,
868
+ dateField: filtersEnabled
869
+ ? (report?.dateField ?? formData.dateField)
870
+ : undefined,
871
+ rowsOnly: true,
872
+ rowCountOnly: false,
873
+ filterMap: canonicalFilterMap,
874
+ dashboardName: destinationDashboard,
875
+ });
843
876
  setCurrentProcessing(processing);
844
877
  setRows(tableInfo.rows);
845
878
  setProcessedColumns(processColumns(tableInfo.columns));
@@ -861,7 +894,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
861
894
  console.log(e);
862
895
  }
863
896
  };
864
- const onPageChange = (page) => {
897
+ const onPageChange = (page, isPivotTable) => {
865
898
  // only fetch if report is valid, else use query task
866
899
  if (currentProcessing.page &&
867
900
  (0, paginationProcessing_1.shouldFetchMore)(currentProcessing.page, page, maxPage)) {
@@ -874,23 +907,23 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
874
907
  page: newPagination,
875
908
  };
876
909
  setCurrentProcessing(updatedProcessing);
877
- updateTableRows(updatedProcessing);
910
+ updateTableRows(updatedProcessing, false, isPivotTable);
878
911
  }
879
912
  if (page > maxPage) {
880
913
  setMaxPage(page);
881
914
  }
882
915
  };
883
- const onSortChange = (sort) => {
916
+ const onSortChange = (sort, isPivotTable) => {
884
917
  // if (shouldSortInMemory(baseProcessing.page, rowCount)) {
885
918
  // return;
886
919
  // }
887
920
  const updatedProcessing = { ...baseProcessing, sort };
888
- updateTableRows(updatedProcessing, true);
921
+ updateTableRows(updatedProcessing, true, isPivotTable);
889
922
  setCurrentProcessing(updatedProcessing);
890
923
  setCurrentPage(0);
891
924
  setMaxPage(0);
892
925
  };
893
- const updateTableRows = async (processing, resetRows = false) => {
926
+ const updateTableRows = async (processing, resetRows = false, isPivotTable = false) => {
894
927
  if (!client) {
895
928
  return;
896
929
  }
@@ -898,17 +931,40 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
898
931
  setIsLoading(true);
899
932
  try {
900
933
  const updatedProcessing = { ...currentProcessing, ...processing };
901
- const paginatedRows = await (0, tableProcessing_1.fetchResultsByQuery)(query, client, tenants, updatedProcessing, schemaData.customFields, filtersEnabled ? currentDashboardFilters : undefined, filtersEnabled
902
- ? (report?.dateField ?? formData.dateField)
903
- : undefined, false, false, canonicalFilterMap, destinationDashboard);
934
+ const paginatedRows = await (0, tableProcessing_1.fetchResultsByQuery)({
935
+ query: isPivotTable && report.pivotQuery ? report.pivotQuery : query,
936
+ comparisonQuery: isPivotTable && report.comparisonPivotQuery
937
+ ? report.comparisonPivotQuery
938
+ : undefined,
939
+ client,
940
+ tenants,
941
+ processing: updatedProcessing,
942
+ customFields: schemaData.customFields,
943
+ filters: filtersEnabled ? currentDashboardFilters : undefined,
944
+ dateField: filtersEnabled
945
+ ? (report?.dateField ?? formData.dateField)
946
+ : undefined,
947
+ rowsOnly: false,
948
+ rowCountOnly: false,
949
+ filterMap: canonicalFilterMap,
950
+ dashboardName: destinationDashboard,
951
+ pivot: isPivotTable ? report.pivot : undefined,
952
+ getPivotRowCount: false,
953
+ });
904
954
  if (paginatedRows.error) {
905
955
  throw new Error('Error fetching chart');
906
956
  }
907
- let tempRows = [...rows, ...paginatedRows.rows];
957
+ const prevRows = isPivotTable && selectedPivotTable ? selectedPivotTable.rows : rows;
958
+ let updatedRows = [...prevRows, ...paginatedRows.rows];
908
959
  if (resetRows) {
909
- tempRows = paginatedRows.rows;
960
+ updatedRows = paginatedRows.rows;
961
+ }
962
+ if (isPivotTable && selectedPivotTable) {
963
+ setSelectedPivotTable({ ...selectedPivotTable, rows: updatedRows });
964
+ }
965
+ else {
966
+ setRows(updatedRows);
910
967
  }
911
- setRows(tempRows);
912
968
  setCurrentProcessing(updatedProcessing);
913
969
  }
914
970
  catch (e) {
@@ -1021,6 +1077,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1021
1077
  setSelectedPivotTable({
1022
1078
  rows: pivotData.rows,
1023
1079
  columns: pivotData.columns,
1080
+ rowCount: pivotData.rowCount,
1081
+ pivotQuery: pivotData.pivotQuery,
1082
+ comparisonPivotQuery: pivotData.comparisonPivotQuery,
1024
1083
  });
1025
1084
  }
1026
1085
  else {
@@ -1062,7 +1121,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1062
1121
  yAxisFields: [
1063
1122
  ...formData.yAxisFields,
1064
1123
  // @ts-ignore
1065
- { label: '', field: '', chartType: '', format: '' },
1124
+ { label: '', field: '', chartType: '', format: 'whole_number' },
1066
1125
  ],
1067
1126
  });
1068
1127
  }
@@ -1139,30 +1198,44 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1139
1198
  : report && !isAdmin && formData.template
1140
1199
  ? false
1141
1200
  : formData.template,
1142
- reportFlags: formFlags ? Object.fromEntries(Object.entries(formFlags)
1143
- .filter(([, value]) => value.length > 0)
1144
- .map(([key, value]) => {
1145
- return [key, Object.keys(allTenantMap).length > 1 && allTenantMap[key]?.length === value.length ? constants_1.ALL_TENANTS : value];
1146
- })) : undefined,
1201
+ reportFlags: formFlags
1202
+ ? Object.fromEntries(Object.entries(formFlags)
1203
+ .filter(([, value]) => value.length > 0)
1204
+ .map(([key, value]) => {
1205
+ return [
1206
+ key,
1207
+ Object.keys(allTenantMap).length > 1 &&
1208
+ allTenantMap[key]?.length === value.length
1209
+ ? constants_1.ALL_TENANTS
1210
+ : value,
1211
+ ];
1212
+ }))
1213
+ : undefined,
1147
1214
  };
1148
1215
  const resp = await (0, report_1.saveReport)({
1149
- report: newReport,
1216
+ report: { ...newReport, rows: undefined, pivotRows: undefined }, // stop including rows in request
1150
1217
  dashboardItemId,
1151
1218
  client,
1152
1219
  });
1153
1220
  if (resp && resp.name !== 'error') {
1221
+ const data = {
1222
+ ...resp,
1223
+ rows,
1224
+ columns: formData.columns.filter((col) => !invalidColumns.includes(col)),
1225
+ pivotRows: selectedPivotTable?.rows || undefined,
1226
+ pivotColumns: selectedPivotTable?.columns || undefined,
1227
+ triggerReload: true,
1228
+ error: undefined,
1229
+ };
1154
1230
  dispatch({
1155
1231
  type: 'ADD_DASHBOARD_ITEM',
1156
1232
  id: resp.id,
1157
- data: {
1158
- ...resp,
1159
- rows,
1160
- columns: formData.columns.filter((col) => !invalidColumns.includes(col)),
1161
- pivotRows: selectedPivotTable?.rows || undefined,
1162
- pivotColumns: selectedPivotTable?.columns || undefined,
1163
- triggerReload: true,
1164
- error: undefined,
1165
- },
1233
+ data,
1234
+ });
1235
+ reportsDispatch({
1236
+ type: 'ADD_REPORT',
1237
+ id: resp.id,
1238
+ data,
1166
1239
  });
1167
1240
  }
1168
1241
  setIsOpen(false);
@@ -1207,7 +1280,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1207
1280
  maxWidth: !isOpen ? '100%' : `calc(100% - ${formWidth}px - 20px)`, // width of left sidebar plus gap
1208
1281
  }),
1209
1282
  ...(!isHorizontalView && isOpen && { width: formWidth }),
1210
- }, children: [!isEditingMode && (report?.adminError || report?.error) ? ((0, jsx_runtime_1.jsx)(ErrorComponent, { label: report.adminError || report.error, onClick: onClickChartError })) : ((isHorizontalView || (!isOpen && windowWidth < 1200)) && ((0, jsx_runtime_1.jsx)(InternalChart_1.default, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
1283
+ }, children: [!isEditingMode && (report?.adminError || report?.error) ? ((0, jsx_runtime_1.jsx)(ErrorComponent, { label: report.adminError || report.error, onClick: onClickChartError })) : ((isHorizontalView || (!isOpen && windowWidth > 1200)) && ((0, jsx_runtime_1.jsx)(InternalChart_1.default, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
1211
1284
  onFiltersEnabledChanged(hide);
1212
1285
  }, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
1213
1286
  width: '100%',
@@ -1218,8 +1291,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1218
1291
  ...(isHorizontalView && { flexGrow: 1 }),
1219
1292
  }, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen }))),
1220
1293
  // Make sure to display non-pivoted table when using pivot chart
1221
- isAdmin &&
1222
- (isHorizontalView || (!isOpen && windowWidth < 1200)) && ((0, jsx_runtime_1.jsx)("div", { style: {
1294
+ (isHorizontalView || (!isOpen && windowWidth < 1200)) && ((0, jsx_runtime_1.jsx)("div", { style: {
1223
1295
  width: '100%',
1224
1296
  // height:
1225
1297
  // isHorizontalView || !isOpen
@@ -1234,11 +1306,11 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1234
1306
  }, currentPage: currentPage, rowCount: rowCount, isLoading: isLoading, rowCountIsLoading: rowCountIsLoading, disableSort: disableSort })) : ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: selectedPivotTable
1235
1307
  ? selectedPivotTable.columns
1236
1308
  : formData.columns, onPageChange: (page) => {
1237
- onPageChange(page);
1309
+ onPageChange(page, true);
1238
1310
  setCurrentPage(page);
1239
1311
  }, onSortChange: (sort) => {
1240
- onSortChange && onSortChange(sort);
1241
- }, currentPage: currentPage, rowCount: selectedPivotTable ? formattedRows.length : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort })) }))] }), isOpen && ((0, jsx_runtime_1.jsxs)("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
1312
+ onSortChange && onSortChange(sort, true);
1313
+ }, currentPage: currentPage, rowCount: selectedPivotTable ? pivotData?.rowCount : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort })) }))] }), isOpen && ((0, jsx_runtime_1.jsxs)("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
1242
1314
  display: 'flex',
1243
1315
  flexDirection: 'column',
1244
1316
  gap: 20,
@@ -1253,15 +1325,15 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1253
1325
  paddingTop: modalPadding,
1254
1326
  paddingBottom: modalPadding,
1255
1327
  }),
1256
- }, children: [(0, jsx_runtime_1.jsxs)(FormContainer, { children: [(formData.pivot || formData.chartType !== 'table') && windowWidth < 1200 &&
1257
- (0, jsx_runtime_1.jsx)(InternalChart_1.default, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
1258
- onFiltersEnabledChanged(hide);
1259
- }, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
1260
- width: '100%',
1261
- height: 500,
1262
- flexGrow: 1,
1263
- marginBottom: 20,
1264
- }, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)("div", { ref: inputRef, style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(TextInputComponent
1328
+ }, children: [(0, jsx_runtime_1.jsxs)(FormContainer, { children: [(formData.pivot || formData.chartType !== 'table') &&
1329
+ windowWidth < 1200 && ((0, jsx_runtime_1.jsx)(InternalChart_1.default, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
1330
+ onFiltersEnabledChanged(hide);
1331
+ }, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
1332
+ width: '100%',
1333
+ height: 500,
1334
+ flexGrow: 1,
1335
+ marginBottom: 20,
1336
+ }, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen })), (0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)("div", { ref: inputRef, style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsx)(TextInputComponent
1265
1337
  // {...autofocusRefProp}
1266
1338
  , {
1267
1339
  // {...autofocusRefProp}
@@ -1283,7 +1355,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1283
1355
  // marginTop: 6,
1284
1356
  display: 'flex',
1285
1357
  flexDirection: 'column',
1286
- }, children: (0, jsx_runtime_1.jsx)(PivotModal_1.PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotValueField2: pivotValueField2, setPivotValueField2: setPivotValueField2, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: selectedTable, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, CardComponent: CardComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, theme: theme, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: processedColumns, triggerButtonText: 'Add pivot +', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: handleDeletePivot, selectPivot: handleAddPivot, dateRange: dateRange, selectPivotOnEdit: true, showTrigger: !formData.pivot, query: query, pivotCountRequest: 4, initialUniqueValues: initialUniqueValues, uniqueValuesIsLoading: initialUniqueValuesIsLoading, initialSelectedPivotTable: selectedPivotTable, pivotRecommendationsEnabled: pivotRecommendationsEnabled, report: report, dashboardName: destinationDashboard }) }), formData.pivot && ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("div", { style: { width: pivotCardWidth }, children: (0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: pivotCardTable, theme: theme, index: 0, onSelectPivot: () => {
1358
+ }, children: (0, jsx_runtime_1.jsx)(PivotModal_1.PivotModal, { pivotRowField: pivotRowField, setPivotRowField: setPivotRowField, pivotColumnField: pivotColumnField, setPivotColumnField: setPivotColumnField, pivotValueField: pivotValueField, setPivotValueField: setPivotValueField, pivotValueField2: pivotValueField2, setPivotValueField2: setPivotValueField2, pivotAggregation: pivotAggregation, setPivotAggregation: setPivotAggregation, createdPivots: createdPivots, setCreatedPivots: setCreatedPivots, recommendedPivots: recommendedPivots, setRecommendedPivots: setRecommendedPivots, popUpTitle: pivotPopUpTitle, setPopUpTitle: setPivotPopUpTitle, selectedTable: selectedTable, SelectComponent: SelectComponent, ButtonComponent: ButtonComponent, CardComponent: CardComponent, SecondaryButtonComponent: SecondaryButtonComponent, PopoverComponent: PopoverComponent, LabelComponent: LabelComponent, TextComponent: TextComponent, HeaderComponent: HeaderComponent, ErrorMessageComponent: ErrorMessageComponent, PivotRowContainer: PivotRowContainer, PivotColumnContainer: PivotColumnContainer, LoadingComponent: LoadingComponent, theme: theme, isOpen: showPivotPopover, setIsOpen: setShowPivotPopover, showUpdatePivot: isEdittingPivot, setShowUpdatePivot: setIsEdittingPivot, parentRef: parentRef, data: rows, columns: processedColumns, triggerButtonText: 'Add pivot +', selectedPivotIndex: selectedPivotIndex, setSelectedPivotIndex: setSelectedPivotIndex, removePivot: handleDeletePivot, selectPivot: handleAddPivot, dateRange: dateRange, selectPivotOnEdit: true, showTrigger: !formData.pivot, query: query, pivotCountRequest: 4, initialUniqueValues: initialUniqueValues, uniqueValuesIsLoading: initialUniqueValuesIsLoading, initialSelectedPivotTable: selectedPivotTable, pivotRecommendationsEnabled: pivotRecommendationsEnabled, report: report, dashboardName: destinationDashboard, dateFilter: filtersEnabled
1359
+ ? currentDashboardFilters?.find((f) => f.filterType === 'date_range')
1360
+ : undefined }) }), formData.pivot && ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("div", { style: { width: pivotCardWidth }, children: (0, jsx_runtime_1.jsx)(PivotList_1.PivotCard, { pivotTable: pivotCardTable, theme: theme, index: 0, onSelectPivot: () => {
1287
1361
  setIsEdittingPivot(true);
1288
1362
  setShowPivotPopover(true);
1289
1363
  setPivotRowField(formData.pivot?.rowField);
@@ -1292,13 +1366,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1292
1366
  setPivotValueField2(formData.pivot?.valueField2);
1293
1367
  setPivotAggregation(formData.pivot?.aggregationType);
1294
1368
  setPivotPopUpTitle('Edit pivot');
1295
- }, selectedPivotIndex: -1, onEditPivot: () => { }, CardComponent: CardComponent, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent }) }) }))] })] }), (formData.pivot || formData.chartType !== 'table') && ((0, jsx_runtime_1.jsxs)("div", { children: [windowWidth < 1200 && ((0, jsx_runtime_1.jsx)(InternalChart_1.default, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
1296
- onFiltersEnabledChanged(hide);
1297
- }, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
1298
- width: '100%',
1299
- height: 500,
1300
- flexGrow: 1,
1301
- }, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen })), CHART_TO_LABELS[formData.chartType]?.xAxisLabel && ((0, jsx_runtime_1.jsx)("div", { style: {
1369
+ }, selectedPivotIndex: -1, onEditPivot: () => { }, CardComponent: CardComponent, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent }) }) }))] })] }), (formData.pivot || formData.chartType !== 'table') && ((0, jsx_runtime_1.jsxs)("div", { children: [CHART_TO_LABELS[formData.chartType]?.xAxisLabel && ((0, jsx_runtime_1.jsx)("div", { style: {
1302
1370
  display: 'flex',
1303
1371
  flexDirection: 'column',
1304
1372
  }, children: (0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Chart" }) })), CHART_TO_LABELS[formData.chartType]?.xAxisLabel && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.xAxisLabel ?? '' }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.xAxisField, onChange: (e) => handleChange(e.target.value, 'xAxisField'), options: formData.pivot
@@ -1307,12 +1375,12 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1307
1375
  label: elem.field,
1308
1376
  value: elem.field,
1309
1377
  })), width: 200 }), (0, jsx_runtime_1.jsx)(TextInputComponent, { id: "chart-builder-x-axis-label", width: 200, value: formData.xAxisLabel, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'xAxisLabel') }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot &&
1310
- (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType || '')
1378
+ (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType ?? '')
1311
1379
  ? 'pivot_date'
1312
1380
  : formData.xAxisFormat, onChange: (e) => handleChange(e.target.value, 'xAxisFormat'), options: formData.pivot &&
1313
- (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType || '')
1381
+ (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType ?? '')
1314
1382
  ? [{ value: 'pivot_date', label: 'date' }]
1315
- : formatOptions, width: 200 })] })] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.yAxisLabel ?? '' }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputColumnContainer, { children: [formData.yAxisFields.map((yAxisField, index) => ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot
1383
+ : formatOptions, width: 200, hideEmptyOption: true })] })] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.yAxisLabel ?? '' }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputColumnContainer, { children: [formData.yAxisFields.map((yAxisField, index) => ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot
1316
1384
  ? formData.pivot.valueField || 'count'
1317
1385
  : yAxisField.field, onChange: (e) => handleChange(e.target.value, 'yAxisFields.field', index), options: formData.pivot
1318
1386
  ? [
@@ -1332,13 +1400,10 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1332
1400
  })), width: 200 }), (0, jsx_runtime_1.jsx)(TextInputComponent, { id: "chart-builder-y-axis-label", width: 200, value: yAxisField.label, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'yAxisFields.label', index) }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: formData.pivot
1333
1401
  ? NUMBER_OPTIONS.find((option) => {
1334
1402
  return (option.value === yAxisField.format);
1335
- })
1336
- ? // @ts-ignore
1337
- NUMBER_OPTIONS.find((option) => option.value === yAxisField.format).value
1338
- : ''
1403
+ })?.value ?? NUMBER_OPTIONS[0].value
1339
1404
  : yAxisField.format, onChange: (e) => handleChange(e.target.value, 'yAxisFields.format', index), options: formData.pivot
1340
1405
  ? NUMBER_OPTIONS
1341
- : formatOptions, width: 200 }), formData.pivot === null && ((0, jsx_runtime_1.jsx)("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: (0, jsx_runtime_1.jsx)(DeleteButtonComponent, { onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))), formData.pivot === null && ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" }) }))] })] }))] })), isAdmin && windowWidth < 1200 && ((0, jsx_runtime_1.jsx)("div", { style: {
1406
+ : formatOptions, width: 200, hideEmptyOption: true }), !formData.pivot && ((0, jsx_runtime_1.jsx)("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: (0, jsx_runtime_1.jsx)(DeleteButtonComponent, { onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))), !formData.pivot && ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" }) }))] })] }))] })), windowWidth < 1200 && ((0, jsx_runtime_1.jsx)("div", { style: {
1342
1407
  width: '100%',
1343
1408
  height: isHorizontalView || !isOpen ? 'calc(50% - 10px)' : 400,
1344
1409
  flexGrow: 1,
@@ -1350,11 +1415,11 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1350
1415
  }, currentPage: currentPage, rowCount: rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort })) : ((0, jsx_runtime_1.jsx)(TableComponent, { rows: formattedRows, columns: selectedPivotTable
1351
1416
  ? selectedPivotTable.columns
1352
1417
  : formData.columns, onPageChange: (page) => {
1353
- onPageChange(page);
1418
+ onPageChange(page, true);
1354
1419
  setCurrentPage(page);
1355
1420
  }, onSortChange: (sort) => {
1356
- onSortChange && onSortChange(sort);
1357
- }, currentPage: currentPage, rowCount: selectedPivotTable ? formattedRows.length : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort })) })), isAdmin && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { style: {
1421
+ onSortChange && onSortChange(sort, true);
1422
+ }, currentPage: currentPage, rowCount: selectedPivotTable ? pivotData?.rowCount : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort })) })), (showTableFormatOptions || isAdmin) && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { style: {
1358
1423
  display: 'flex',
1359
1424
  flexDirection: 'column',
1360
1425
  }, children: [(0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Table" }), (0, jsx_runtime_1.jsx)(SubHeaderComponent, { label: "Columns" })] }), (0, jsx_runtime_1.jsxs)(ChartBuilderInputColumnContainer, { children: [formData.pivot &&
@@ -1374,7 +1439,10 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1374
1439
  ? 'pivot_date'
1375
1440
  : 'string'
1376
1441
  : formData.pivot?.valueFieldType ||
1377
- 'two_decimal_places', onChange: (e) => handleChange(e.target.value, 'pivotColumn', index), options: formData.pivot && index === 0
1442
+ (formData.pivot?.aggregationType ===
1443
+ 'percentage'
1444
+ ? 'percent'
1445
+ : 'two_decimal_places'), onChange: (e) => handleChange(e.target.value, 'pivotColumn', index), options: formData.pivot && index === 0
1378
1446
  ? (0, PivotModal_1.isDateField)(formData.pivot.rowFieldType || '')
1379
1447
  ? [{ label: 'date', value: 'pivot_date' }]
1380
1448
  : [{ label: 'string', value: 'string' }]
@@ -1455,7 +1523,8 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1455
1523
  userSelect: 'none',
1456
1524
  }, children: "Custom" })] }), client?.allTenantTypes?.length === 1 ? ((0, jsx_runtime_1.jsx)(QuillMultiSelectWithCombo_1.QuillMultiSelectComponentWithCombo, { value: formFlags?.[dashboardOwner.tenantField] ?? [], onChange: (e) => setFormFlags({
1457
1525
  ...formFlags,
1458
- [dashboardOwner.tenantField]: e.target.value,
1526
+ [dashboardOwner.tenantField]: e.target
1527
+ .value,
1459
1528
  }), options: dashboardOwner.scope === 'database'
1460
1529
  ? (dashboardOwner.flags?.map((f) => ({
1461
1530
  label: f,
@@ -1468,18 +1537,26 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1468
1537
  value: t.flag,
1469
1538
  })) ?? []), width: 200, emptyLabel: dashboardOwner.scope === 'database'
1470
1539
  ? 'No flags supplied'
1471
- : undefined, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: { display: customTenantAccess ? 'inline' : 'none', marginTop: -1, marginBottom: -4 } })) : ((0, jsx_runtime_1.jsx)(QuillMultiSelectSectionList_1.QuillMultiSelectSectionList, { value: formFlags ?? {}, onChange: (e) => setFormFlags(e.target.value), options: allTenantMap, sectionHeaderMap: client?.allTenantTypes?.reduce((acc, tenantType) => {
1540
+ : undefined, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: {
1541
+ display: customTenantAccess ? 'inline' : 'none',
1542
+ marginTop: -1,
1543
+ marginBottom: -4,
1544
+ } })) : ((0, jsx_runtime_1.jsx)(QuillMultiSelectSectionList_1.QuillMultiSelectSectionList, { value: formFlags ?? {}, onChange: (e) => setFormFlags(e.target.value), options: allTenantMap, sectionHeaderMap: client?.allTenantTypes?.reduce((acc, tenantType) => {
1472
1545
  if (tenantType.scope === 'database') {
1473
1546
  acc[constants_1.SINGLE_TENANT] = 'Database';
1474
1547
  return acc;
1475
1548
  }
1476
1549
  acc[tenantType.tenantField] = tenantType.name;
1477
1550
  return acc;
1478
- }, {}) ?? {}, width: 200, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: { display: customTenantAccess ? 'inline' : 'none', marginTop: -1, marginBottom: -4 }, owner: dashboardOwner.tenantField }))] }) })] })), (specificDashboardFilters.length > 0 ||
1479
- (isAdmin &&
1480
- formData.dateField &&
1481
- dashboardConfig[formData.dashboardName ?? '']?.config
1482
- .dateFilter?.label)) && ((0, jsx_runtime_1.jsxs)("div", { style: {
1551
+ }, {}) ?? {}, width: 200, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: {
1552
+ display: customTenantAccess ? 'inline' : 'none',
1553
+ marginTop: -1,
1554
+ marginBottom: -4,
1555
+ }, owner: dashboardOwner.tenantField }))] }) })] })), specificDashboardFilters.length > 0 &&
1556
+ isAdmin &&
1557
+ formData.dateField &&
1558
+ dashboardConfig[formData.dashboardName ?? '']?.config.dateFilter
1559
+ ?.label && ((0, jsx_runtime_1.jsxs)("div", { style: {
1483
1560
  display: 'flex',
1484
1561
  flexDirection: 'column',
1485
1562
  gap: 6,
@@ -1510,14 +1587,12 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1510
1587
  .map((filter, index) => ((0, jsx_runtime_1.jsxs)(ChartBuilderInputRowContainer, { children: [(0, jsx_runtime_1.jsx)(TextInputComponent, { id: 'filterMap.' + filter.label, value: filter.label, width: 200, onChange: () => { }, label: index === 0 &&
1511
1588
  !(isAdmin &&
1512
1589
  formData.dateField &&
1513
- dashboardConfig[formData.dashboardName ?? '']
1514
- ?.config.dateFilter?.label)
1590
+ dashboardConfig[formData.dashboardName ?? '']?.config.dateFilter?.label)
1515
1591
  ? 'Filter'
1516
1592
  : '', disabled: true }), (0, jsx_runtime_1.jsx)(SelectComponent, { label: index === 0 &&
1517
1593
  !(isAdmin &&
1518
1594
  formData.dateField &&
1519
- dashboardConfig[formData.dashboardName ?? '']
1520
- ?.config.dateFilter?.label)
1595
+ dashboardConfig[formData.dashboardName ?? '']?.config.dateFilter?.label)
1521
1596
  ? 'Virtual Table'
1522
1597
  : '', value: filterMap[filter.label]?.table ?? filter.table, onChange: (e) => setFilterMap({
1523
1598
  ...filterMap,
@@ -1535,8 +1610,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1535
1610
  })), width: 200 }), (0, jsx_runtime_1.jsx)(SelectComponent, { label: index === 0 &&
1536
1611
  !(isAdmin &&
1537
1612
  formData.dateField &&
1538
- dashboardConfig[formData.dashboardName ?? '']
1539
- ?.config.dateFilter?.label)
1613
+ dashboardConfig[formData.dashboardName ?? '']?.config.dateFilter?.label)
1540
1614
  ? 'Field'
1541
1615
  : '', value: filterMap[filter.label]?.field ?? filter.field, onChange: (e) => setFilterMap({
1542
1616
  ...filterMap,
@@ -1564,8 +1638,10 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1564
1638
  display: 'flex',
1565
1639
  flexDirection: 'row',
1566
1640
  justifyContent: 'flex-end',
1567
- marginTop: 'auto',
1568
1641
  gap: 10,
1642
+ position: 'absolute',
1643
+ bottom: 16,
1644
+ right: 16,
1569
1645
  }, children: [!hideDeleteButton && !isHorizontalView && report && ((0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: deleteChart, label: 'Delete' })), !hideSubmitButton && ((0, jsx_runtime_1.jsxs)("div", { style: {
1570
1646
  display: 'flex',
1571
1647
  flexDirection: 'row',
@@ -1573,7 +1649,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1573
1649
  justifyContent: 'space-between',
1574
1650
  alignItems: 'center',
1575
1651
  gap: 6,
1576
- }, children: [filterIssues.length === 0 ? ((0, jsx_runtime_1.jsx)("div", {})) : ((0, jsx_runtime_1.jsx)(ErrorMessageComponent, { errorMessage: filterIssues[0] || 'Dashbord - Report issues', containerStyle: { height: '100%' } })), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'row', gap: 10 }, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
1652
+ }, children: [filterIssues.length === 0 ? ((0, jsx_runtime_1.jsx)("div", {})) : ((0, jsx_runtime_1.jsx)(ErrorMessageComponent, { errorMessage: filterIssues[0] || 'Dashbord - Report issues', containerStyle: { height: '100%' } })), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'row', gap: 10, backgroundColor: 'white' }, children: [(0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
1577
1653
  setIsOpen(false);
1578
1654
  onDiscardChanges && onDiscardChanges();
1579
1655
  }, label: 'Discard changes' }), (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: () => {