@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.
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +208 -40
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +15 -10
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +58 -13
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +12 -22
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.js +19 -1
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +26 -15
- package/dist/cjs/hooks/useDashboard.d.ts +1 -4
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +1 -22
- package/dist/cjs/hooks/useExport.d.ts +1 -8
- package/dist/cjs/hooks/useExport.d.ts.map +1 -1
- package/dist/cjs/hooks/useExport.js +105 -72
- package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useQuill.js +23 -21
- package/dist/cjs/hooks/useReport.d.ts +12 -0
- package/dist/cjs/hooks/useReport.d.ts.map +1 -0
- package/dist/cjs/hooks/useReport.js +56 -0
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -2
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +1 -0
- package/dist/cjs/utils/dataProcessing.js +2 -2
- package/dist/cjs/utils/filterProcessing.d.ts +2 -1
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/filterProcessing.js +168 -22
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +47 -10
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +3 -2
- package/dist/cjs/utils/report.d.ts +1 -1
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/report.js +4 -2
- package/dist/cjs/utils/valueFormatter.d.ts +5 -1
- package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
- package/dist/cjs/utils/valueFormatter.js +32 -12
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +211 -43
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +15 -10
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +61 -16
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +15 -25
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardFilter.js +20 -2
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +26 -15
- package/dist/esm/hooks/useDashboard.d.ts +1 -4
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +1 -21
- package/dist/esm/hooks/useExport.d.ts +1 -8
- package/dist/esm/hooks/useExport.d.ts.map +1 -1
- package/dist/esm/hooks/useExport.js +106 -73
- package/dist/esm/hooks/useQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useQuill.js +23 -21
- package/dist/esm/hooks/useReport.d.ts +12 -0
- package/dist/esm/hooks/useReport.d.ts.map +1 -0
- package/dist/esm/hooks/useReport.js +51 -0
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +1 -0
- package/dist/esm/utils/dataProcessing.js +2 -2
- package/dist/esm/utils/filterProcessing.d.ts +2 -1
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/filterProcessing.js +168 -23
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +47 -10
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +3 -2
- package/dist/esm/utils/report.d.ts +1 -1
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/report.js +4 -2
- package/dist/esm/utils/valueFormatter.d.ts +5 -1
- package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
- package/dist/esm/utils/valueFormatter.js +33 -13
- 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
|
|
40
|
-
(0, react_1.useEffect)(() => {
|
|
31
|
+
const formattedData = (0, react_1.useMemo)(() => {
|
|
41
32
|
if (!data || data.length === 0) {
|
|
42
|
-
|
|
43
|
-
return;
|
|
33
|
+
return createLineForEmptyChart(yAxisFields, dateFilter, xAxisField, xAxisFormat);
|
|
44
34
|
}
|
|
45
35
|
const newData = [...data];
|
|
46
|
-
if (newData.length === 1) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
|
|
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,
|
|
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:
|
|
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;
|
|
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,
|
|
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,
|
|
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: {
|
|
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: {
|
|
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
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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":"
|
|
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 =
|
|
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
|
-
|
|
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":"
|
|
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: () => { },
|
|
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,
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
(0,
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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;
|
|
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"}
|