@quillsql/react 2.12.30 → 2.12.32
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 +6 -37
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +86 -327
- package/dist/cjs/ChartBuilder.d.ts +12 -49
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +68 -36
- package/dist/cjs/ChartEditor.d.ts +1 -1
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +11 -7
- package/dist/cjs/Context.d.ts +4 -1
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +10 -4
- package/dist/cjs/Dashboard.d.ts +61 -114
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +261 -30
- package/dist/cjs/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/DateRangePicker.js +0 -26
- package/dist/cjs/ReportBuilder.d.ts +1 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +62 -97
- package/dist/cjs/SQLEditor.d.ts +2 -2
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +10 -5
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +41 -43
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +12 -1
- package/dist/cjs/components/Chart/LineChart.d.ts +2 -1
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +25 -1
- package/dist/cjs/components/Dashboard/DataLoader.d.ts +7 -7
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +64 -28
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +11 -45
- package/dist/cjs/components/Dashboard/TableComponent.d.ts +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +1 -30
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +16 -1
- package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelectWithCombo.js +4 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +10 -2
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.js +94 -70
- package/dist/cjs/components/ReportBuilder/convert.d.ts +7 -2
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +53 -1
- package/dist/cjs/components/ReportBuilder/ui.d.ts +6 -6
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +6 -22
- package/dist/cjs/components/UiComponents.d.ts +26 -1
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +97 -4
- package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useQuill.js +19 -3
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +1 -0
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/models/Columns.d.ts +2 -1
- package/dist/cjs/models/Columns.d.ts.map +1 -1
- package/dist/cjs/models/Filter.d.ts +15 -4
- package/dist/cjs/models/Filter.d.ts.map +1 -1
- package/dist/cjs/models/Filter.js +9 -1
- package/dist/cjs/models/Report.d.ts +10 -23
- package/dist/cjs/models/Report.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.js +37 -2
- package/dist/cjs/utils/columnProcessing.d.ts +2 -0
- package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/columnProcessing.js +54 -1
- package/dist/cjs/utils/dashboard.d.ts +1 -1
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +3 -56
- package/dist/cjs/utils/dataProcessing.d.ts +4 -2
- package/dist/cjs/utils/dataProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/dataProcessing.js +18 -1
- package/dist/cjs/utils/dates.d.ts +2 -1
- package/dist/cjs/utils/dates.d.ts.map +1 -1
- package/dist/cjs/utils/dates.js +23 -1
- package/dist/cjs/utils/filterProcessing.d.ts +7 -1
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/filterProcessing.js +100 -13
- package/dist/cjs/utils/pivotConstructor.d.ts +2 -1
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +7 -1
- package/dist/cjs/utils/report.d.ts +4 -1
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/report.js +94 -7
- package/dist/cjs/utils/tableProcessing.d.ts +1 -1
- package/dist/esm/Chart.d.ts +6 -37
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +87 -329
- package/dist/esm/ChartBuilder.d.ts +12 -49
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +68 -33
- package/dist/esm/ChartEditor.d.ts +1 -1
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +11 -7
- package/dist/esm/Context.d.ts +4 -1
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +9 -3
- package/dist/esm/Dashboard.d.ts +61 -114
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +263 -32
- package/dist/esm/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/DateRangePicker.js +0 -26
- package/dist/esm/ReportBuilder.d.ts +1 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +64 -99
- package/dist/esm/SQLEditor.d.ts +2 -2
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +11 -6
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +42 -44
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.js +13 -2
- package/dist/esm/components/Chart/LineChart.d.ts +2 -1
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +26 -2
- package/dist/esm/components/Dashboard/DataLoader.d.ts +7 -7
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +65 -29
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +11 -45
- package/dist/esm/components/Dashboard/TableComponent.d.ts +1 -1
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +1 -30
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +16 -1
- package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillSelectWithCombo.js +5 -2
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts +10 -2
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/FilterModal.js +94 -70
- package/dist/esm/components/ReportBuilder/convert.d.ts +7 -2
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +51 -0
- package/dist/esm/components/ReportBuilder/ui.d.ts +6 -6
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +6 -22
- package/dist/esm/components/UiComponents.d.ts +26 -1
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +95 -3
- package/dist/esm/hooks/useQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useQuill.js +19 -3
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +1 -0
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/models/Columns.d.ts +2 -1
- package/dist/esm/models/Columns.d.ts.map +1 -1
- package/dist/esm/models/Filter.d.ts +15 -4
- package/dist/esm/models/Filter.d.ts.map +1 -1
- package/dist/esm/models/Filter.js +8 -0
- package/dist/esm/models/Report.d.ts +10 -23
- package/dist/esm/models/Report.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.js +38 -3
- package/dist/esm/utils/columnProcessing.d.ts +2 -0
- package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
- package/dist/esm/utils/columnProcessing.js +52 -0
- package/dist/esm/utils/dashboard.d.ts +1 -1
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +3 -56
- package/dist/esm/utils/dataProcessing.d.ts +4 -2
- package/dist/esm/utils/dataProcessing.d.ts.map +1 -1
- package/dist/esm/utils/dataProcessing.js +16 -0
- package/dist/esm/utils/dates.d.ts +2 -1
- package/dist/esm/utils/dates.d.ts.map +1 -1
- package/dist/esm/utils/dates.js +21 -0
- package/dist/esm/utils/filterProcessing.d.ts +7 -1
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/filterProcessing.js +97 -12
- package/dist/esm/utils/pivotConstructor.d.ts +2 -1
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +7 -1
- package/dist/esm/utils/report.d.ts +4 -1
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/report.js +92 -6
- package/dist/esm/utils/tableProcessing.d.ts +1 -1
- package/package.json +1 -1
- package/dist/esm/components/ReportBuilder/convert.uspec.d.ts +0 -2
- package/dist/esm/components/ReportBuilder/convert.uspec.d.ts.map +0 -1
- package/dist/esm/components/ReportBuilder/convert.uspec.js +0 -1152
- package/dist/esm/utils/astFilterProcessing.uspec.d.ts +0 -2
- package/dist/esm/utils/astFilterProcessing.uspec.d.ts.map +0 -1
- package/dist/esm/utils/astFilterProcessing.uspec.js +0 -2729
- package/dist/esm/utils/dataProcessing.uspec.d.ts +0 -2
- package/dist/esm/utils/dataProcessing.uspec.d.ts.map +0 -1
- package/dist/esm/utils/dataProcessing.uspec.js +0 -204
- package/dist/esm/utils/queryConstructor.uspec.d.ts +0 -2
- package/dist/esm/utils/queryConstructor.uspec.d.ts.map +0 -1
- package/dist/esm/utils/queryConstructor.uspec.js +0 -223
- package/dist/esm/utils/report.ispec.d.ts +0 -2
- package/dist/esm/utils/report.ispec.d.ts.map +0 -1
- package/dist/esm/utils/report.ispec.js +0 -46
- package/dist/esm/utils/tableProcessing.ispec.d.ts +0 -2
- package/dist/esm/utils/tableProcessing.ispec.d.ts.map +0 -1
- package/dist/esm/utils/tableProcessing.ispec.js +0 -61
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.processColumnName = exports.convertFormatToJsType = exports.convertFieldTypeToJSType = exports.convertColumnInfoToColumnInternal = exports.convertPostgresColumn = void 0;
|
|
3
|
+
exports.getYAxisFields = exports.processColumnName = exports.convertFormatToJsType = exports.convertFieldTypeToJSType = exports.convertColumnInfoToColumnInternal = exports.convertPostgresColumn = void 0;
|
|
4
|
+
const filterProcessing_1 = require("./filterProcessing");
|
|
4
5
|
function removeBigQuerySpecialChars(columnName) {
|
|
5
6
|
return columnName.replaceAll('quill_forward_slash', '/');
|
|
6
7
|
}
|
|
@@ -214,3 +215,55 @@ function processColumnName(columnName) {
|
|
|
214
215
|
return removeBigQuerySpecialChars(columnName);
|
|
215
216
|
}
|
|
216
217
|
exports.processColumnName = processColumnName;
|
|
218
|
+
const getYAxisFields = (report) => {
|
|
219
|
+
try {
|
|
220
|
+
const curDateFilter = (0, filterProcessing_1.findAndProcessDateFilter)(Object.values(report.filtersApplied));
|
|
221
|
+
if (report.pivot && report.pivotColumns && report.pivot.columnField) {
|
|
222
|
+
return (report.pivotColumns
|
|
223
|
+
.slice(1)
|
|
224
|
+
.map((column) => {
|
|
225
|
+
// @ts-ignore
|
|
226
|
+
return { ...column, format: report.yAxisFields[0].format };
|
|
227
|
+
}) ?? []);
|
|
228
|
+
}
|
|
229
|
+
else if (report.pivot && report.pivotColumns) {
|
|
230
|
+
return (report.pivotColumns
|
|
231
|
+
.slice(1)
|
|
232
|
+
.map((column) => {
|
|
233
|
+
return {
|
|
234
|
+
...column,
|
|
235
|
+
// @ts-ignore
|
|
236
|
+
label: report?.yAxisFields[0].label,
|
|
237
|
+
// @ts-ignore
|
|
238
|
+
format: report?.yAxisFields[0].format,
|
|
239
|
+
};
|
|
240
|
+
}) ?? []);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
if (curDateFilter?.comparison &&
|
|
244
|
+
curDateFilter.comparisonRange.value !== 'NO_COMPARISON') {
|
|
245
|
+
const comparisonYAxisFields = report.yAxisFields?.map((field) => {
|
|
246
|
+
return {
|
|
247
|
+
...field,
|
|
248
|
+
field: `comparison_${field.field}`,
|
|
249
|
+
label: `comparison ${field.label ?? field.field}`,
|
|
250
|
+
};
|
|
251
|
+
});
|
|
252
|
+
if (report.pivotColumns) {
|
|
253
|
+
return report.pivotColumns;
|
|
254
|
+
}
|
|
255
|
+
else if (comparisonYAxisFields || report.yAxisFields) {
|
|
256
|
+
const yAxisFields = report.yAxisFields ?? [];
|
|
257
|
+
const compYAxisFields = comparisonYAxisFields ?? [];
|
|
258
|
+
return [...yAxisFields, ...compYAxisFields];
|
|
259
|
+
}
|
|
260
|
+
return [];
|
|
261
|
+
}
|
|
262
|
+
return report.pivotColumns ?? report.yAxisFields ?? [];
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch (e) {
|
|
266
|
+
return report.yAxisFields;
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
exports.getYAxisFields = getYAxisFields;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { QuillReportInternal } from '../
|
|
1
|
+
import { QuillReportInternal } from '../models/Report';
|
|
2
2
|
/**
|
|
3
3
|
* Returns a cleaned version of the dashboard item we store in state. We clean
|
|
4
4
|
* the dashboard item so that we aren't exposing unnecessary details to the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AA+BpE;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,CAAC,EAAE,GAAG,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAyC9B;AAgHD,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,GAAG,GACV,OAAO,CAAC,GAAG,CAAC,CA2Bd"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getDashboard = exports.cleanDashboardItem = void 0;
|
|
4
|
-
const valueFormatter_1 = require("./valueFormatter");
|
|
5
4
|
const PivotModal_1 = require("../internals/ReportBuilder/PivotModal");
|
|
6
5
|
const textProcessing_1 = require("./textProcessing");
|
|
7
6
|
const dataFetcher_1 = require("./dataFetcher");
|
|
@@ -17,15 +16,14 @@ const defaultDashboardItem = {
|
|
|
17
16
|
chartType: '',
|
|
18
17
|
dateField: null,
|
|
19
18
|
pivot: null,
|
|
20
|
-
primaryAggregation: '',
|
|
21
|
-
comparisonAggregation: '',
|
|
22
|
-
aggregationPercentChange: undefined,
|
|
23
19
|
yAxisFields: [],
|
|
24
20
|
xAxisLabel: '',
|
|
25
21
|
xAxisField: '',
|
|
26
22
|
xAxisFormat: 'string',
|
|
27
23
|
order: -1,
|
|
28
24
|
filtersApplied: {},
|
|
25
|
+
queryString: '',
|
|
26
|
+
rowCount: 0,
|
|
29
27
|
};
|
|
30
28
|
/**
|
|
31
29
|
* Returns a cleaned version of the dashboard item we store in state. We clean
|
|
@@ -44,7 +42,6 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket) {
|
|
|
44
42
|
name: item.name,
|
|
45
43
|
};
|
|
46
44
|
const pivotTable = await getPivotTable(item, dashboardFilters, client, dateBucket);
|
|
47
|
-
const { primaryAggregation, comparisonAggregation, aggregationPercentChange, } = getAggragations(pivotTable, item);
|
|
48
45
|
return {
|
|
49
46
|
id: item._id,
|
|
50
47
|
name: item.name,
|
|
@@ -59,9 +56,6 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket) {
|
|
|
59
56
|
chartType: item.chartType,
|
|
60
57
|
dateField: item.dateField,
|
|
61
58
|
pivot: item.pivot,
|
|
62
|
-
primaryAggregation,
|
|
63
|
-
comparisonAggregation,
|
|
64
|
-
aggregationPercentChange,
|
|
65
59
|
yAxisFields: pivotTable
|
|
66
60
|
? extractPivotedYAxis(pivotTable, item)
|
|
67
61
|
: item.yAxisFields,
|
|
@@ -73,43 +67,10 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket) {
|
|
|
73
67
|
rowCount: parseInt(item.rowCount),
|
|
74
68
|
sort: item.sort,
|
|
75
69
|
itemQuery: item.itemQuery,
|
|
70
|
+
queryString: item.queryString,
|
|
76
71
|
};
|
|
77
72
|
}
|
|
78
73
|
exports.cleanDashboardItem = cleanDashboardItem;
|
|
79
|
-
/**
|
|
80
|
-
* Extracts the aggregations from the item, if any.
|
|
81
|
-
*/
|
|
82
|
-
function getAggragations(pivotTable, item) {
|
|
83
|
-
const yAxisFields = extractPivotedYAxis(pivotTable, item);
|
|
84
|
-
const rows = extractPivotedData(pivotTable, item);
|
|
85
|
-
// extract the aggragation for the primary range.
|
|
86
|
-
const mainKey = yAxisFields[0]?.field ?? item.pivot?.valueField;
|
|
87
|
-
const primary = mainKey
|
|
88
|
-
? rows.reduce((sum, row) => sum + parseFloat(row[mainKey]), 0)
|
|
89
|
-
: 0;
|
|
90
|
-
// extract the aggragation for the comparison range, if applicable.
|
|
91
|
-
const compKey = yAxisFields[1]?.field ?? item.pivot?.valueField;
|
|
92
|
-
const comparison = compKey
|
|
93
|
-
? rows.reduce((sum, row) => sum + parseFloat(row[compKey]), 0)
|
|
94
|
-
: 0;
|
|
95
|
-
return {
|
|
96
|
-
primaryAggregation: formatAggragation(item, primary),
|
|
97
|
-
comparisonAggregation: formatAggragation(item, comparison),
|
|
98
|
-
aggregationPercentChange: Number(primary - comparison),
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Applies a valueFormatter to the given value based on the format in the item.
|
|
103
|
-
*/
|
|
104
|
-
function formatAggragation(item, value) {
|
|
105
|
-
if (!value)
|
|
106
|
-
return undefined;
|
|
107
|
-
return (0, valueFormatter_1.valueFormatter)({
|
|
108
|
-
value,
|
|
109
|
-
field: item.pivot?.valueField,
|
|
110
|
-
fields: item.yAxisFields,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
74
|
/**
|
|
114
75
|
* Extract and transform the data from itemInfo.
|
|
115
76
|
*/
|
|
@@ -165,20 +126,6 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
|
|
|
165
126
|
: undefined)
|
|
166
127
|
: undefined;
|
|
167
128
|
}
|
|
168
|
-
/**
|
|
169
|
-
* Returns the data list based on whether the table is pivoted and if there is
|
|
170
|
-
* a config value passed into this component.
|
|
171
|
-
*/
|
|
172
|
-
function extractPivotedData(pivotTable, item, config = undefined) {
|
|
173
|
-
if (pivotTable)
|
|
174
|
-
return pivotTable.rows;
|
|
175
|
-
if (config) {
|
|
176
|
-
if (config.bucketedRows.length > 0)
|
|
177
|
-
return config.bucketedRows;
|
|
178
|
-
return config.rows;
|
|
179
|
-
}
|
|
180
|
-
return item.rows;
|
|
181
|
-
}
|
|
182
129
|
/**
|
|
183
130
|
* Extracts the yAxis from the pivot table, if one exists.
|
|
184
131
|
*/
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { QuillReportInternal } from '../
|
|
1
|
+
import { QuillReportInternal } from '../models/Report';
|
|
2
2
|
export declare enum Calculation {
|
|
3
3
|
PointToPointPercentageChange = "POINT_TO_POINT_PERCENTAGE_CHANGE",
|
|
4
|
-
SimplePercentageChange = "SIMPLE_PERCENTAGE_CHANGE"
|
|
4
|
+
SimplePercentageChange = "SIMPLE_PERCENTAGE_CHANGE",
|
|
5
|
+
Sum = "SUM"
|
|
5
6
|
}
|
|
6
7
|
export declare const getSimplePercentageChange: (data: QuillReportInternal) => number | undefined;
|
|
7
8
|
export declare const getPointToPointPercentageChange: (data: QuillReportInternal) => number | undefined;
|
|
9
|
+
export declare const getSumOfFields: (data: QuillReportInternal) => number;
|
|
8
10
|
//# sourceMappingURL=dataProcessing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/dataProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"dataProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/dataProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAIvD,oBAAY,WAAW;IACrB,4BAA4B,qCAAqC;IACjE,sBAAsB,6BAA6B;IACnD,GAAG,QAAQ;CACZ;AAyBD,eAAO,MAAM,yBAAyB,SAAU,mBAAmB,uBAsClE,CAAC;AAEF,eAAO,MAAM,+BAA+B,SAAU,mBAAmB,uBAkFxE,CAAC;AAEF,eAAO,MAAM,cAAc,SAAU,mBAAmB,WAavD,CAAC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getPointToPointPercentageChange = exports.getSimplePercentageChange = exports.Calculation = void 0;
|
|
3
|
+
exports.getSumOfFields = exports.getPointToPointPercentageChange = exports.getSimplePercentageChange = exports.Calculation = void 0;
|
|
4
4
|
const PivotModal_1 = require("../internals/ReportBuilder/PivotModal");
|
|
5
5
|
const dates_1 = require("./dates");
|
|
6
6
|
var Calculation;
|
|
7
7
|
(function (Calculation) {
|
|
8
8
|
Calculation["PointToPointPercentageChange"] = "POINT_TO_POINT_PERCENTAGE_CHANGE";
|
|
9
9
|
Calculation["SimplePercentageChange"] = "SIMPLE_PERCENTAGE_CHANGE";
|
|
10
|
+
Calculation["Sum"] = "SUM";
|
|
10
11
|
})(Calculation || (exports.Calculation = Calculation = {}));
|
|
11
12
|
const getSumOfField = (rows, field) => {
|
|
12
13
|
if (rows[0] && rows[0][field]) {
|
|
@@ -125,3 +126,19 @@ const getPointToPointPercentageChange = (data) => {
|
|
|
125
126
|
}
|
|
126
127
|
};
|
|
127
128
|
exports.getPointToPointPercentageChange = getPointToPointPercentageChange;
|
|
129
|
+
const getSumOfFields = (data) => {
|
|
130
|
+
if (data.pivot && data.pivotRows && data.pivotColumns) {
|
|
131
|
+
const pivotRows = data.pivotRows;
|
|
132
|
+
const fields = data.pivotColumns.map((field) => {
|
|
133
|
+
return field.field;
|
|
134
|
+
});
|
|
135
|
+
return getSumOfFieldsAndRows(pivotRows, fields);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
const yAxisFields = data.yAxisFields.map((field) => {
|
|
139
|
+
return field.field;
|
|
140
|
+
});
|
|
141
|
+
return getSumOfFieldsAndRows(data.rows, yAxisFields);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
exports.getSumOfFields = getSumOfFields;
|
|
@@ -14,6 +14,7 @@ export declare function getComparisonInterval(comparisonRange: {
|
|
|
14
14
|
export declare function getDateBucketFromRange(dateRange: {
|
|
15
15
|
start: Date;
|
|
16
16
|
end: Date;
|
|
17
|
-
}): "
|
|
17
|
+
}): "year" | "month" | "week" | "day";
|
|
18
18
|
export declare function parseDateByDatabaseType(date: any, databaseType: string): Date;
|
|
19
|
+
export declare function getDateFormatFromBucket(dateBucket: string): string;
|
|
19
20
|
//# sourceMappingURL=dates.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../../src/utils/dates.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,UAYxB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,WAa/C;AAED,wBAAgB,qBAAqB,CACnC,eAAe,EAAE;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;CACf,EACD,UAAU,CAAC,EAAE,MAAM,sBAepB;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,qCAW3E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,QAMtE"}
|
|
1
|
+
{"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../../src/utils/dates.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,UAYxB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,WAa/C;AAED,wBAAgB,qBAAqB,CACnC,eAAe,EAAE;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;CACf,EACD,UAAU,CAAC,EAAE,MAAM,sBAepB;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,qCAW3E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,QAMtE;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,UAoBzD"}
|
package/dist/cjs/utils/dates.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseDateByDatabaseType = exports.getDateBucketFromRange = exports.getComparisonInterval = exports.isDateFormat = exports.convertComparisonRange = void 0;
|
|
3
|
+
exports.getDateFormatFromBucket = exports.parseDateByDatabaseType = exports.getDateBucketFromRange = exports.getComparisonInterval = exports.isDateFormat = exports.convertComparisonRange = void 0;
|
|
4
4
|
const date_fns_1 = require("date-fns");
|
|
5
5
|
const dateRangePickerUtils_1 = require("../DateRangePicker/dateRangePickerUtils");
|
|
6
6
|
/**
|
|
@@ -80,3 +80,25 @@ function parseDateByDatabaseType(date, databaseType) {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
exports.parseDateByDatabaseType = parseDateByDatabaseType;
|
|
83
|
+
function getDateFormatFromBucket(dateBucket) {
|
|
84
|
+
let format = 'MMM_yyyy';
|
|
85
|
+
switch (dateBucket) {
|
|
86
|
+
case 'day':
|
|
87
|
+
format = 'MMM_dd';
|
|
88
|
+
break;
|
|
89
|
+
case 'week':
|
|
90
|
+
format = 'MMM_dd-MMM_dd';
|
|
91
|
+
break;
|
|
92
|
+
case 'month':
|
|
93
|
+
format = 'MMM_yyyy';
|
|
94
|
+
break;
|
|
95
|
+
case 'year':
|
|
96
|
+
format = 'yyyy';
|
|
97
|
+
break;
|
|
98
|
+
default:
|
|
99
|
+
format = 'MMM_yyyy';
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
return format;
|
|
103
|
+
}
|
|
104
|
+
exports.getDateFormatFromBucket = getDateFormatFromBucket;
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
import { Filter } from '../models/Filter';
|
|
1
2
|
export declare function findAndProcessDateFilter(filters: any[]): any;
|
|
2
|
-
export declare function processFilterFromBackend(filter: any
|
|
3
|
+
export declare function processFilterFromBackend(filter: any): any;
|
|
3
4
|
export declare function updateFilter(filter: any, value?: any, comparison?: any): any;
|
|
5
|
+
export declare const getType: (t: string) => "string" | "boolean" | "numeric" | "date";
|
|
6
|
+
/**
|
|
7
|
+
* Returns a sentence to describe a Filter
|
|
8
|
+
*/
|
|
9
|
+
export declare function filterSentence(filter: Filter): string;
|
|
4
10
|
//# sourceMappingURL=filterProcessing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"AAOA,OAAO,EAAgB,MAAM,EAAe,MAAM,kBAAkB,CAAC;AAGrE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAoB5D;AAMD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,OAkBnD;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,GAAG,EACX,KAAK,GAAE,GAAU,EACjB,UAAU,GAAE,GAAU,OAuGvB;AAGD,eAAO,MAAM,OAAO,MAAO,MAAM,8CAwDhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAwBrD"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.updateFilter = exports.processFilterFromBackend = exports.findAndProcessDateFilter = void 0;
|
|
3
|
+
exports.filterSentence = exports.getType = exports.updateFilter = exports.processFilterFromBackend = exports.findAndProcessDateFilter = void 0;
|
|
4
4
|
const dateRangePickerUtils_1 = require("../DateRangePicker/dateRangePickerUtils");
|
|
5
|
+
const Filter_1 = require("../models/Filter");
|
|
6
|
+
const textProcessing_1 = require("./textProcessing");
|
|
5
7
|
function findAndProcessDateFilter(filters) {
|
|
6
8
|
let dateFilter = filters.find((filter) => filter.filterType === 'date_range');
|
|
7
9
|
if (dateFilter) {
|
|
@@ -24,7 +26,7 @@ exports.findAndProcessDateFilter = findAndProcessDateFilter;
|
|
|
24
26
|
function isValidDate(date) {
|
|
25
27
|
return !isNaN(Date.parse(date));
|
|
26
28
|
}
|
|
27
|
-
function processFilterFromBackend(filter
|
|
29
|
+
function processFilterFromBackend(filter) {
|
|
28
30
|
if (filter.filterType === 'date_range') {
|
|
29
31
|
return {
|
|
30
32
|
...filter,
|
|
@@ -33,20 +35,12 @@ function processFilterFromBackend(filter, rows) {
|
|
|
33
35
|
options: dateRangePickerUtils_1.defaultOptionsV2,
|
|
34
36
|
comparisonRange: {
|
|
35
37
|
...filter.comparisonRange,
|
|
36
|
-
value:
|
|
38
|
+
value: 'PREV_PERIOD',
|
|
37
39
|
},
|
|
38
40
|
};
|
|
39
41
|
}
|
|
40
42
|
if (filter.filterType === 'string') {
|
|
41
|
-
|
|
42
|
-
const distinctOptions = Array.from(new Set(options)).filter((value) => value !== undefined && value !== null);
|
|
43
|
-
return {
|
|
44
|
-
...filter,
|
|
45
|
-
options: distinctOptions.map((option) => ({
|
|
46
|
-
label: option,
|
|
47
|
-
value: option,
|
|
48
|
-
})),
|
|
49
|
-
};
|
|
43
|
+
return filter;
|
|
50
44
|
}
|
|
51
45
|
return filter;
|
|
52
46
|
}
|
|
@@ -56,7 +50,7 @@ function updateFilter(filter, value = null, comparison = null) {
|
|
|
56
50
|
const { ...filterWithoutSelectedValue } = filter;
|
|
57
51
|
if (filter.filterType === 'string') {
|
|
58
52
|
let selectedValue = {};
|
|
59
|
-
if (value) {
|
|
53
|
+
if (value || value === '') {
|
|
60
54
|
if (filter.stringFilterType === 'multiselect') {
|
|
61
55
|
const parsedValue = value;
|
|
62
56
|
if (parsedValue.length === 0) {
|
|
@@ -151,3 +145,96 @@ function updateFilter(filter, value = null, comparison = null) {
|
|
|
151
145
|
}
|
|
152
146
|
}
|
|
153
147
|
exports.updateFilter = updateFilter;
|
|
148
|
+
// Function to translate field type to "string", "numeric", or "date"
|
|
149
|
+
const getType = (t) => {
|
|
150
|
+
// strip any size numbers at the end
|
|
151
|
+
// TODO: 'max' data types, e.g. varchar(max)
|
|
152
|
+
t = t.replace(/\d+$/, '');
|
|
153
|
+
switch (t) {
|
|
154
|
+
case 'string':
|
|
155
|
+
case 'char':
|
|
156
|
+
case 'varchar':
|
|
157
|
+
case 'nchar':
|
|
158
|
+
case 'nvarchar':
|
|
159
|
+
case 'ntext':
|
|
160
|
+
case 'binary':
|
|
161
|
+
case 'varbinary':
|
|
162
|
+
case 'tinyblob':
|
|
163
|
+
case 'tinytext':
|
|
164
|
+
case 'blob':
|
|
165
|
+
case 'mediumtext':
|
|
166
|
+
case 'mediumblob':
|
|
167
|
+
case 'longtext':
|
|
168
|
+
case 'longblob':
|
|
169
|
+
case 'text':
|
|
170
|
+
return 'string';
|
|
171
|
+
case 'numeric':
|
|
172
|
+
case 'bit':
|
|
173
|
+
case 'tinybit':
|
|
174
|
+
case 'smallint':
|
|
175
|
+
case 'mediumint':
|
|
176
|
+
case 'int':
|
|
177
|
+
case 'tinyint':
|
|
178
|
+
case 'integer':
|
|
179
|
+
case 'bigint':
|
|
180
|
+
case 'float':
|
|
181
|
+
case 'double':
|
|
182
|
+
case 'double precision':
|
|
183
|
+
case 'decimal':
|
|
184
|
+
case 'dec':
|
|
185
|
+
case 'smallmoney':
|
|
186
|
+
case 'money':
|
|
187
|
+
case 'real':
|
|
188
|
+
return 'numeric';
|
|
189
|
+
case 'date':
|
|
190
|
+
case 'datetime':
|
|
191
|
+
case 'datetime2':
|
|
192
|
+
case 'smalldatetime':
|
|
193
|
+
case 'datetimeoffset':
|
|
194
|
+
case 'timestamp':
|
|
195
|
+
case 'timestamptz':
|
|
196
|
+
case 'time':
|
|
197
|
+
case 'year':
|
|
198
|
+
return 'date';
|
|
199
|
+
case 'bool':
|
|
200
|
+
case 'boolean':
|
|
201
|
+
return 'boolean';
|
|
202
|
+
default:
|
|
203
|
+
return 'string';
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
exports.getType = getType;
|
|
207
|
+
/**
|
|
208
|
+
* Returns a sentence to describe a Filter
|
|
209
|
+
*/
|
|
210
|
+
function filterSentence(filter) {
|
|
211
|
+
let value = '';
|
|
212
|
+
if (filter.name == Filter_1.FilterNames.NullFilter) {
|
|
213
|
+
return `${(0, textProcessing_1.snakeAndCamelCaseToTitleCase)(filter.field)} ${filter.operator}`;
|
|
214
|
+
}
|
|
215
|
+
else if (filter.value === null || filter.value === undefined) {
|
|
216
|
+
return 'Error: filter missing value';
|
|
217
|
+
}
|
|
218
|
+
if (typeof filter.value === 'string' || typeof filter.value === 'number') {
|
|
219
|
+
value = filter.value.toString();
|
|
220
|
+
}
|
|
221
|
+
else if (filter.value === false || filter.value === true) {
|
|
222
|
+
value = filter.value.toString();
|
|
223
|
+
}
|
|
224
|
+
else if ('unit' in filter.value) {
|
|
225
|
+
if (filter.operator === Filter_1.DateOperator.InTheCurrent) {
|
|
226
|
+
value = `${filter.value.unit}`;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
value = `${filter.value.value} ${filter.value.unit}${filter.value.value === 1 ? '' : 's'}`;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
else if ('startDate' in filter.value) {
|
|
233
|
+
value = `from ${filter.value.startDate}`;
|
|
234
|
+
}
|
|
235
|
+
else if (filter.value.length > 0) {
|
|
236
|
+
value = filter.value.join(', ');
|
|
237
|
+
}
|
|
238
|
+
return `${(0, textProcessing_1.snakeAndCamelCaseToTitleCase)(filter.field)} ${filter.operator}${filter.operator === 'is' || filter.operator === 'is not' ? ' one of' : ''} ${value}`;
|
|
239
|
+
}
|
|
240
|
+
exports.filterSentence = filterSentence;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Pivot } from '../internals/ReportBuilder/PivotModal';
|
|
2
|
-
|
|
2
|
+
import { QuillReportInternal } from '../models/Report';
|
|
3
|
+
export declare function generatePivotWithSQL(pivot: Pivot, report: QuillReportInternal, client: any, dateBucket?: string, dateFilter?: any, distinctStrings?: any): Promise<{
|
|
3
4
|
rows: any;
|
|
4
5
|
columns: any;
|
|
5
6
|
} | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAiB,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAiB,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAOvD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,GAAG,EACX,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,GAAG,EAChB,eAAe,CAAC,EAAE,GAAG;;;eAyLtB"}
|
|
@@ -27,13 +27,16 @@ async function generatePivotWithSQL(pivot, report, client, dateBucket, dateFilte
|
|
|
27
27
|
}
|
|
28
28
|
if (pivot.rowField && !pivot.rowFieldType) {
|
|
29
29
|
const rowColumn = report.columns.find((column) => column.field === pivot.rowField);
|
|
30
|
-
pivot.rowFieldType = rowColumn
|
|
30
|
+
pivot.rowFieldType = rowColumn?.format || 'string';
|
|
31
31
|
}
|
|
32
32
|
let distinctStringValues = undefined;
|
|
33
33
|
if (!distinctStrings && report.rows && pivot.columnField) {
|
|
34
34
|
const distinctValues = Array.from(new Set(report.rows.map((row) => row[pivot.columnField])));
|
|
35
35
|
distinctStringValues = distinctValues.map((value) => value.toString());
|
|
36
36
|
}
|
|
37
|
+
if (!report.itemQuery) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
37
40
|
const sqlQuery = (0, queryConstructor_1.generatePivotQuery)(pivot, report.itemQuery, client.databaseType, comparisonInterval, distinctStrings ? distinctStrings : distinctStringValues, dateBucket);
|
|
38
41
|
if (sqlQuery && report.rows.length > 0) {
|
|
39
42
|
const hostedBody = {
|
|
@@ -70,6 +73,9 @@ async function generatePivotWithSQL(pivot, report, client, dateBucket, dateFilte
|
|
|
70
73
|
.map((field) => ({
|
|
71
74
|
field: (0, columnProcessing_1.processColumnName)(field.name),
|
|
72
75
|
label: (0, textProcessing_1.snakeCaseToTitleCase)((0, columnProcessing_1.processColumnName)(field.name.replace('comparison_', 'comparison '))),
|
|
76
|
+
format: field.name === pivot.rowField
|
|
77
|
+
? 'string'
|
|
78
|
+
: pivot.valueFieldType ?? 'whole_number',
|
|
73
79
|
}))
|
|
74
80
|
.filter((field, index) => field.field !== 'comparison_' + pivot.rowField || index === 0)
|
|
75
81
|
.sort((a, b) => {
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { QuillReport, QuillReportInternal } from '../models/Report';
|
|
1
2
|
import { AdditionalProcessing } from './tableProcessing';
|
|
3
|
+
export declare const EMPTY_REPORT: QuillReport;
|
|
2
4
|
export declare function fetchReport(reportId: string, client: any, useReportTask?: boolean, filters?: any[], additionalProcessing?: AdditionalProcessing, dateBucket?: string, customFields?: any): Promise<{
|
|
3
|
-
report:
|
|
5
|
+
report: QuillReportInternal;
|
|
4
6
|
error?: string;
|
|
5
7
|
}>;
|
|
6
8
|
export declare const formatRowsFromReport: (report: any) => any;
|
|
9
|
+
export declare function convertInternalReportToReport(report: QuillReportInternal): QuillReport;
|
|
7
10
|
//# sourceMappingURL=report.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AASpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,eAAO,MAAM,YAAY,EAAE,WAkB1B,CAAC;AAEF,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,EACX,aAAa,UAAO,EACpB,OAAO,GAAE,GAAG,EAAO,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,GAAG,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,mBAAmB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA2F1D;AAED,eAAO,MAAM,oBAAoB,WAAY,GAAG,QAkB/C,CAAC;AAEF,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,mBAAmB,GAC1B,WAAW,CAsDb"}
|
package/dist/cjs/utils/report.js
CHANGED
|
@@ -1,13 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.formatRowsFromReport = exports.fetchReport = void 0;
|
|
3
|
+
exports.convertInternalReportToReport = exports.formatRowsFromReport = exports.fetchReport = exports.EMPTY_REPORT = void 0;
|
|
4
|
+
const columnProcessing_1 = require("./columnProcessing");
|
|
4
5
|
const dashboard_1 = require("./dashboard");
|
|
5
6
|
const dataFetcher_1 = require("./dataFetcher");
|
|
6
7
|
const error_1 = require("./error");
|
|
7
8
|
const errorProcessing_1 = require("./errorProcessing");
|
|
8
9
|
const logging_1 = require("./logging");
|
|
9
10
|
const merge_1 = require("./merge");
|
|
11
|
+
const pivotProcessing_1 = require("./pivotProcessing");
|
|
10
12
|
const valueFormatter_1 = require("./valueFormatter");
|
|
13
|
+
exports.EMPTY_REPORT = {
|
|
14
|
+
id: '',
|
|
15
|
+
name: '',
|
|
16
|
+
dashboardName: '',
|
|
17
|
+
rows: [],
|
|
18
|
+
columns: [],
|
|
19
|
+
chartType: '',
|
|
20
|
+
dateField: null,
|
|
21
|
+
pivot: null,
|
|
22
|
+
xAxisLabel: '',
|
|
23
|
+
xAxisField: '',
|
|
24
|
+
xAxisFormat: 'string',
|
|
25
|
+
yAxisFields: [],
|
|
26
|
+
order: -1,
|
|
27
|
+
compareRows: [],
|
|
28
|
+
filtersApplied: [],
|
|
29
|
+
queryString: '',
|
|
30
|
+
rowCount: 0,
|
|
31
|
+
};
|
|
11
32
|
async function fetchReport(reportId, client, useReportTask = true, filters = [], additionalProcessing, dateBucket, customFields) {
|
|
12
33
|
let reportInfo = undefined;
|
|
13
34
|
let errorMessage = undefined;
|
|
@@ -56,12 +77,18 @@ async function fetchReport(reportId, client, useReportTask = true, filters = [],
|
|
|
56
77
|
errorMessage = error;
|
|
57
78
|
}
|
|
58
79
|
else {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
80
|
+
if (!error.data.data) {
|
|
81
|
+
errorMessage = "Couln't find report";
|
|
82
|
+
reportInfo = exports.EMPTY_REPORT;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
reportInfo = {
|
|
86
|
+
...error.data.data,
|
|
87
|
+
id: error.data.data._id,
|
|
88
|
+
error: error.message,
|
|
89
|
+
adminError: error.data.adminErrorMessage,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
65
92
|
errorMessage = error.message;
|
|
66
93
|
}
|
|
67
94
|
}
|
|
@@ -78,6 +105,9 @@ async function fetchReport(reportId, client, useReportTask = true, filters = [],
|
|
|
78
105
|
}
|
|
79
106
|
exports.fetchReport = fetchReport;
|
|
80
107
|
const formatRowsFromReport = (report) => {
|
|
108
|
+
if (!report.rows || !report.columns) {
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
81
111
|
return report.rows.map((row) => {
|
|
82
112
|
return report.columns.reduce((formattedRow, column) => {
|
|
83
113
|
// Apply the format function to each field in the row
|
|
@@ -91,3 +121,60 @@ const formatRowsFromReport = (report) => {
|
|
|
91
121
|
});
|
|
92
122
|
};
|
|
93
123
|
exports.formatRowsFromReport = formatRowsFromReport;
|
|
124
|
+
function convertInternalReportToReport(report) {
|
|
125
|
+
try {
|
|
126
|
+
if (!report) {
|
|
127
|
+
return exports.EMPTY_REPORT;
|
|
128
|
+
}
|
|
129
|
+
const formattedReport = {
|
|
130
|
+
...report,
|
|
131
|
+
};
|
|
132
|
+
if (formattedReport.pivot && (0, pivotProcessing_1.isValidPivot)(formattedReport.pivot)) {
|
|
133
|
+
let columns = report.pivotColumns ?? report.columns;
|
|
134
|
+
let rows = report.pivotRows ?? report.rows;
|
|
135
|
+
if (report.chartType === 'table') {
|
|
136
|
+
columns =
|
|
137
|
+
report.pivotColumns?.map((col, index) => {
|
|
138
|
+
if (index === 0) {
|
|
139
|
+
return {
|
|
140
|
+
...col,
|
|
141
|
+
format: col.format || 'string',
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
...col,
|
|
146
|
+
format: report.pivot?.valueFieldType || 'whole_number',
|
|
147
|
+
};
|
|
148
|
+
}) ?? report.columns;
|
|
149
|
+
rows = (0, exports.formatRowsFromReport)({ rows, columns });
|
|
150
|
+
}
|
|
151
|
+
else if (report.chartType === 'metric') {
|
|
152
|
+
columns =
|
|
153
|
+
report.pivotColumns?.map((col) => {
|
|
154
|
+
return { ...col, format: report.xAxisFormat };
|
|
155
|
+
}) ?? report.columns;
|
|
156
|
+
rows = (0, exports.formatRowsFromReport)({ rows, columns });
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
...formattedReport,
|
|
160
|
+
rows: rows,
|
|
161
|
+
yAxisFields: (0, columnProcessing_1.getYAxisFields)(report),
|
|
162
|
+
columns: columns,
|
|
163
|
+
rowCount: rows ? rows.length : 0,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
let rows = report.rows;
|
|
167
|
+
if (report.chartType === 'metric' || report.chartType === 'table') {
|
|
168
|
+
rows = (0, exports.formatRowsFromReport)(report);
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
...formattedReport,
|
|
172
|
+
rows: rows,
|
|
173
|
+
yAxisFields: (0, columnProcessing_1.getYAxisFields)(report),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
return exports.EMPTY_REPORT;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.convertInternalReportToReport = convertInternalReportToReport;
|
|
@@ -34,7 +34,7 @@ export declare const fetchTableByQuery: (query: string, client: any, processing?
|
|
|
34
34
|
rows: any[];
|
|
35
35
|
rowCount?: number | undefined;
|
|
36
36
|
error?: string | undefined;
|
|
37
|
-
itemQuery?: string | undefined;
|
|
37
|
+
itemQuery?: string[] | undefined;
|
|
38
38
|
}>;
|
|
39
39
|
export declare const fetchTableByReport: (reportId: string, client: any, processing?: AdditionalProcessing, filters?: any, customFields?: any) => Promise<{
|
|
40
40
|
columns: Column[];
|