@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
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useRef, useState, useContext, useMemo, } from 'react';
3
- import { ClientContext, DashboardConfigContext, DashboardContext, DashboardFiltersContext, ReportFiltersContext, SchemaDataContext, TenantContext, ThemeContext, } from './Context';
3
+ import { ClientContext, DashboardConfigContext, DashboardContext, DashboardFiltersContext, ReportFiltersContext, ReportsContext, SchemaDataContext, TenantContext, ThemeContext, } from './Context';
4
4
  import { PivotModal, generatePivotTable, isDateField, } from './internals/ReportBuilder/PivotModal';
5
5
  import { PivotCard } from './internals/ReportBuilder/PivotList';
6
6
  import { MemoizedModal, QuillTextInput, MemoizedButton, MemoizedSecondaryButton, MemoizedHeader, MemoizedLabel, MemoizedDeleteButton, MemoizedText, MemoizedPopover, QuillTableComponent, QuillChartBuilderInputRowContainer, QuillChartBuilderInputColumnContainer, MemoizedSubHeader, QuillErrorMessageComponent, QuillPivotRowContainer, QuillPivotColumnContainer, QuillChartBuilderFormContainer, QuillLoadingComponent, } from './components/UiComponents';
@@ -109,7 +109,8 @@ function createReportFromForm(formData, report, selectedPivotTable, rows = [], f
109
109
  filtersApplied: report?.filtersApplied || [],
110
110
  queryString: '',
111
111
  rows: rows,
112
- rowCount: report?.rowCount ||
112
+ rowCount: selectedPivotTable?.rowCount ||
113
+ report?.rowCount ||
113
114
  selectedPivotTable?.rows?.length ||
114
115
  rows.length ||
115
116
  0,
@@ -236,7 +237,7 @@ export function ChartBuilderWithModal(props) {
236
237
  */
237
238
  export default function ChartBuilder({ TextInputComponent = QuillTextInput, SelectComponent = QuillSelectComponent,
238
239
  // MultiSelectComponent = QuillMultiSelectComponentWithCombo,
239
- ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, HeaderComponent = MemoizedHeader, SubHeaderComponent = MemoizedSubHeader, LabelComponent = MemoizedLabel, DeleteButtonComponent = MemoizedDeleteButton, TextComponent = MemoizedText, PopoverComponent = MemoizedPopover, CardComponent = QuillCard, TableComponent = QuillTableComponent, ModalComponent = MemoizedModal, LoadingComponent = QuillLoadingComponent, ErrorMessageComponent = QuillErrorMessageComponent, ChartBuilderInputRowContainer = QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = QuillChartBuilderInputColumnContainer, PivotRowContainer = QuillPivotRowContainer, PivotColumnContainer = QuillPivotColumnContainer, FormContainer = QuillChartBuilderFormContainer, ErrorComponent = 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,
240
+ ButtonComponent = MemoizedButton, SecondaryButtonComponent = MemoizedSecondaryButton, HeaderComponent = MemoizedHeader, SubHeaderComponent = MemoizedSubHeader, LabelComponent = MemoizedLabel, DeleteButtonComponent = MemoizedDeleteButton, TextComponent = MemoizedText, PopoverComponent = MemoizedPopover, CardComponent = QuillCard, TableComponent = QuillTableComponent, ModalComponent = MemoizedModal, LoadingComponent = QuillLoadingComponent, ErrorMessageComponent = QuillErrorMessageComponent, ChartBuilderInputRowContainer = QuillChartBuilderInputRowContainer, ChartBuilderInputColumnContainer = QuillChartBuilderInputColumnContainer, PivotRowContainer = QuillPivotRowContainer, PivotColumnContainer = QuillPivotColumnContainer, FormContainer = QuillChartBuilderFormContainer, ErrorComponent = 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,
240
241
  // isLoading,
241
242
  onClickChartElement, isEditingMode = false, disableSort = true, }) {
242
243
  const [client] = useContext(ClientContext);
@@ -335,6 +336,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
335
336
  }, [isOpen]);
336
337
  const [dashboardOptions, setDashboardOptions] = useState([]);
337
338
  const { reportFilters, reportFiltersDispatch, loadFiltersForReport } = useContext(ReportFiltersContext);
339
+ const { reportsDispatch } = useContext(ReportsContext);
338
340
  useEffect(() => {
339
341
  loadFiltersForReport(report?.id ?? TEMP_REPORT_ID, 'ChartBuilder', specificDashboardFilters, undefined, undefined, canonicalFilterMap, report?.dashboardName);
340
342
  return () => {
@@ -342,16 +344,6 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
342
344
  type: 'CLEAR_REPORT_FILTERS',
343
345
  id: report?.id ?? tempReport?.id ?? TEMP_REPORT_ID,
344
346
  });
345
- // TODO: Currently the behavior of Chart Builder is dependent on whether there is a TEMP_REPORT_ID in context or not
346
- /* The Chart Builder can essentially be in three states
347
- 1. Creating a new report, all we have is an ephemeral temp report
348
- 2. Editing an existing report, we have a report id and the report is in the dashboard context
349
- 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
350
- One can imagine this going wrong: somehow the temp report gets set by SQLEditor or ReportBuilder but never cleared
351
- and now its going to start popping up during state 2 rather than the real report.
352
- For now we're going on faith that unmounting will always clear the temp report
353
- but we may want to fiddle with the props to make this more robust
354
- */
355
347
  };
356
348
  }, []);
