@quillsql/react 2.13.20 → 2.13.22

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 (85) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +208 -40
  3. package/dist/cjs/Context.d.ts.map +1 -1
  4. package/dist/cjs/Context.js +15 -10
  5. package/dist/cjs/Dashboard.d.ts.map +1 -1
  6. package/dist/cjs/Dashboard.js +58 -13
  7. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  8. package/dist/cjs/components/Chart/LineChart.js +12 -22
  9. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  10. package/dist/cjs/components/Dashboard/DashboardFilter.js +19 -1
  11. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  12. package/dist/cjs/components/Dashboard/DataLoader.js +26 -15
  13. package/dist/cjs/hooks/useDashboard.d.ts +1 -4
  14. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  15. package/dist/cjs/hooks/useDashboard.js +1 -22
  16. package/dist/cjs/hooks/useExport.d.ts +1 -8
  17. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  18. package/dist/cjs/hooks/useExport.js +105 -72
  19. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  20. package/dist/cjs/hooks/useQuill.js +23 -21
  21. package/dist/cjs/hooks/useReport.d.ts +12 -0
  22. package/dist/cjs/hooks/useReport.d.ts.map +1 -0
  23. package/dist/cjs/hooks/useReport.js +56 -0
  24. package/dist/cjs/index.d.ts +2 -1
  25. package/dist/cjs/index.d.ts.map +1 -1
  26. package/dist/cjs/index.js +3 -2
  27. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  28. package/dist/cjs/internals/ReportBuilder/PivotModal.js +1 -0
  29. package/dist/cjs/utils/dataProcessing.js +2 -2
  30. package/dist/cjs/utils/filterProcessing.d.ts +2 -1
  31. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  32. package/dist/cjs/utils/filterProcessing.js +168 -22
  33. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  34. package/dist/cjs/utils/pivotConstructor.js +47 -10
  35. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  36. package/dist/cjs/utils/queryConstructor.js +3 -2
  37. package/dist/cjs/utils/report.d.ts +1 -1
  38. package/dist/cjs/utils/report.d.ts.map +1 -1
  39. package/dist/cjs/utils/report.js +4 -2
  40. package/dist/cjs/utils/valueFormatter.d.ts +5 -1
  41. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  42. package/dist/cjs/utils/valueFormatter.js +32 -12
  43. package/dist/esm/Chart.d.ts.map +1 -1
  44. package/dist/esm/Chart.js +211 -43
  45. package/dist/esm/Context.d.ts.map +1 -1
  46. package/dist/esm/Context.js +15 -10
  47. package/dist/esm/Dashboard.d.ts.map +1 -1
  48. package/dist/esm/Dashboard.js +61 -16
  49. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  50. package/dist/esm/components/Chart/LineChart.js +15 -25
  51. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  52. package/dist/esm/components/Dashboard/DashboardFilter.js +20 -2
  53. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  54. package/dist/esm/components/Dashboard/DataLoader.js +26 -15
  55. package/dist/esm/hooks/useDashboard.d.ts +1 -4
  56. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  57. package/dist/esm/hooks/useDashboard.js +1 -21
  58. package/dist/esm/hooks/useExport.d.ts +1 -8
  59. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  60. package/dist/esm/hooks/useExport.js +106 -73
  61. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  62. package/dist/esm/hooks/useQuill.js +23 -21
  63. package/dist/esm/hooks/useReport.d.ts +12 -0
  64. package/dist/esm/hooks/useReport.d.ts.map +1 -0
  65. package/dist/esm/hooks/useReport.js +51 -0
  66. package/dist/esm/index.d.ts +2 -1
  67. package/dist/esm/index.d.ts.map +1 -1
  68. package/dist/esm/index.js +2 -1
  69. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  70. package/dist/esm/internals/ReportBuilder/PivotModal.js +1 -0
  71. package/dist/esm/utils/dataProcessing.js +2 -2
  72. package/dist/esm/utils/filterProcessing.d.ts +2 -1
  73. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  74. package/dist/esm/utils/filterProcessing.js +168 -23
  75. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  76. package/dist/esm/utils/pivotConstructor.js +47 -10
  77. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  78. package/dist/esm/utils/queryConstructor.js +3 -2
  79. package/dist/esm/utils/report.d.ts +1 -1
  80. package/dist/esm/utils/report.d.ts.map +1 -1
  81. package/dist/esm/utils/report.js +4 -2
  82. package/dist/esm/utils/valueFormatter.d.ts +5 -1
  83. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  84. package/dist/esm/utils/valueFormatter.js +33 -13
  85. package/package.json +4 -4
@@ -11,44 +11,34 @@ const axisFormatter_1 = require("../../utils/axisFormatter");
11
11
  const color_1 = require("../../utils/color");
12
12
  const ChartTooltip_1 = __importDefault(require("../../components/Chart/ChartTooltip"));
13
13
  const getDomain_1 = __importDefault(require("../../utils/getDomain"));
14
- const react_1 = require("react");
15
14
  const crypto_1 = require("../../utils/crypto");