357
349
  const currentDashboardFilters = useMemo(() => {
@@ -368,7 +360,13 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
368
360
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
369
361
  const [pivotError, setPivotError] = useState(undefined);
370
362
  const pivotData = report?.pivotRows && report?.pivotColumns
371
- ? { rows: report.pivotRows, columns: report.pivotColumns }
363
+ ? {
364
+ rows: report.pivotRows,
365
+ columns: report.pivotColumns,
366
+ rowCount: report.pivotRowCount ?? report.pivotRows.length,
367
+ pivotQuery: report.pivotQuery ?? '',
368
+ comparisonPivotQuery: report.comparisonPivotQuery,
369
+ }
372
370
  : undefined;
373
371
  const columns = report?.columnInternal ?? [];
374
372
  const destinationDashboard = report?.dashboardName;
@@ -460,7 +458,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
460
458
  if (!client) {
461
459
  return;
462
460
  }
463
- const { queryEndpoint, queryHeaders, publicKey, withCredentials, } = client;
461
+ const { queryEndpoint, queryHeaders, publicKey, withCredentials } = client;
464
462
  if (queryEndpoint) {
465
463
  const response = await fetch(queryEndpoint, {
466
464
  method: 'POST',
@@ -559,7 +557,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
559
557
  }, [dashboardConfig, formData.dashboardName, report?.dashboardName]);
560
558
  const currentDashboardTenants = useMemo(() => {
561
559
  return (currentDashboard?.tenantKeys?.map((tenantKey) => client?.allTenantTypes?.find((t) => t.tenantField === tenantKey)) ?? []);
562
- }, [tenants]);
560
+ }, [client?.allTenantTypes, currentDashboard?.tenantKeys]);
563
561
  const dashboardOwner = currentDashboardTenants?.[0];
564
562
  const invalidColumns = useMemo(() => {
565
563
  if (!rows || !rows.length) {
@@ -671,21 +669,23 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
671
669
  getFormData();
672
670
  }, []);
673
671
  const allTenantMap = useMemo(() => {
674
- return client?.allTenantTypes?.reduce((acc, tenantType) => {
672
+ return (client?.allTenantTypes?.reduce((acc, tenantType) => {
675
673
  if (tenantType.scope === 'database') {
676
- acc[tenantType.tenantField] = tenantType.flags?.map((t) => ({
677
- label: t,
678
- value: t,
679
- })) ?? [];
674
+ acc[tenantType.tenantField] =
675
+ tenantType.flags?.map((t) => ({
676
+ label: t,
677
+ value: t,
678
+ })) ?? [];
680
679
  }
681
680
  else {
682
- acc[tenantType.tenantField] = tenantType.tenantIds?.map((t) => ({
683
- label: t.label,
684
- value: t.flag,
685
- })) ?? [];
681
+ acc[tenantType.tenantField] =
682
+ tenantType.tenantIds?.map((t) => ({
683
+ label: t.label,
684
+ value: t.flag,
685
+ })) ?? [];
686
686
  }
687
687
  return acc;
688
- }, {}) ?? {};
688
+ }, {}) ?? {});
689
689
  }, [client?.allTenantTypes]);
690
690
  const [selectedPivotTable, setSelectedPivotTable] = useState(pivotData);
691
691
  const pivotCardTable = useMemo(() => {
@@ -708,8 +708,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
708
708
  : undefined;
709
709
  if (pivot) {
710
710
  let dateBucket = undefined;
711
+ let dateFilter = undefined;
711
712
  if (filtersEnabled) {
712
- const dateFilter = dashboardFilters?.find((f) => f.filterType === 'date_range');
713
+ dateFilter = dashboardFilters?.find((f) => f.filterType === 'date_range');
713
714
  dateBucket =
714
715
  dateFilter?.startDate && dateFilter?.endDate
715
716
  ? getDateBucketFromRange({
@@ -722,11 +723,15 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
722
723
  const pivotTable = await generatePivotTable({
723
724
  pivot,
724
725
  dateBucket,
725
- report: { ...report, ...(tableInfo ?? { itemQuery }) },
726
+ dateFilter,
727
+ report: report
728
+ ? { ...report, ...(tableInfo ?? { itemQuery }) }
729
+ : undefined,
726
730
  client,
727
731
  uniqueValues,
728
732
  dashboardName: destinationDashboard,
729
733
  tenants,
734
+ additionalProcessing: baseProcessing,
730
735
  });
731
736
  setSelectedPivotTable(pivotTable);
732
737
  }
@@ -793,7 +798,21 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
793
798
  return;
794
799
  }
795
800
  setRowCountIsLoading(true);
796
- const tableInfo = await fetchResultsByQuery(query, client, tenants, processing, schemaData.customFields, filtersEnabled ? overrideFilters : undefined, filtersEnabled ? (report?.dateField ?? formData.dateField) : undefined, false, true, canonicalFilterMap);
801
+ const tableInfo = await fetchResultsByQuery({
802
+ query,
803
+ client,
804
+ tenants,
805
+ processing,
806
+ customFields: schemaData.customFields,
807
+ filters: filtersEnabled ? overrideFilters : undefined,
808
+ dateField: filtersEnabled
809
+ ? (report?.dateField ?? formData.dateField)
810
+ : undefined,
811
+ rowsOnly: false,
812
+ rowCountOnly: true,
813
+ filterMap: canonicalFilterMap,
814
+ dashboardName: destinationDashboard,
815
+ });
797
816
  if (tableInfo.rowCount !== undefined) {
798
817
  setRowCount(tableInfo.rowCount);
799
818
  }
@@ -831,7 +850,21 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
831
850
  }
832
851
  try {
833
852
  setIsLoading(true);
834
- const tableInfo = await fetchResultsByQuery(query, client, tenants, processing, schemaData.customFields, filtersEnabled ? overrideFilters : undefined, filtersEnabled ? (report?.dateField ?? formData.dateField) : undefined, true, false, canonicalFilterMap, destinationDashboard);
853
+ const tableInfo = await fetchResultsByQuery({
854
+ query,
855
+ client,
856
+ tenants,
857
+ processing,
858
+ customFields: schemaData.customFields,
859
+ filters: filtersEnabled ? overrideFilters : undefined,
860
+ dateField: filtersEnabled
861
+ ? (report?.dateField ?? formData.dateField)
862
+ : undefined,
863
+ rowsOnly: true,
864
+ rowCountOnly: false,
865
+ filterMap: canonicalFilterMap,
866
+ dashboardName: destinationDashboard,
867
+ });
835
868
  setCurrentProcessing(processing);
836
869
  setRows(tableInfo.rows);
837
870
  setProcessedColumns(processColumns(tableInfo.columns));
@@ -853,7 +886,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
853
886
  console.log(e);
854
887
  }
855
888
  };
856
- const onPageChange = (page) => {
889
+ const onPageChange = (page, isPivotTable) => {
857
890
  // only fetch if report is valid, else use query task
858
891
  if (currentProcessing.page &&
859
892
  shouldFetchMore(currentProcessing.page, page, maxPage)) {
@@ -866,23 +899,23 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
866
899
  page: newPagination,
867
900
  };
868
901
  setCurrentProcessing(updatedProcessing);
869
- updateTableRows(updatedProcessing);
902
+ updateTableRows(updatedProcessing, false, isPivotTable);
870
903
  }
871
904
  if (page > maxPage) {
872
905
  setMaxPage(page);
873
906
  }
874
907
  };
875
- const onSortChange = (sort) => {
908
+ const onSortChange = (sort, isPivotTable) => {
876
909
  // if (shouldSortInMemory(baseProcessing.page, rowCount)) {
877
910
  // return;
878
911
  // }
879
912
  const updatedProcessing = { ...baseProcessing, sort };
880
- updateTableRows(updatedProcessing, true);
913
+ updateTableRows(updatedProcessing, true, isPivotTable);
881
914
  setCurrentProcessing(updatedProcessing);
882
915
  setCurrentPage(0);
883
916
  setMaxPage(0);
884
917
  };
885
- const updateTableRows = async (processing, resetRows = false) => {
918
+ const updateTableRows = async (processing, resetRows = false, isPivotTable = false) => {
886
919
  if (!client) {
887
920
  return;
888
921
  }
@@ -890,17 +923,40 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
890
923
  setIsLoading(true);
891
924
  try {
892
925
  const updatedProcessing = { ...currentProcessing, ...processing };
893
- const paginatedRows = await fetchResultsByQuery(query, client, tenants, updatedProcessing, schemaData.customFields, filtersEnabled ? currentDashboardFilters : undefined, filtersEnabled
894
- ? (report?.dateField ?? formData.dateField)
895
- : undefined, false, false, canonicalFilterMap, destinationDashboard);
926
+ const paginatedRows = await fetchResultsByQuery({
927
+ query: isPivotTable && report.pivotQuery ? report.pivotQuery : query,
928
+ comparisonQuery: isPivotTable && report.comparisonPivotQuery
929
+ ? report.comparisonPivotQuery
930
+ : undefined,
931
+ client,
932
+ tenants,
933
+ processing: updatedProcessing,
934
+ customFields: schemaData.customFields,
935
+ filters: filtersEnabled ? currentDashboardFilters : undefined,
936
+ dateField: filtersEnabled
937
+ ? (report?.dateField ?? formData.dateField)
938
+ : undefined,
939
+ rowsOnly: false,
940
+ rowCountOnly: false,
941
+ filterMap: canonicalFilterMap,
942
+ dashboardName: destinationDashboard,
943
+ pivot: isPivotTable ? report.pivot : undefined,
944
+ getPivotRowCount: false,
945
+ });
896
946
  if (paginatedRows.error) {
897
947
  throw new Error('Error fetching chart');
898
948
  }
899
- let tempRows = [...rows, ...paginatedRows.rows];
949
+ const prevRows = isPivotTable && selectedPivotTable ? selectedPivotTable.rows : rows;
950
+ let updatedRows = [...prevRows, ...paginatedRows.rows];
900
951
  if (resetRows) {
901
- tempRows = paginatedRows.rows;
952
+ updatedRows = paginatedRows.rows;
953
+ }
954
+ if (isPivotTable && selectedPivotTable) {
955
+ setSelectedPivotTable({ ...selectedPivotTable, rows: updatedRows });
956
+ }
957
+ else {
958
+ setRows(updatedRows);
902
959
  }
903
- setRows(tempRows);
904
960
  setCurrentProcessing(updatedProcessing);
905
961
  }
906
962
  catch (e) {
@@ -1013,6 +1069,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1013
1069
  setSelectedPivotTable({
1014
1070
  rows: pivotData.rows,
1015
1071
  columns: pivotData.columns,
1072
+ rowCount: pivotData.rowCount,
1073
+ pivotQuery: pivotData.pivotQuery,
1074
+ comparisonPivotQuery: pivotData.comparisonPivotQuery,
1016
1075
  });
1017
1076
  }
1018
1077
  else {
@@ -1054,7 +1113,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1054
1113
  yAxisFields: [
1055
1114
  ...formData.yAxisFields,
1056
1115
  // @ts-ignore
1057
- { label: '', field: '', chartType: '', format: '' },
1116
+ { label: '', field: '', chartType: '', format: 'whole_number' },
1058
1117
  ],
1059
1118
  });
1060
1119
  }
@@ -1131,30 +1190,44 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1131
1190
  : report && !isAdmin && formData.template
1132
1191
  ? false
1133
1192
  : formData.template,
1134
- reportFlags: formFlags ? Object.fromEntries(Object.entries(formFlags)
1135
- .filter(([, value]) => value.length > 0)
1136
- .map(([key, value]) => {
1137
- return [key, Object.keys(allTenantMap).length > 1 && allTenantMap[key]?.length === value.length ? ALL_TENANTS : value];
1138
- })) : undefined,
1193
+ reportFlags: formFlags
1194
+ ? Object.fromEntries(Object.entries(formFlags)
1195
+ .filter(([, value]) => value.length > 0)
1196
+ .map(([key, value]) => {
1197
+ return [
1198
+ key,
1199
+ Object.keys(allTenantMap).length > 1 &&
1200
+ allTenantMap[key]?.length === value.length
1201
+ ? ALL_TENANTS
1202
+ : value,
1203
+ ];
1204
+ }))
1205
+ : undefined,
1139
1206
  };
1140
1207
  const resp = await saveReport({
1141
- report: newReport,
1208
+ report: { ...newReport, rows: undefined, pivotRows: undefined }, // stop including rows in request
1142
1209
  dashboardItemId,
1143
1210
  client,
1144
1211
  });
1145
1212
  if (resp && resp.name !== 'error') {
1213
+ const data = {
1214
+ ...resp,
1215
+ rows,
1216
+ columns: formData.columns.filter((col) => !invalidColumns.includes(col)),
1217
+ pivotRows: selectedPivotTable?.rows || undefined,
1218
+ pivotColumns: selectedPivotTable?.columns || undefined,
1219
+ triggerReload: true,
1220
+ error: undefined,
1221
+ };
1146
1222
  dispatch({
1147
1223
  type: 'ADD_DASHBOARD_ITEM',
1148
1224
  id: resp.id,
1149
- data: {
1150
- ...resp,
1151
- rows,
1152
- columns: formData.columns.filter((col) => !invalidColumns.includes(col)),
1153
- pivotRows: selectedPivotTable?.rows || undefined,
1154
- pivotColumns: selectedPivotTable?.columns || undefined,
1155
- triggerReload: true,
1156
- error: undefined,
1157
- },
1225
+ data,
1226
+ });
1227
+ reportsDispatch({
1228
+ type: 'ADD_REPORT',
1229
+ id: resp.id,
1230
+ data,
1158
1231
  });
1159
1232
  }
1160
1233
  setIsOpen(false);
@@ -1199,7 +1272,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1199
1272
  maxWidth: !isOpen ? '100%' : `calc(100% - ${formWidth}px - 20px)`, // width of left sidebar plus gap
1200
1273
  }),
1201
1274
  ...(!isHorizontalView && isOpen && { width: formWidth }),
1202
- }, children: [!isEditingMode && (report?.adminError || report?.error) ? (_jsx(ErrorComponent, { label: report.adminError || report.error, onClick: onClickChartError })) : ((isHorizontalView || (!isOpen && windowWidth < 1200)) && (_jsx(InternalChart, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
1275
+ }, children: [!isEditingMode && (report?.adminError || report?.error) ? (_jsx(ErrorComponent, { label: report.adminError || report.error, onClick: onClickChartError })) : ((isHorizontalView || (!isOpen && windowWidth > 1200)) && (_jsx(InternalChart, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
1203
1276
  onFiltersEnabledChanged(hide);
1204
1277
  }, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
1205
1278
  width: '100%',
@@ -1210,8 +1283,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1210
1283
  ...(isHorizontalView && { flexGrow: 1 }),
1211
1284
  }, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen }))),
1212
1285
  // Make sure to display non-pivoted table when using pivot chart
1213
- isAdmin &&
1214
- (isHorizontalView || (!isOpen && windowWidth < 1200)) && (_jsx("div", { style: {
1286
+ (isHorizontalView || (!isOpen && windowWidth < 1200)) && (_jsx("div", { style: {
1215
1287
  width: '100%',
1216
1288
  // height:
1217
1289
  // isHorizontalView || !isOpen
@@ -1226,11 +1298,11 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1226
1298
  }, currentPage: currentPage, rowCount: rowCount, isLoading: isLoading, rowCountIsLoading: rowCountIsLoading, disableSort: disableSort })) : (_jsx(TableComponent, { rows: formattedRows, columns: selectedPivotTable
1227
1299
  ? selectedPivotTable.columns
1228
1300
  : formData.columns, onPageChange: (page) => {
1229
- onPageChange(page);
1301
+ onPageChange(page, true);
1230
1302
  setCurrentPage(page);
1231
1303
  }, onSortChange: (sort) => {
1232
- onSortChange && onSortChange(sort);
1233
- }, currentPage: currentPage, rowCount: selectedPivotTable ? formattedRows.length : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort })) }))] }), isOpen && (_jsxs("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
1304
+ onSortChange && onSortChange(sort, true);
1305
+ }, currentPage: currentPage, rowCount: selectedPivotTable ? pivotData?.rowCount : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort })) }))] }), isOpen && (_jsxs("form", { ref: parentRef, id: "quill-chart-form", onSubmit: handleSubmit, style: {
1234
1306
  display: 'flex',
1235
1307
  flexDirection: 'column',
1236
1308
  gap: 20,
@@ -1245,15 +1317,15 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1245
1317
  paddingTop: modalPadding,
1246
1318
  paddingBottom: modalPadding,
1247
1319
  }),
1248
- }, children: [_jsxs(FormContainer, { children: [(formData.pivot || formData.chartType !== 'table') && windowWidth < 1200 &&
1249
- _jsx(InternalChart, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
1250
- onFiltersEnabledChanged(hide);
1251
- }, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
1252
- width: '100%',
1253
- height: 500,
1254
- flexGrow: 1,
1255
- marginBottom: 20,
1256
- }, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen }), _jsxs(ChartBuilderInputRowContainer, { children: [_jsx("div", { ref: inputRef, style: { display: 'flex', flexDirection: 'column' }, children: _jsx(TextInputComponent
1320
+ }, children: [_jsxs(FormContainer, { children: [(formData.pivot || formData.chartType !== 'table') &&
1321
+ windowWidth < 1200 && (_jsx(InternalChart, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
1322
+ onFiltersEnabledChanged(hide);
1323
+ }, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
1324
+ width: '100%',
1325
+ height: 500,
1326
+ flexGrow: 1,
1327
+ marginBottom: 20,
1328
+ }, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen })), _jsxs(ChartBuilderInputRowContainer, { children: [_jsx("div", { ref: inputRef, style: { display: 'flex', flexDirection: 'column' }, children: _jsx(TextInputComponent
1257
1329
  // {...autofocusRefProp}
1258
1330
  , {
1259
1331
  // {...autofocusRefProp}
@@ -1275,7 +1347,9 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1275
1347
  // marginTop: 6,
1276
1348
  display: 'flex',
1277
1349
  flexDirection: 'column',
1278
- }, children: _jsx(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 && (_jsx("div", { children: _jsx("div", { style: { width: pivotCardWidth }, children: _jsx(PivotCard, { pivotTable: pivotCardTable, theme: theme, index: 0, onSelectPivot: () => {
1350
+ }, children: _jsx(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
1351
+ ? currentDashboardFilters?.find((f) => f.filterType === 'date_range')
1352
+ : undefined }) }), formData.pivot && (_jsx("div", { children: _jsx("div", { style: { width: pivotCardWidth }, children: _jsx(PivotCard, { pivotTable: pivotCardTable, theme: theme, index: 0, onSelectPivot: () => {
1279
1353
  setIsEdittingPivot(true);
1280
1354
  setShowPivotPopover(true);
1281
1355
  setPivotRowField(formData.pivot?.rowField);
@@ -1284,13 +1358,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1284
1358
  setPivotValueField2(formData.pivot?.valueField2);
1285
1359
  setPivotAggregation(formData.pivot?.aggregationType);
1286
1360
  setPivotPopUpTitle('Edit pivot');
1287
- }, selectedPivotIndex: -1, onEditPivot: () => { }, CardComponent: CardComponent, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent }) }) }))] })] }), (formData.pivot || formData.chartType !== 'table') && (_jsxs("div", { children: [windowWidth < 1200 && (_jsx(InternalChart, { report: chartData, filtersEnabled: filtersEnabled, setFiltersEnabled: (hide) => {
1288
- onFiltersEnabledChanged(hide);
1289
- }, colors: theme?.chartColors, loading: false, hideDateRangeFilter: hideDateRangeFilter, isAdmin: isAdmin, containerStyle: {
1290
- width: '100%',
1291
- height: 500,
1292
- flexGrow: 1,
1293
- }, onClickChartElement: onClickChartElement, filterToggleDisabled: Object.values(validFilter).includes(false), onDashboardFilterChange: onDashboardFilterChange, layoutChanged: isOpen })), CHART_TO_LABELS[formData.chartType]?.xAxisLabel && (_jsx("div", { style: {
1361
+ }, selectedPivotIndex: -1, onEditPivot: () => { }, CardComponent: CardComponent, ButtonComponent: ButtonComponent, HeaderComponent: HeaderComponent, showEdit: false, onClose: handleDeletePivot, minHeight: 180, LabelComponent: LabelComponent, TextComponent: TextComponent }) }) }))] })] }), (formData.pivot || formData.chartType !== 'table') && (_jsxs("div", { children: [CHART_TO_LABELS[formData.chartType]?.xAxisLabel && (_jsx("div", { style: {
1294
1362
  display: 'flex',
1295
1363
  flexDirection: 'column',
1296
1364
  }, children: _jsx(HeaderComponent, { label: "Chart" }) })), CHART_TO_LABELS[formData.chartType]?.xAxisLabel && (_jsxs("div", { children: [_jsx(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.xAxisLabel ?? '' }), _jsxs(ChartBuilderInputRowContainer, { children: [_jsx(SelectComponent, { value: formData.xAxisField, onChange: (e) => handleChange(e.target.value, 'xAxisField'), options: formData.pivot
@@ -1299,12 +1367,12 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1299
1367
  label: elem.field,
1300
1368
  value: elem.field,
1301
1369
  })), width: 200 }), _jsx(TextInputComponent, { id: "chart-builder-x-axis-label", width: 200, value: formData.xAxisLabel, placeholder: "Column Label", onChange: (e) => handleChange(e.target.value, 'xAxisLabel') }), _jsx(SelectComponent, { value: formData.pivot &&
1302
- isDateField(formData.pivot.rowFieldType || '')
1370
+ isDateField(formData.pivot.rowFieldType ?? '')
1303
1371
  ? 'pivot_date'
1304
1372
  : formData.xAxisFormat, onChange: (e) => handleChange(e.target.value, 'xAxisFormat'), options: formData.pivot &&
1305
- isDateField(formData.pivot.rowFieldType || '')
1373
+ isDateField(formData.pivot.rowFieldType ?? '')
1306
1374
  ? [{ value: 'pivot_date', label: 'date' }]
1307
- : formatOptions, width: 200 })] })] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && (_jsxs("div", { children: [_jsx(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.yAxisLabel ?? '' }), _jsxs(ChartBuilderInputColumnContainer, { children: [formData.yAxisFields.map((yAxisField, index) => (_jsxs(ChartBuilderInputRowContainer, { children: [_jsx(SelectComponent, { value: formData.pivot
1375
+ : formatOptions, width: 200, hideEmptyOption: true })] })] })), CHART_TO_LABELS[formData.chartType]?.yAxisLabel && (_jsxs("div", { children: [_jsx(SubHeaderComponent, { label: CHART_TO_LABELS[formData.chartType]?.yAxisLabel ?? '' }), _jsxs(ChartBuilderInputColumnContainer, { children: [formData.yAxisFields.map((yAxisField, index) => (_jsxs(ChartBuilderInputRowContainer, { children: [_jsx(SelectComponent, { value: formData.pivot
1308
1376
  ? formData.pivot.valueField || 'count'
1309
1377
  : yAxisField.field, onChange: (e) => handleChange(e.target.value, 'yAxisFields.field', index), options: formData.pivot
1310
1378
  ? [
@@ -1324,13 +1392,10 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1324
1392
  })), width: 200 }), _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) }), _jsx(SelectComponent, { value: formData.pivot
1325
1393
  ? NUMBER_OPTIONS.find((option) => {
1326
1394
  return (option.value === yAxisField.format);
1327
- })
1328
- ? // @ts-ignore
1329
- NUMBER_OPTIONS.find((option) => option.value === yAxisField.format).value
1330
- : ''
1395
+ })?.value ?? NUMBER_OPTIONS[0].value
1331
1396
  : yAxisField.format, onChange: (e) => handleChange(e.target.value, 'yAxisFields.format', index), options: formData.pivot
1332
1397
  ? NUMBER_OPTIONS
1333
- : formatOptions, width: 200 }), formData.pivot === null && (_jsx("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: _jsx(DeleteButtonComponent, { onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))), formData.pivot === null && (_jsx("div", { children: _jsx(SecondaryButtonComponent, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" }) }))] })] }))] })), isAdmin && windowWidth < 1200 && (_jsx("div", { style: {
1398
+ : formatOptions, width: 200, hideEmptyOption: true }), !formData.pivot && (_jsx("div", { ref: deleteRef, style: { marginLeft: deleteButtonMargin }, children: _jsx(DeleteButtonComponent, { onClick: () => handleRemoveField('yAxisFields', index) }) }))] }, 'yAxisField' + index))), !formData.pivot && (_jsx("div", { children: _jsx(SecondaryButtonComponent, { onClick: () => handleAddField('yAxisFields'), label: "Add field +" }) }))] })] }))] })), windowWidth < 1200 && (_jsx("div", { style: {
1334
1399
  width: '100%',
1335
1400
  height: isHorizontalView || !isOpen ? 'calc(50% - 10px)' : 400,
1336
1401
  flexGrow: 1,
@@ -1342,11 +1407,11 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1342
1407
  }, currentPage: currentPage, rowCount: rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort })) : (_jsx(TableComponent, { rows: formattedRows, columns: selectedPivotTable
1343
1408
  ? selectedPivotTable.columns
1344
1409
  : formData.columns, onPageChange: (page) => {
1345
- onPageChange(page);
1410
+ onPageChange(page, true);
1346
1411
  setCurrentPage(page);
1347
1412
  }, onSortChange: (sort) => {
1348
- onSortChange && onSortChange(sort);
1349
- }, currentPage: currentPage, rowCount: selectedPivotTable ? formattedRows.length : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort })) })), isAdmin && (_jsxs("div", { children: [_jsxs("div", { style: {
1413
+ onSortChange && onSortChange(sort, true);
1414
+ }, currentPage: currentPage, rowCount: selectedPivotTable ? pivotData?.rowCount : rowCount, rowCountIsLoading: rowCountIsLoading, isLoading: isLoading, disableSort: disableSort })) })), (showTableFormatOptions || isAdmin) && (_jsxs("div", { children: [_jsxs("div", { style: {
1350
1415
  display: 'flex',
1351
1416
  flexDirection: 'column',
1352
1417
  }, children: [_jsx(HeaderComponent, { label: "Table" }), _jsx(SubHeaderComponent, { label: "Columns" })] }), _jsxs(ChartBuilderInputColumnContainer, { children: [formData.pivot &&
@@ -1366,7 +1431,10 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1366
1431
  ? 'pivot_date'
1367
1432
  : 'string'
1368
1433
  : formData.pivot?.valueFieldType ||
1369
- 'two_decimal_places', onChange: (e) => handleChange(e.target.value, 'pivotColumn', index), options: formData.pivot && index === 0
1434
+ (formData.pivot?.aggregationType ===
1435
+ 'percentage'
1436
+ ? 'percent'
1437
+ : 'two_decimal_places'), onChange: (e) => handleChange(e.target.value, 'pivotColumn', index), options: formData.pivot && index === 0
1370
1438
  ? isDateField(formData.pivot.rowFieldType || '')
1371
1439
  ? [{ label: 'date', value: 'pivot_date' }]
1372
1440
  : [{ label: 'string', value: 'string' }]
@@ -1447,7 +1515,8 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1447
1515
  userSelect: 'none',
1448
1516
  }, children: "Custom" })] }), client?.allTenantTypes?.length === 1 ? (_jsx(MultiSelectComponent, { value: formFlags?.[dashboardOwner.tenantField] ?? [], onChange: (e) => setFormFlags({
1449
1517
  ...formFlags,
1450
- [dashboardOwner.tenantField]: e.target.value,
1518
+ [dashboardOwner.tenantField]: e.target
1519
+ .value,
1451
1520
  }), options: dashboardOwner.scope === 'database'
1452
1521
  ? (dashboardOwner.flags?.map((f) => ({
1453
1522
  label: f,
@@ -1460,18 +1529,26 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1460
1529
  value: t.flag,
1461
1530
  })) ?? []), width: 200, emptyLabel: dashboardOwner.scope === 'database'
1462
1531
  ? 'No flags supplied'
1463
- : undefined, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: { display: customTenantAccess ? 'inline' : 'none', marginTop: -1, marginBottom: -4 } })) : (_jsx(QuillMultiSelectSectionList, { value: formFlags ?? {}, onChange: (e) => setFormFlags(e.target.value), options: allTenantMap, sectionHeaderMap: client?.allTenantTypes?.reduce((acc, tenantType) => {
1532
+ : undefined, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: {
1533
+ display: customTenantAccess ? 'inline' : 'none',
1534
+ marginTop: -1,
1535
+ marginBottom: -4,
1536
+ } })) : (_jsx(QuillMultiSelectSectionList, { value: formFlags ?? {}, onChange: (e) => setFormFlags(e.target.value), options: allTenantMap, sectionHeaderMap: client?.allTenantTypes?.reduce((acc, tenantType) => {
1464
1537
  if (tenantType.scope === 'database') {
1465
1538
  acc[SINGLE_TENANT] = 'Database';
1466
1539
  return acc;
1467
1540
  }
1468
1541
  acc[tenantType.tenantField] = tenantType.name;
1469
1542
  return acc;
1470
- }, {}) ?? {}, width: 200, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: { display: customTenantAccess ? 'inline' : 'none', marginTop: -1, marginBottom: -4 }, owner: dashboardOwner.tenantField }))] }) })] })), (specificDashboardFilters.length > 0 ||
1471
- (isAdmin &&
1472
- formData.dateField &&
1473
- dashboardConfig[formData.dashboardName ?? '']?.config
1474
- .dateFilter?.label)) && (_jsxs("div", { style: {
1543
+ }, {}) ?? {}, width: 200, allSelectedLabel: 'All ' + dashboardOwner.name + 's', style: {
1544
+ display: customTenantAccess ? 'inline' : 'none',
1545
+ marginTop: -1,
1546
+ marginBottom: -4,
1547
+ }, owner: dashboardOwner.tenantField }))] }) })] })), specificDashboardFilters.length > 0 &&
1548
+ isAdmin &&
1549
+ formData.dateField &&
1550
+ dashboardConfig[formData.dashboardName ?? '']?.config.dateFilter
1551
+ ?.label && (_jsxs("div", { style: {
1475
1552
  display: 'flex',
1476
1553
  flexDirection: 'column',
1477
1554
  gap: 6,
@@ -1502,14 +1579,12 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1502
1579
  .map((filter, index) => (_jsxs(ChartBuilderInputRowContainer, { children: [_jsx(TextInputComponent, { id: 'filterMap.' + filter.label, value: filter.label, width: 200, onChange: () => { }, label: index === 0 &&
1503
1580
  !(isAdmin &&
1504
1581
  formData.dateField &&
1505
- dashboardConfig[formData.dashboardName ?? '']
1506
- ?.config.dateFilter?.label)
1582
+ dashboardConfig[formData.dashboardName ?? '']?.config.dateFilter?.label)
1507
1583
  ? 'Filter'
1508
1584
  : '', disabled: true }), _jsx(SelectComponent, { label: index === 0 &&
1509
1585
  !(isAdmin &&
1510
1586
  formData.dateField &&
1511
- dashboardConfig[formData.dashboardName ?? '']
1512
- ?.config.dateFilter?.label)
1587
+ dashboardConfig[formData.dashboardName ?? '']?.config.dateFilter?.label)
1513
1588
  ? 'Virtual Table'
1514
1589
  : '', value: filterMap[filter.label]?.table ?? filter.table, onChange: (e) => setFilterMap({
1515
1590
  ...filterMap,
@@ -1527,8 +1602,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1527
1602
  })), width: 200 }), _jsx(SelectComponent, { label: index === 0 &&
1528
1603
  !(isAdmin &&
1529
1604
  formData.dateField &&
1530
- dashboardConfig[formData.dashboardName ?? '']
1531
- ?.config.dateFilter?.label)
1605
+ dashboardConfig[formData.dashboardName ?? '']?.config.dateFilter?.label)
1532
1606
  ? 'Field'
1533
1607
  : '', value: filterMap[filter.label]?.field ?? filter.field, onChange: (e) => setFilterMap({
1534
1608
  ...filterMap,
@@ -1556,8 +1630,10 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1556
1630
  display: 'flex',
1557
1631
  flexDirection: 'row',
1558
1632
  justifyContent: 'flex-end',
1559
- marginTop: 'auto',
1560
1633
  gap: 10,
1634
+ position: 'absolute',
1635
+ bottom: 16,
1636
+ right: 16,
1561
1637
  }, children: [!hideDeleteButton && !isHorizontalView && report && (_jsx(SecondaryButtonComponent, { onClick: deleteChart, label: 'Delete' })), !hideSubmitButton && (_jsxs("div", { style: {
1562
1638
  display: 'flex',
1563
1639
  flexDirection: 'row',
@@ -1565,7 +1641,7 @@ onClickChartElement, isEditingMode = false, disableSort = true, }) {
1565
1641
  justifyContent: 'space-between',
1566
1642
  alignItems: 'center',
1567
1643
  gap: 6,
1568
- }, children: [filterIssues.length === 0 ? (_jsx("div", {})) : (_jsx(ErrorMessageComponent, { errorMessage: filterIssues[0] || 'Dashbord - Report issues', containerStyle: { height: '100%' } })), _jsxs("div", { style: { display: 'flex', flexDirection: 'row', gap: 10 }, children: [_jsx(SecondaryButtonComponent, { onClick: () => {
1644
+ }, children: [filterIssues.length === 0 ? (_jsx("div", {})) : (_jsx(ErrorMessageComponent, { errorMessage: filterIssues[0] || 'Dashbord - Report issues', containerStyle: { height: '100%' } })), _jsxs("div", { style: { display: 'flex', flexDirection: 'row', gap: 10, backgroundColor: 'white' }, children: [_jsx(SecondaryButtonComponent, { onClick: () => {
1569
1645
  setIsOpen(false);
1570
1646
  onDiscardChanges && onDiscardChanges();
1571
1647
  }, label: 'Discard changes' }), _jsx(ButtonComponent, { onClick: () => {