15
+ const react_1 = require("react");
16
16
  function createLineForEmptyChart(yAxisFields, dateFilter, xAxisField, xAxisFormat) {
17
17
  let lineChartData = [];
18
- if (dateFilter &&
18
+ if (dateFilter && dateFilter.startDate && dateFilter.endDate &&
19
19
  valueFormatter_1.DATE_FORMAT_TYPES.includes(xAxisFormat || '') &&
20
20
  (!lineChartData || lineChartData.length === 0)) {
21
21
  const xAxis = xAxisField || '';
22
22
  const yAxis = yAxisFields[0]?.field;
23
- const startDate = (0, valueFormatter_1.quillFormat)({
24
- value: dateFilter?.startDate,
25
- format: xAxisFormat,
26
- });
27
- const endDate = (0, valueFormatter_1.quillFormat)({
28
- value: dateFilter?.endDate,
29
- format: xAxisFormat,
30
- });
31
23
  lineChartData = [
32
- { [xAxis]: startDate, [yAxis]: '0' },
33
- { [xAxis]: endDate, [yAxis]: '0' },
24
+ { [xAxis]: dateFilter.startDate, [yAxis]: '0' },
25
+ { [xAxis]: dateFilter.endDate, [yAxis]: '0' },
34
26
  ];
35
27
  }
36
28
  return lineChartData;
37
29
  }
38
30
  function LineChart({ colors, colorMap = {}, yAxisFields, data, containerStyle, className, xAxisField, xAxisFormat, theme, comparison, isAnimationActive = true, hideXAxis = false, hideYAxis = false, hideCartesianGrid = false, hideHorizontalCartesianGrid = false, hideVerticalCartesianGrid = true, hideSubsequentXAxisTicks = false, cartesianGridLineStyle = 'solid', comparisonLineStyle = 'solid', cartesianGridLineColor, onClickChartElement = () => { }, dateFilter, }) {
39
- const [formattedData, setFormattedData] = (0, react_1.useState)(data);
40
- (0, react_1.useEffect)(() => {
31
+ const formattedData = (0, react_1.useMemo)(() => {
41
32
  if (!data || data.length === 0) {
42
- setFormattedData(createLineForEmptyChart(yAxisFields, dateFilter, xAxisField, xAxisFormat));
43
- return;
33
+ return createLineForEmptyChart(yAxisFields, dateFilter, xAxisField, xAxisFormat);
44
34
  }
45
35
  const newData = [...data];
46
- if (newData.length === 1) {
47
- const point = { ...newData[0] };
48
- newData.push(point);
49
- }
50
- setFormattedData(newData);
51
- }, [data]);
36
+ // if (newData.length === 1) {
37
+ // const point = { ...newData[0] };
38
+ // newData.push(point);
39
+ // }
40
+ return newData;
41
+ }, [data, yAxisFields, dateFilter, xAxisField, xAxisFormat]);
52
42
  if (!formattedData || formattedData.length === 0) {
53
43
  return ((0, jsx_runtime_1.jsx)("div", { style: {
54
44
  display: 'flex',
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardFilter.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/DashboardFilter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAEL,KAAK,6BAA6B,EACnC,MAAM,4CAA4C,CAAC;AAGpD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEjE,KAAK,mBAAmB,GAAG,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,KAAK,EACL,SAAS,EACT,eAAe,GAChB,EAAE;IACD,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;CACjE,KAAK,GAAG,CAAC,OAAO,CAAC;AAElB,KAAK,wBAAwB,GAAG,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,KAAK,EACL,SAAS,GACV,EAAE;IACD,KAAK,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,CACR,KAAK,EACD,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,GACpC;QAAE,MAAM,EAAE;YAAE,KAAK,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;SAAE,CAAA;KAAE,KACzC,IAAI,CAAC;CACX,KAAK,GAAG,CAAC,OAAO,CAAC;AAElB,KAAK,4BAA4B,GAAG,CAAC,EACnC,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,MAAM,EACN,WAAW,GACZ,EAAE,6BAA6B,KAAK,GAAG,CAAC,OAAO,CAAC;AAEjD,UAAU,oBAAoB;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,CACd,MAAM,EAAE,OAAO,EACf,KAAK,CAAC,EACF,MAAM,GACN,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GACjB;QAAE,SAAS,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,IAAI,CAAA;KAAE,GAClC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,EACtB,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KACzC,IAAI,CAAC;IACV,eAAe,EACX,mBAAmB,GACnB,KAAK,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IACnD,oBAAoB,EAChB,wBAAwB,GACxB,KAAK,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;IACxD,wBAAwB,EACpB,4BAA4B,GAC5B,KAAK,CAAC,mBAAmB,CAAC,4BAA4B,CAAC,CAAC;IAC5D,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,cAAc,EACd,eAAsC,EACtC,oBAAgD,EAChD,wBAA+C,EAC/C,KAAK,EACL,SAAS,GACV,EAAE,oBAAoB,kDAsItB"}
1
+ {"version":3,"file":"DashboardFilter.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/DashboardFilter.tsx"],"names":[],"mappings":"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"}
@@ -2,11 +2,29 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DashboardFilter = DashboardFilter;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
5
6
  const dateRangePickerUtils_1 = require("../../DateRangePicker/dateRangePickerUtils");
6
7
  const QuillDateRangePicker_1 = require("../../DateRangePicker/QuillDateRangePicker");
7
8
  const QuillMultiSelect_1 = require("../QuillMultiSelect");
8
9
  const QuillSelect_1 = require("../QuillSelect");
9
10
  function DashboardFilter({ filter, onChangeFilter, SelectComponent = QuillSelect_1.QuillSelectComponent, MultiSelectComponent = QuillMultiSelect_1.QuillMultiSelectComponent, DateRangePickerComponent = QuillDateRangePicker_1.QuillDateRangePicker, theme, isLoading, }) {
11
+ const preset = (0, react_1.useMemo)(() => {
12
+ if (('preset' in filter || 'primaryRange' in filter) && 'startDate' in filter && 'endDate' in filter) {
13
+ if (!filter.preset && !filter.primaryRange)
14
+ return '';
15
+ if (!filter.startDate || !filter.endDate)
16
+ return filter.preset?.value ?? filter.primaryRange.value;
17
+ const presetRange = filter.presetRanges?.find((range) => range.value === (filter.preset?.value ?? filter.primaryRange.value)) ?? dateRangePickerUtils_1.PRIMARY_RANGE[filter.preset?.value ?? filter.primaryRange.value];
18
+ if (!presetRange)
19
+ return filter.preset?.value ?? filter.primaryRange.value;
20
+ if (presetRange.startDate !== filter.startDate ||
21
+ presetRange.endDate !== filter.endDate) {
22
+ return '';
23
+ }
24
+ return filter.preset?.value ?? filter.primaryRange.value;
25
+ }
26
+ return '';
27
+ }, [filter]);
10
28
  if (!filter.options && !isLoading && !(filter.filterType === 'date_range')) {
11
29
  return null;
12
30
  }
@@ -48,7 +66,7 @@ function DashboardFilter({ filter, onChangeFilter, SelectComponent = QuillSelect
48
66
  display: 'flex',
49
67
  flexDirection: 'row',
50
68
  alignItems: 'flex-end',
51
- }, children: [(0, jsx_runtime_1.jsx)(DateRangePickerComponent, { label: filter.label, dateRange: { startDate: filter.startDate, endDate: filter.endDate }, preset: filter.preset?.value, onChangeDateRange: (value) => {
69
+ }, children: [(0, jsx_runtime_1.jsx)(DateRangePickerComponent, { label: filter.label, dateRange: { startDate: filter.startDate, endDate: filter.endDate }, preset: preset, onChangeDateRange: (value) => {
52
70
  onChangeFilter(filter, {
53
71
  startDate: value.startDate,
54
72
  endDate: value.endDate,
@@ -1 +1 @@
1
- {"version":3,"file":"DataLoader.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/DataLoader.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAuB,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAajD,OAAO,EACL,oBAAoB,EAErB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA2BtE,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,YAAY,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnE,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAuFF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,WAAW,EACX,oBAAoB,EAAE,2BAA2B,EACjD,UAAkB,GACnB,EAAE;IACD,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,CAAC,EACT,SAAS,EACT,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,IAAI,GACL,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;CACzC,GAAG,GAAG,CAAC,OAAO,CAuTd;AAED,KAAK,YAAY,GAAG;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAIF,eAAO,MAAM,eAAe,4FAQzB;IACD,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,CAClB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,KACf,YAAY,CAAC;IAClB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,CAAC,EACT,SAAS,EACT,KAAK,EACL,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,iBAAiB,GAClB,EAAE,yBAAyB,KAAK,GAAG,CAAC,OAAO,CAAC;CAC9C,KAAG,GAAG,CAAC,OA2JP,CAAC"}
1
+ {"version":3,"file":"DataLoader.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/DataLoader.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAuB,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAajD,OAAO,EACL,oBAAoB,EAErB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA0BtE,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,YAAY,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnE,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAuFF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,WAAW,EACX,oBAAoB,EAAE,2BAA2B,EACjD,UAAkB,GACnB,EAAE;IACD,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,CAAC,EACT,SAAS,EACT,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,IAAI,GACL,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;CACzC,GAAG,GAAG,CAAC,OAAO,CA+Td;AAED,KAAK,YAAY,GAAG;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAIF,eAAO,MAAM,eAAe,4FAQzB;IACD,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,CAClB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,KACf,YAAY,CAAC;IAClB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,CAAC,EACT,SAAS,EACT,KAAK,EACL,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,iBAAiB,GAClB,EAAE,yBAAyB,KAAK,GAAG,CAAC,OAAO,CAAC;CAC9C,KAAG,GAAG,CAAC,OA+JP,CAAC"}
@@ -14,7 +14,6 @@ const tableProcessing_1 = require("../../utils/tableProcessing");
14
14
  const Chart_1 = require("../../Chart");
15
15
  const merge_1 = require("../../utils/merge");
16
16
  const fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
17
- const filterProcessing_1 = require("../../utils/filterProcessing");
18
17
  const constructReportFromItem = (item) => {
19
18
  return {
20
19
  ...report_1.EMPTY_INTERNAL_REPORT,
@@ -143,7 +142,7 @@ function DataLoader({ item, children, filters, userFilters, additionalProcessing
143
142
  rowCountAbortController.current?.abort();
144
143
  rowCountAbortController.current = new AbortController();
145
144
  try {
146
- const rowCount = await (0, report_1.fetchReportRowCount)(item.id, client, true, (0, filterProcessing_1.mergeCustomFilters)(filters, userFilters ?? []), processing, schemaData.customFields, rowCountAbortController.current.signal);
145
+ const rowCount = await (0, report_1.fetchReportRowCount)(item.id, client, true, filters.concat(userFilters ?? []), processing, schemaData.customFields, rowCountAbortController.current.signal);
147
146
  rowCountAbortController.current = null;
148
147
  if (rowCount) {
149
148
  if (reportMode) {
@@ -211,7 +210,7 @@ function DataLoader({ item, children, filters, userFilters, additionalProcessing
211
210
  updateTableRowsAbortController.current?.abort();
212
211
  updateTableRowsAbortController.current = new AbortController();
213
212
  const updatedProcessing = { ...additionalProcessing, ...processing };
214
- const paginatedRows = await (0, tableProcessing_1.fetchResultsByReport)(item.id, client, updatedProcessing, (0, filterProcessing_1.mergeCustomFilters)(filters, userFilters ?? []), schemaData.customFields, true, undefined, updateTableRowsAbortController.current.signal);
213
+ const paginatedRows = await (0, tableProcessing_1.fetchResultsByReport)(item.id, client, updatedProcessing, filters.concat(userFilters ?? []), schemaData.customFields, true, undefined, updateTableRowsAbortController.current.signal);
215
214
  updateTableRowsAbortController.current = null;
216
215
  if (paginatedRows.error) {
217
216
  throw new Error('Error fetching chart');
@@ -227,14 +226,22 @@ function DataLoader({ item, children, filters, userFilters, additionalProcessing
227
226
  reportsDispatch({
228
227
  type: 'UPDATE_REPORT',
229
228
  id: item.id,
230
- data: { rows: tempRows, filtersApplied: userFilters },
229
+ data: {
230
+ rows: tempRows,
231
+ loadingRows: false,
232
+ filtersApplied: userFilters,
233
+ },
231
234
  });
232
235
  }
233
236
  else {
234
237
  dispatch({
235
238
  type: 'UPDATE_DASHBOARD_ITEM',
236
239
  id: item.id,
237
- data: { rows: tempRows },
240
+ data: {
241
+ rows: tempRows,
242
+ loadingRows: false,
243
+ filtersApplied: userFilters,
244
+ },
238
245
  });
239
246
  }
240
247
  setAdditionalProcessing(updatedProcessing);
@@ -253,24 +260,24 @@ function DataLoader({ item, children, filters, userFilters, additionalProcessing
253
260
  if (!client || !filters) {
254
261
  return;
255
262
  }
256
- const fetchRowsRequestId = rowsRequestId.current + 1;
257
- rowsRequestId.current = fetchRowsRequestId;
258
263
  const tempReport = (reportMode ? reports : dashboard)[item.id];
259
264
  if (tempReport &&
260
265
  !(0, Chart_1.didFiltersChange)(tempReport, filters) &&
261
266
  userFilterValuesEquivalent(userFilters ?? [], previousUserFilters.current ?? []) &&
262
267
  !tempReport.triggerReload) {
263
- setLoading(false);
264
268
  return;
265
269
  }
266
270
  setLoading(true);
271
+ const fetchRowsRequestId = rowsRequestId.current + 1;
272
+ rowsRequestId.current = fetchRowsRequestId;
267
273
  previousUserFilters.current = userFilters ?? null;
268
274
  rowsAbortController.current?.abort();
269
275
  rowsAbortController.current = new AbortController();
270
276
  try {
271
277
  if (reportMode) {
272
278
  try {
273
- await fetchIndividualReport(item.id, 'Chart', true, filters, userFilters, processing, undefined, rowsAbortController.current || undefined);
279
+ await fetchIndividualReport(item.id, 'Chart', true, filters, userFilters, processing, undefined, rowsAbortController.current);
280
+ rowsAbortController.current = null;
274
281
  setError(undefined);
275
282
  }
276
283
  catch (e) {
@@ -279,14 +286,14 @@ function DataLoader({ item, children, filters, userFilters, additionalProcessing
279
286
  rowsAbortController.current = null;
280
287
  }
281
288
  else {
282
- const { report: fetchedReport, error } = await (0, report_1.fetchReport)(item.id, client, true, (0, filterProcessing_1.mergeCustomFilters)(filters, userFilters ?? []), processing, undefined, schemaData.customFields, true, false, rowsAbortController.current.signal);
289
+ const { report: fetchedReport, error } = await (0, report_1.fetchReport)(item.id, client, true, filters.concat(userFilters ?? []), processing, undefined, schemaData.customFields, true, false, rowsAbortController.current.signal);
283
290
  rowsAbortController.current = null;
284
291
  dispatch({
285
292
  type: 'ADD_DASHBOARD_ITEM',
286
293
  id: item.id,
287
294
  data: { ...fetchedReport, triggerReload: false, rowCount: 0 }, // rowCount 0 indicates it's still loading if row length is nonzero
288
295
  appliedFilters: userFilters,
289
- loading: false,
296
+ loadingRows: false,
290
297
  });
291
298
  setError(error);
292
299
  }
@@ -355,6 +362,7 @@ const ChartDataLoader = ({ item, children, dateBucket, additionalProcessing, fil
355
362
  const previousUserFilters = (0, react_1.useRef)(null);
356
363
  const previousDateBucket = (0, react_1.useRef)(undefined);
357
364
  const fetchReportAbortController = (0, react_1.useRef)(null);
365
+ const rowsRequestId = (0, react_1.useRef)(0);
358
366
  const chartReport = (0, react_1.useMemo)(() => {
359
367
  const report = reportMode ? reports[item.id] : dashboard[item.id];
360
368
  if (!report) {
@@ -376,9 +384,10 @@ const ChartDataLoader = ({ item, children, dateBucket, additionalProcessing, fil
376
384
  userFilterValuesEquivalent(userFilters ?? [], previousUserFilters.current ?? []) &&
377
385
  dateBucket === previousDateBucket.current &&
378
386
  !tempReport.triggerReload) {
379
- setLoading(false);
380
387
  return;
381
388
  }
389
+ const fetchRowsRequestId = rowsRequestId.current + 1;
390
+ rowsRequestId.current = fetchRowsRequestId;
382
391
  previousUserFilters.current = userFilters ?? null;
383
392
  previousDateBucket.current = dateBucket;
384
393
  setLoading(true);
@@ -399,7 +408,7 @@ const ChartDataLoader = ({ item, children, dateBucket, additionalProcessing, fil
399
408
  fetchReportAbortController.current = null;
400
409
  }
401
410
  else {
402
- const { report, error } = await (0, report_1.fetchReport)(item.id, client, useReportTask, (0, filterProcessing_1.mergeCustomFilters)(filters, userFilters ?? []), {
411
+ const { report, error } = await (0, report_1.fetchReport)(item.id, client, useReportTask, filters.concat(userFilters ?? []), {
403
412
  ...additionalProcessing,
404
413
  ...(item.pivot ? {} : { page: paginationProcessing_1.DEFAULT_PAGINATION }),
405
414
  }, dateBucket, schemaData.customFields, undefined, undefined, fetchReportAbortController.current.signal);
@@ -409,7 +418,7 @@ const ChartDataLoader = ({ item, children, dateBucket, additionalProcessing, fil
409
418
  id: item.id,
410
419
  data: { ...report, triggerReload: false },
411
420
  appliedFilters: userFilters,
412
- loading: false,
421
+ loadingRows: false,
413
422
  });
414
423
  setError(error);
415
424
  }
@@ -421,7 +430,9 @@ const ChartDataLoader = ({ item, children, dateBucket, additionalProcessing, fil
421
430
  throw e;
422
431
  }
423
432
  finally {
424
- setLoading(false);
433
+ if (fetchRowsRequestId === rowsRequestId.current) {
434
+ setLoading(false);
435
+ }
425
436
  }
426
437
  };
427
438
  (0, react_1.useEffect)(() => {
@@ -1,9 +1,6 @@
1
- import { QuillReport, QuillReportInternal } from '../models/Report';
1
+ import { QuillReport } from '../models/Report';
2
2
  import { DashboardFilter, InternalFilter } from '../models/Filter';
3
3
  import { DashboardConfig } from '../models/Dashboard';
4
- export declare const useReports: () => {
5
- reloadFilteredReports: (predicate: (report: QuillReportInternal) => boolean) => void;
6
- };
7
4
  export declare const useDashboard: (dashboardName: string | null, customFilters?: InternalFilter[]) => {
8
5
  data: DashboardConfig | null;
9
6
  dashboardFilters: DashboardFilter[] | null;
@@ -1 +1 @@
1
- {"version":3,"file":"useDashboard.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDashboard.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EACL,eAAe,EAEf,cAAc,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,eAAO,MAAM,UAAU;uCAYR,CAAC,MAAM,EAAE,mBAAmB,KAAK,OAAO;CAYtD,CAAC;AAEF,eAAO,MAAM,YAAY,kBACR,MAAM,GAAG,IAAI,kBACZ,cAAc,EAAE;;;;2CA8Gc,MAAM;qCApF1B,MAAM,4CAEf;QACb,MAAM,EAAE,WAAW,GAAG;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QACrC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;KAC7B,oBACiB;QAChB,OAAO,EAAE,eAAe,EAAE,CAAC;QAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B;CA8FJ,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;sDAuBrB;QACD,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,eAAe,EAAE,CAAC;QAC3B,UAAU,CAAC,EAAE,eAAe,CAAC;KAC9B;4BA+CO,MAAM,oDAMT;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,eAAe,EAAE,CAAC;QAC3B,UAAU,CAAC,EAAE,eAAe,CAAC;QAC7B,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;KAClC;4BA2FkC,MAAM;CA8B5C,CAAC"}
1
+ {"version":3,"file":"useDashboard.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDashboard.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EACL,eAAe,EAEf,cAAc,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,eAAO,MAAM,YAAY,kBACR,MAAM,GAAG,IAAI,kBACZ,cAAc,EAAE;;;;2CA8Gc,MAAM;qCApF1B,MAAM,4CAEf;QACb,MAAM,EAAE,WAAW,GAAG;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QACrC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;KAC7B,oBACiB;QAChB,OAAO,EAAE,eAAe,EAAE,CAAC;QAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B;CA8FJ,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;sDAuBrB;QACD,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,eAAe,EAAE,CAAC;QAC3B,UAAU,CAAC,EAAE,eAAe,CAAC;KAC9B;4BA+CO,MAAM,oDAMT;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,eAAe,EAAE,CAAC;QAC3B,UAAU,CAAC,EAAE,eAAe,CAAC;QAC7B,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;KAClC;4BA2FkC,MAAM;CA8B5C,CAAC"}
@@ -1,32 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useDashboards = exports.useDashboard = exports.useReports = void 0;
3
+ exports.useDashboards = exports.useDashboard = void 0;
4
4
  const react_1 = require("react");
5
5
  const Context_1 = require("../Context");
6
6
  const dateRangePickerUtils_1 = require("../DateRangePicker/dateRangePickerUtils");
7
7
  const Filter_1 = require("../models/Filter");
8
8
  const filterProcessing_1 = require("../utils/filterProcessing");
9
- const useReports = () => {
10
- const [dashboard, dispatch] = (0, react_1.useContext)(Context_1.DashboardContext);
11
- const reloadReport = (id) => {
12
- dispatch({
13
- type: 'UPDATE_DASHBOARD_ITEM',
14
- id: id,
15
- data: { triggerReload: true },
16
- });
17
- };
18
- const reloadFilteredReports = (predicate) => {
19
- for (const id in dashboard) {
20
- if (predicate(dashboard[id])) {
21
- reloadReport(id);
22
- }
23
- }
24
- };
25
- return {
26
- reloadFilteredReports,
27
- };
28
- };
29
- exports.useReports = useReports;
30
9
  const useDashboard = (dashboardName, customFilters) => {
31
10
  const { dashboardConfig, isLoading: isDashboardsLoading, loadDashboard, } = (0, react_1.useContext)(Context_1.DashboardConfigContext);
32
11
  const { dashboardFilters, loadFiltersForDashboard } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
@@ -6,15 +6,8 @@ export declare const useExport: (reportId?: string, { CustomDocumentComponent, m
6
6
  }) => {
7
7
  downloadCSV: () => void;
8
8
  downloadPDF: () => void;
9
- isLoading: boolean;
10
- isCSVLoading?: undefined;
11
- isPDFLoading?: undefined;
12
- } | {
13
- downloadCSV: () => Promise<void>;
14
- downloadPDF: () => Promise<void>;
15
- isCSVLoading: boolean;
16
9
  isPDFLoading: boolean;
17
- isLoading?: undefined;
10
+ isCSVLoading: boolean;
18
11
  };
19
12
  interface QuillPDFProps {
20
13
  report: QuillReport;
@@ -1 +1 @@
1
- {"version":3,"file":"useExport.d.ts","sourceRoot":"","sources":["../../../src/hooks/useExport.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAyD/C,eAAO,MAAM,SAAS,cACT,MAAM,mEAMd;IACD,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,GAAG,CAAC,OAAO,CAAC;IAChE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;;;;;;;;;;;;CAoMF,CAAC;AAEF,UAAU,aAAa;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B"}
1
+ {"version":3,"file":"useExport.d.ts","sourceRoot":"","sources":["../../../src/hooks/useExport.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA8D/C,eAAO,MAAM,SAAS,cACT,MAAM,mEAMd;IACD,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,GAAG,CAAC,OAAO,CAAC;IAChE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;;;;;CA2OF,CAAC;AAEF,UAAU,aAAa;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B"}
@@ -46,7 +46,7 @@ async function getExportData(client, dashboardFilters, reportId) {
46
46
  useNewNodeSql: true,
47
47
  };
48
48
  const resp = await (0, dataFetcher_1.getData)(client, 'itempost', 'same-origin', hostedBody, cloudBody);
49
- const cleanedReport = await (0, dashboard_1.cleanDashboardItem)(resp, dashboardFilters);
49
+ const cleanedReport = await (0, dashboard_1.cleanDashboardItem)(resp, dashboardFilters, client);
50
50
  if (cleanedReport.chartType === 'table' && cleanedReport.pivot) {
51
51
  cleanedReport.columns = cleanedReport.yAxisFields;
52
52
  }
@@ -57,6 +57,7 @@ const useExport = (reportId, { CustomDocumentComponent = QuillCustomDocumentComp
57
57
  sectionField, } = {}) => {
58
58
  const { dashboardFilters } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
59
59
  const [dashboard] = (0, react_1.useContext)(Context_1.DashboardContext);
60
+ const { reportFilters } = (0, react_1.useContext)(Context_1.ReportFiltersContext);
60
61
  const specificDashboardFilters = (0, react_1.useMemo)(() => {
61
62
  if (!reportId) {
62
63
  return [];
@@ -65,17 +66,21 @@ sectionField, } = {}) => {
65
66
  if (!dashboardName || !dashboardFilters[dashboardName]) {
66
67
  return [];
67
68
  }
68
- //FIXME: Pretty sure this won't work with multiple dashboards
69
69
  return Object.values(dashboardFilters[dashboardName]).map((dashboardFilter) => {
70
70
  return dashboardFilter.filter;
71
71
  });
72
72
  }, [dashboardFilters, dashboard, reportId]);
73
+ const specificReportFilters = (0, react_1.useMemo)(() => {
74
+ if (!reportId)
75
+ return [];
76
+ return Object.values(reportFilters[reportId] ?? []).map((f) => f.filter);
77
+ }, [reportFilters, reportId]);
73
78
  // const [theme] = useContext(ThemeContext);
74
79
  const [client] = (0, react_1.useContext)(Context_1.ClientContext);
75
80
  const [isCSVLoading, setIsCSVLoading] = (0, react_1.useState)(false);
76
81
  const [isPDFLoading, setIsPDFLoading] = (0, react_1.useState)(false);
77
82
  if (!reportId || !client) {
78
- return { downloadCSV: () => { }, downloadPDF: () => { }, isLoading: false };
83
+ return { downloadCSV: () => { }, downloadPDF: () => { }, isPDFLoading: false, isCSVLoading: false };
79
84
  }
80
85
  return {
81
86
  downloadCSV: async () => {
@@ -83,7 +88,9 @@ sectionField, } = {}) => {
83
88
  return;
84
89
  }
85
90
  setIsCSVLoading(true);
86
- const resp = await getExportData(client, specificDashboardFilters, reportId);
91
+ const resp = await getExportData(client, specificReportFilters.length > 0
92
+ ? specificReportFilters
93
+ : specificDashboardFilters, reportId);
87
94
  (0, csv_1.downloadCSV)({
88
95
  rows: resp.pivot && resp.pivotRows ? resp.pivotRows : resp.rows,
89
96
  fields: resp.pivot && resp.pivotColumns ? resp.pivotColumns : resp.columns,
@@ -93,21 +100,14 @@ sectionField, } = {}) => {
93
100
  },
94
101
  downloadPDF: async () => {
95
102
  setIsPDFLoading(true);
96
- // @ts-ignore
97
- let report;
98
- if (reportId &&
99
- dashboard[reportId] &&
100
- dashboardFilters &&
101
- // @ts-ignore
102
- dashboardFilters[dashboard[reportId].dashboardName]) {
103
- const { report: fetchedReport } = await (0, report_1.fetchReport)(reportId, client, true, Object.values(
104
- // @ts-ignore
105
- dashboardFilters[dashboard[reportId].dashboardName]).map((elem) => elem.filter));
106
- report = fetchedReport;
107
- }
108
- else {
109
- const { report: fetchedReport } = await (0, report_1.fetchReport)(reportId, client, true, []);
110
- report = fetchedReport;
103
+ const filters = specificReportFilters.length > 0
104
+ ? specificReportFilters
105
+ : specificDashboardFilters;
106
+ const { report: fetchedReport } = await (0, report_1.fetchReport)(reportId, client, true, filters);
107
+ const report = fetchedReport;
108
+ if (report.pivot && report.pivotRows && report.pivotColumns) {
109
+ report.rows = report.pivotRows;
110
+ report.columns = report.pivotColumns;
111
111
  }
112
112
  let groupedRows = {};
113
113
  if (sectionField) {
@@ -128,65 +128,98 @@ sectionField, } = {}) => {
128
128
  let currentPage = {};
129
129
  let currentCount = 0;
130
130
  let pageNumber = 1;
131
- // Iterate over each group of rows
132
- for (const groupKey in groupedRows) {
133
- // @ts-ignore
134
- const rows = groupedRows[groupKey];
135
- let groupIndex = 0;
136
- while (groupIndex < rows.length) {
137
- const remainingRows = rows.length - groupIndex;
131
+ if (sectionField) {
132
+ // Iterate over each group of rows
133
+ for (const groupKey in groupedRows) {
134
+ // @ts-ignore
135
+ const rows = groupedRows[groupKey];
136
+ let groupIndex = 0;
137
+ while (groupIndex < rows.length) {
138
+ const remainingRows = rows.length - groupIndex;
139
+ const availableSpace = maximumRowsPerPage - currentCount;
140
+ const rowsToAdd = Math.min(remainingRows, availableSpace);
141
+ // @ts-ignore
142
+ currentPage[groupKey] = (currentPage[groupKey] || []).concat(rows.slice(groupIndex, groupIndex + rowsToAdd));
143
+ currentCount += rowsToAdd;
144
+ groupIndex += rowsToAdd;
145
+ if (currentCount === maximumRowsPerPage) {
146
+ if (Object.keys(currentPage).length > 0) {
147
+ pageNumber++;
148
+ const div = document.createElement('div');
149
+ const root = (0, client_1.createRoot)(div);
150
+ (0, react_dom_1.flushSync)(() => {
151
+ root.render((0, jsx_runtime_1.jsx)(CustomDocumentComponent, { report: {
152
+ // @ts-ignore
153
+ ...report,
154
+ // @ts-ignore
155
+ sections: currentPage,
156
+ filters,
157
+ }, pageNumber: pageNumber, numberOfPages: numberOfPages, maximumRowsPerPage: maximumRowsPerPage }));
158
+ });
159
+ // const divContentBuffer = Buffer.from(div.innerHTML, 'utf-8');
160
+ // htmlBuffer = Buffer.concat([htmlBuffer, divContentBuffer]);
161
+ html += div.innerHTML;
162
+ currentPage = {};
163
+ currentCount = 0;
164
+ }
165
+ }
166
+ }
167
+ }
168
+ // Add the last page if it has remaining rows
169
+ if (Object.keys(currentPage).length > 0) {
170
+ pageNumber++;
171
+ const div = document.createElement('div');
172
+ const root = (0, client_1.createRoot)(div);
173
+ (0, react_dom_1.flushSync)(() => {
174
+ root.render((0, jsx_runtime_1.jsx)(CustomDocumentComponent, { report: {
175
+ // @ts-ignore
176
+ ...report,
177
+ // @ts-ignore
178
+ sections: currentPage,
179
+ filters,
180
+ }, pageNumber: pageNumber, numberOfPages: numberOfPages, maximumRowsPerPage: maximumRowsPerPage }));
181
+ });
182
+ // const divContentBuffer = Buffer.from(div.innerHTML, 'utf-8');
183
+ // htmlBuffer = Buffer.concat([htmlBuffer, divContentBuffer]);
184
+ html += div.innerHTML;
185
+ currentPage = {};
186
+ currentCount = 0;
187
+ }
188
+ }
189
+ else {
190
+ const rows = report.rows;
191
+ for (let i = 0; i < rows.length; i += maximumRowsPerPage) {
192
+ const remainingRows = rows.length - i * maximumRowsPerPage;
138
193
  const availableSpace = maximumRowsPerPage - currentCount;
139
194
  const rowsToAdd = Math.min(remainingRows, availableSpace);
140
- // @ts-ignore
141
- currentPage[groupKey] = (currentPage[groupKey] || []).concat(rows.slice(groupIndex, groupIndex + rowsToAdd));
142
195
  currentCount += rowsToAdd;
143
- groupIndex += rowsToAdd;
144
196
  if (currentCount === maximumRowsPerPage) {
145
- if (Object.keys(currentPage).length > 0) {
146
- pageNumber++;
147
- const div = document.createElement('div');
148
- const root = (0, client_1.createRoot)(div);
149
- (0, react_dom_1.flushSync)(() => {
150
- root.render((0, jsx_runtime_1.jsx)(CustomDocumentComponent, { report: {
151
- // @ts-ignore
152
- ...report,
153
- // @ts-ignore
154
- sections: currentPage,
155
- filters: Object.values(
156
- // @ts-ignore
157
- dashboardFilters[report.dashboardName]).map((elem) => elem.filter),
158
- }, pageNumber: pageNumber, numberOfPages: numberOfPages, maximumRowsPerPage: maximumRowsPerPage }));
159
- });
160
- // const divContentBuffer = Buffer.from(div.innerHTML, 'utf-8');
161
- // htmlBuffer = Buffer.concat([htmlBuffer, divContentBuffer]);
162
- html += div.innerHTML;
163
- currentPage = {};
164
- currentCount = 0;
165
- }
197
+ pageNumber++;
198
+ const div = document.createElement('div');
199
+ const root = (0, client_1.createRoot)(div);
200
+ (0, react_dom_1.flushSync)(() => {
201
+ root.render((0, jsx_runtime_1.jsx)(CustomDocumentComponent, { report: report, pageNumber: pageNumber, numberOfPages: numberOfPages, maximumRowsPerPage: maximumRowsPerPage }));
202
+ });
203
+ // const divContentBuffer = Buffer.from(div.innerHTML, 'utf-8');
204
+ // htmlBuffer = Buffer.concat([htmlBuffer, divContentBuffer]);
205
+ html += div.innerHTML;
206
+ currentCount = 0;
166
207
  }
167
208
  }
168
- }
169
- // Add the last page if it has remaining rows
170
- if (Object.keys(currentPage).length > 0) {
171
- pageNumber++;
172
- const div = document.createElement('div');
173
- const root = (0, client_1.createRoot)(div);
174
- (0, react_dom_1.flushSync)(() => {
175
- root.render((0, jsx_runtime_1.jsx)(CustomDocumentComponent, { report: {
176
- // @ts-ignore
177
- ...report,
178
- // @ts-ignore
179
- sections: currentPage,
180
- filters: Object.values(
181
- // @ts-ignore
182
- dashboardFilters[report.dashboardName]).map((elem) => elem.filter),
183
- }, pageNumber: pageNumber, numberOfPages: numberOfPages, maximumRowsPerPage: maximumRowsPerPage }));
184
- });
185
- // const divContentBuffer = Buffer.from(div.innerHTML, 'utf-8');
186
- // htmlBuffer = Buffer.concat([htmlBuffer, divContentBuffer]);
187
- html += div.innerHTML;
188
- currentPage = {};
189
- currentCount = 0;
209
+ // Add the last page if it has remaining rows
210
+ if (currentCount < maximumRowsPerPage) {
211
+ pageNumber++;
212
+ const div = document.createElement('div');
213
+ const root = (0, client_1.createRoot)(div);
214
+ (0, react_dom_1.flushSync)(() => {
215
+ root.render((0, jsx_runtime_1.jsx)(CustomDocumentComponent, { report: report, pageNumber: pageNumber, numberOfPages: numberOfPages, maximumRowsPerPage: maximumRowsPerPage }));
216
+ });
217
+ // const divContentBuffer = Buffer.from(div.innerHTML, 'utf-8');
218
+ // htmlBuffer = Buffer.concat([htmlBuffer, divContentBuffer]);
219
+ html += div.innerHTML;
220
+ currentPage = {};
221
+ currentCount = 0;
222
+ }
190
223
  }
191
224
  const doc = new jspdf_1.default('landscape', 'pt', 'a4');
192
225
  // const htmlStringFromBuffer = htmlBuffer.toString('utf-8');
@@ -1 +1 @@
1
- {"version":3,"file":"useQuill.d.ts","sourceRoot":"","sources":["../../../src/hooks/useQuill.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,WAAW,EAIZ,MAAM,yBAAyB,CAAC;AAIjC,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,cACR,MAAM,eACJ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,KAC3D;IACD,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,SAAS,EACL,CAAC,CAAC,QAAQ,EAAE,WAAW,KAAK,MAAM,GAAG,SAAS,CAAC,GAC/C,CAAC,MAAM,SAAS,CAAC,CAAC;CA4MvB,CAAC"}
1
+ {"version":3,"file":"useQuill.d.ts","sourceRoot":"","sources":["../../../src/hooks/useQuill.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,WAAW,EAIZ,MAAM,yBAAyB,CAAC;AAIjC,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,cACR,MAAM,eACJ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,KAC3D;IACD,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,SAAS,EACL,CAAC,CAAC,QAAQ,EAAE,WAAW,KAAK,MAAM,GAAG,SAAS,CAAC,GAC/C,CAAC,MAAM,SAAS,CAAC,CAAC;CAiNvB,CAAC"}