@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,3 +1,4 @@
|
|
|
1
|
+
import { findAndProcessDateFilter } from './filterProcessing';
|
|
1
2
|
function removeBigQuerySpecialChars(columnName) {
|
|
2
3
|
return columnName.replaceAll('quill_forward_slash', '/');
|
|
3
4
|
}
|
|
@@ -206,3 +207,54 @@ export function convertFormatToJsType(column) {
|
|
|
206
207
|
export function processColumnName(columnName) {
|
|
207
208
|
return removeBigQuerySpecialChars(columnName);
|
|
208
209
|
}
|
|
210
|
+
export const getYAxisFields = (report) => {
|
|
211
|
+
try {
|
|
212
|
+
const curDateFilter = findAndProcessDateFilter(Object.values(report.filtersApplied));
|
|
213
|
+
if (report.pivot && report.pivotColumns && report.pivot.columnField) {
|
|
214
|
+
return (report.pivotColumns
|
|
215
|
+
.slice(1)
|
|
216
|
+
.map((column) => {
|
|
217
|
+
// @ts-ignore
|
|
218
|
+
return { ...column, format: report.yAxisFields[0].format };
|
|
219
|
+
}) ?? []);
|
|
220
|
+
}
|
|
221
|
+
else if (report.pivot && report.pivotColumns) {
|
|
222
|
+
return (report.pivotColumns
|
|
223
|
+
.slice(1)
|
|
224
|
+
.map((column) => {
|
|
225
|
+
return {
|
|
226
|
+
...column,
|
|
227
|
+
// @ts-ignore
|
|
228
|
+
label: report?.yAxisFields[0].label,
|
|
229
|
+
// @ts-ignore
|
|
230
|
+
format: report?.yAxisFields[0].format,
|
|
231
|
+
};
|
|
232
|
+
}) ?? []);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
if (curDateFilter?.comparison &&
|
|
236
|
+
curDateFilter.comparisonRange.value !== 'NO_COMPARISON') {
|
|
237
|
+
const comparisonYAxisFields = report.yAxisFields?.map((field) => {
|
|
238
|
+
return {
|
|
239
|
+
...field,
|
|
240
|
+
field: `comparison_${field.field}`,
|
|
241
|
+
label: `comparison ${field.label ?? field.field}`,
|
|
242
|
+
};
|
|
243
|
+
});
|
|
244
|
+
if (report.pivotColumns) {
|
|
245
|
+
return report.pivotColumns;
|
|
246
|
+
}
|
|
247
|
+
else if (comparisonYAxisFields || report.yAxisFields) {
|
|
248
|
+
const yAxisFields = report.yAxisFields ?? [];
|
|
249
|
+
const compYAxisFields = comparisonYAxisFields ?? [];
|
|
250
|
+
return [...yAxisFields, ...compYAxisFields];
|
|
251
|
+
}
|
|
252
|
+
return [];
|
|
253
|
+
}
|
|
254
|
+
return report.pivotColumns ?? report.yAxisFields ?? [];
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch (e) {
|
|
258
|
+
return report.yAxisFields;
|
|
259
|
+
}
|
|
260
|
+
};
|
|
@@ -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,4 +1,3 @@
|
|
|
1
|
-
import { valueFormatter } from './valueFormatter';
|
|
2
1
|
import { generatePivotTable, generatePivotTableYAxis, } from '../internals/ReportBuilder/PivotModal';
|
|
3
2
|
import { snakeAndCamelCaseToTitleCase } from './textProcessing';
|
|
4
3
|
import { getData } from './dataFetcher';
|
|
@@ -14,15 +13,14 @@ const defaultDashboardItem = {
|
|
|
14
13
|
chartType: '',
|
|
15
14
|
dateField: null,
|
|
16
15
|
pivot: null,
|
|
17
|
-
primaryAggregation: '',
|
|
18
|
-
comparisonAggregation: '',
|
|
19
|
-
aggregationPercentChange: undefined,
|
|
20
16
|
yAxisFields: [],
|
|
21
17
|
xAxisLabel: '',
|
|
22
18
|
xAxisField: '',
|
|
23
19
|
xAxisFormat: 'string',
|
|
24
20
|
order: -1,
|
|
25
21
|
filtersApplied: {},
|
|
22
|
+
queryString: '',
|
|
23
|
+
rowCount: 0,
|
|
26
24
|
};
|
|
27
25
|
/**
|
|
28
26
|
* Returns a cleaned version of the dashboard item we store in state. We clean
|
|
@@ -41,7 +39,6 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
|
|
|
41
39
|
name: item.name,
|
|
42
40
|
};
|
|
43
41
|
const pivotTable = await getPivotTable(item, dashboardFilters, client, dateBucket);
|
|
44
|
-
const { primaryAggregation, comparisonAggregation, aggregationPercentChange, } = getAggragations(pivotTable, item);
|
|
45
42
|
return {
|
|
46
43
|
id: item._id,
|
|
47
44
|
name: item.name,
|
|
@@ -56,9 +53,6 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
|
|
|
56
53
|
chartType: item.chartType,
|
|
57
54
|
dateField: item.dateField,
|
|
58
55
|
pivot: item.pivot,
|
|
59
|
-
primaryAggregation,
|
|
60
|
-
comparisonAggregation,
|
|
61
|
-
aggregationPercentChange,
|
|
62
56
|
yAxisFields: pivotTable
|
|
63
57
|
? extractPivotedYAxis(pivotTable, item)
|
|
64
58
|
: item.yAxisFields,
|
|
@@ -70,42 +64,9 @@ export async function cleanDashboardItem(item, dashboardFilters, client, dateBuc
|
|
|
70
64
|
rowCount: parseInt(item.rowCount),
|
|
71
65
|
sort: item.sort,
|
|
72
66
|
itemQuery: item.itemQuery,
|
|
67
|
+
queryString: item.queryString,
|
|
73
68
|
};
|
|
74
69
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Extracts the aggregations from the item, if any.
|
|
77
|
-
*/
|
|
78
|
-
function getAggragations(pivotTable, item) {
|
|
79
|
-
const yAxisFields = extractPivotedYAxis(pivotTable, item);
|
|
80
|
-
const rows = extractPivotedData(pivotTable, item);
|
|
81
|
-
// extract the aggragation for the primary range.
|
|
82
|
-
const mainKey = yAxisFields[0]?.field ?? item.pivot?.valueField;
|
|
83
|
-
const primary = mainKey
|
|
84
|
-
? rows.reduce((sum, row) => sum + parseFloat(row[mainKey]), 0)
|
|
85
|
-
: 0;
|
|
86
|
-
// extract the aggragation for the comparison range, if applicable.
|
|
87
|
-
const compKey = yAxisFields[1]?.field ?? item.pivot?.valueField;
|
|
88
|
-
const comparison = compKey
|
|
89
|
-
? rows.reduce((sum, row) => sum + parseFloat(row[compKey]), 0)
|
|
90
|
-
: 0;
|
|
91
|
-
return {
|
|
92
|
-
primaryAggregation: formatAggragation(item, primary),
|
|
93
|
-
comparisonAggregation: formatAggragation(item, comparison),
|
|
94
|
-
aggregationPercentChange: Number(primary - comparison),
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Applies a valueFormatter to the given value based on the format in the item.
|
|
99
|
-
*/
|
|
100
|
-
function formatAggragation(item, value) {
|
|
101
|
-
if (!value)
|
|
102
|
-
return undefined;
|
|
103
|
-
return valueFormatter({
|
|
104
|
-
value,
|
|
105
|
-
field: item.pivot?.valueField,
|
|
106
|
-
fields: item.yAxisFields,
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
70
|
/**
|
|
110
71
|
* Extract and transform the data from itemInfo.
|
|
111
72
|
*/
|
|
@@ -161,20 +122,6 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
|
|
|
161
122
|
: undefined)
|
|
162
123
|
: undefined;
|
|
163
124
|
}
|
|
164
|
-
/**
|
|
165
|
-
* Returns the data list based on whether the table is pivoted and if there is
|
|
166
|
-
* a config value passed into this component.
|
|
167
|
-
*/
|
|
168
|
-
function extractPivotedData(pivotTable, item, config = undefined) {
|
|
169
|
-
if (pivotTable)
|
|
170
|
-
return pivotTable.rows;
|
|
171
|
-
if (config) {
|
|
172
|
-
if (config.bucketedRows.length > 0)
|
|
173
|
-
return config.bucketedRows;
|
|
174
|
-
return config.rows;
|
|
175
|
-
}
|
|
176
|
-
return item.rows;
|
|
177
|
-
}
|
|
178
125
|
/**
|
|
179
126
|
* Extracts the yAxis from the pivot table, if one exists.
|
|
180
127
|
*/
|
|
@@ -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"}
|
|
@@ -4,6 +4,7 @@ export var Calculation;
|
|
|
4
4
|
(function (Calculation) {
|
|
5
5
|
Calculation["PointToPointPercentageChange"] = "POINT_TO_POINT_PERCENTAGE_CHANGE";
|
|
6
6
|
Calculation["SimplePercentageChange"] = "SIMPLE_PERCENTAGE_CHANGE";
|
|
7
|
+
Calculation["Sum"] = "SUM";
|
|
7
8
|
})(Calculation || (Calculation = {}));
|
|
8
9
|
const getSumOfField = (rows, field) => {
|
|
9
10
|
if (rows[0] && rows[0][field]) {
|
|
@@ -120,3 +121,18 @@ export const getPointToPointPercentageChange = (data) => {
|
|
|
120
121
|
}
|
|
121
122
|
}
|
|
122
123
|
};
|
|
124
|
+
export const getSumOfFields = (data) => {
|
|
125
|
+
if (data.pivot && data.pivotRows && data.pivotColumns) {
|
|
126
|
+
const pivotRows = data.pivotRows;
|
|
127
|
+
const fields = data.pivotColumns.map((field) => {
|
|
128
|
+
return field.field;
|
|
129
|
+
});
|
|
130
|
+
return getSumOfFieldsAndRows(pivotRows, fields);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
const yAxisFields = data.yAxisFields.map((field) => {
|
|
134
|
+
return field.field;
|
|
135
|
+
});
|
|
136
|
+
return getSumOfFieldsAndRows(data.rows, yAxisFields);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
@@ -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/esm/utils/dates.js
CHANGED
|
@@ -72,3 +72,24 @@ export function parseDateByDatabaseType(date, databaseType) {
|
|
|
72
72
|
return new Date(date);
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
|
+
export function getDateFormatFromBucket(dateBucket) {
|
|
76
|
+
let format = 'MMM_yyyy';
|
|
77
|
+
switch (dateBucket) {
|
|
78
|
+
case 'day':
|
|
79
|
+
format = 'MMM_dd';
|
|
80
|
+
break;
|
|
81
|
+
case 'week':
|
|
82
|
+
format = 'MMM_dd-MMM_dd';
|
|
83
|
+
break;
|
|
84
|
+
case 'month':
|
|
85
|
+
format = 'MMM_yyyy';
|
|
86
|
+
break;
|
|
87
|
+
case 'year':
|
|
88
|
+
format = 'yyyy';
|
|
89
|
+
break;
|
|
90
|
+
default:
|
|
91
|
+
format = 'MMM_yyyy';
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
return format;
|
|
95
|
+
}
|
|
@@ -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,4 +1,6 @@
|
|
|
1
1
|
import { COMPARISON_RANGE, PRIMARY_RANGE, defaultOptionsV2, getRangeFromPresetOptions, } from '../DateRangePicker/dateRangePickerUtils';
|
|
2
|
+
import { DateOperator, FilterNames } from '../models/Filter';
|
|
3
|
+
import { snakeAndCamelCaseToTitleCase } from './textProcessing';
|
|
2
4
|
export function findAndProcessDateFilter(filters) {
|
|
3
5
|
let dateFilter = filters.find((filter) => filter.filterType === 'date_range');
|
|
4
6
|
if (dateFilter) {
|
|
@@ -20,7 +22,7 @@ export function findAndProcessDateFilter(filters) {
|
|
|
20
22
|
function isValidDate(date) {
|
|
21
23
|
return !isNaN(Date.parse(date));
|
|
22
24
|
}
|
|
23
|
-
export function processFilterFromBackend(filter
|
|
25
|
+
export function processFilterFromBackend(filter) {
|
|
24
26
|
if (filter.filterType === 'date_range') {
|
|
25
27
|
return {
|
|
26
28
|
...filter,
|
|
@@ -29,20 +31,12 @@ export function processFilterFromBackend(filter, rows) {
|
|
|
29
31
|
options: defaultOptionsV2,
|
|
30
32
|
comparisonRange: {
|
|
31
33
|
...filter.comparisonRange,
|
|
32
|
-
value:
|
|
34
|
+
value: 'PREV_PERIOD',
|
|
33
35
|
},
|
|
34
36
|
};
|
|
35
37
|
}
|
|
36
38
|
if (filter.filterType === 'string') {
|
|
37
|
-
|
|
38
|
-
const distinctOptions = Array.from(new Set(options)).filter((value) => value !== undefined && value !== null);
|
|
39
|
-
return {
|
|
40
|
-
...filter,
|
|
41
|
-
options: distinctOptions.map((option) => ({
|
|
42
|
-
label: option,
|
|
43
|
-
value: option,
|
|
44
|
-
})),
|
|
45
|
-
};
|
|
39
|
+
return filter;
|
|
46
40
|
}
|
|
47
41
|
return filter;
|
|
48
42
|
}
|
|
@@ -51,7 +45,7 @@ export function updateFilter(filter, value = null, comparison = null) {
|
|
|
51
45
|
const { ...filterWithoutSelectedValue } = filter;
|
|
52
46
|
if (filter.filterType === 'string') {
|
|
53
47
|
let selectedValue = {};
|
|
54
|
-
if (value) {
|
|
48
|
+
if (value || value === '') {
|
|
55
49
|
if (filter.stringFilterType === 'multiselect') {
|
|
56
50
|
const parsedValue = value;
|
|
57
51
|
if (parsedValue.length === 0) {
|
|
@@ -145,3 +139,94 @@ export function updateFilter(filter, value = null, comparison = null) {
|
|
|
145
139
|
}
|
|
146
140
|
}
|
|
147
141
|
}
|
|
142
|
+
// Function to translate field type to "string", "numeric", or "date"
|
|
143
|
+
export const getType = (t) => {
|
|
144
|
+
// strip any size numbers at the end
|
|
145
|
+
// TODO: 'max' data types, e.g. varchar(max)
|
|
146
|
+
t = t.replace(/\d+$/, '');
|
|
147
|
+
switch (t) {
|
|
148
|
+
case 'string':
|
|
149
|
+
case 'char':
|
|
150
|
+
case 'varchar':
|
|
151
|
+
case 'nchar':
|
|
152
|
+
case 'nvarchar':
|
|
153
|
+
case 'ntext':
|
|
154
|
+
case 'binary':
|
|
155
|
+
case 'varbinary':
|
|
156
|
+
case 'tinyblob':
|
|
157
|
+
case 'tinytext':
|
|
158
|
+
case 'blob':
|
|
159
|
+
case 'mediumtext':
|
|
160
|
+
case 'mediumblob':
|
|
161
|
+
case 'longtext':
|
|
162
|
+
case 'longblob':
|
|
163
|
+
case 'text':
|
|
164
|
+
return 'string';
|
|
165
|
+
case 'numeric':
|
|
166
|
+
case 'bit':
|
|
167
|
+
case 'tinybit':
|
|
168
|
+
case 'smallint':
|
|
169
|
+
case 'mediumint':
|
|
170
|
+
case 'int':
|
|
171
|
+
case 'tinyint':
|
|
172
|
+
case 'integer':
|
|
173
|
+
case 'bigint':
|
|
174
|
+
case 'float':
|
|
175
|
+
case 'double':
|
|
176
|
+
case 'double precision':
|
|
177
|
+
case 'decimal':
|
|
178
|
+
case 'dec':
|
|
179
|
+
case 'smallmoney':
|
|
180
|
+
case 'money':
|
|
181
|
+
case 'real':
|
|
182
|
+
return 'numeric';
|
|
183
|
+
case 'date':
|
|
184
|
+
case 'datetime':
|
|
185
|
+
case 'datetime2':
|
|
186
|
+
case 'smalldatetime':
|
|
187
|
+
case 'datetimeoffset':
|
|
188
|
+
case 'timestamp':
|
|
189
|
+
case 'timestamptz':
|
|
190
|
+
case 'time':
|
|
191
|
+
case 'year':
|
|
192
|
+
return 'date';
|
|
193
|
+
case 'bool':
|
|
194
|
+
case 'boolean':
|
|
195
|
+
return 'boolean';
|
|
196
|
+
default:
|
|
197
|
+
return 'string';
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Returns a sentence to describe a Filter
|
|
202
|
+
*/
|
|
203
|
+
export function filterSentence(filter) {
|
|
204
|
+
let value = '';
|
|
205
|
+
if (filter.name == FilterNames.NullFilter) {
|
|
206
|
+
return `${snakeAndCamelCaseToTitleCase(filter.field)} ${filter.operator}`;
|
|
207
|
+
}
|
|
208
|
+
else if (filter.value === null || filter.value === undefined) {
|
|
209
|
+
return 'Error: filter missing value';
|
|
210
|
+
}
|
|
211
|
+
if (typeof filter.value === 'string' || typeof filter.value === 'number') {
|
|
212
|
+
value = filter.value.toString();
|
|
213
|
+
}
|
|
214
|
+
else if (filter.value === false || filter.value === true) {
|
|
215
|
+
value = filter.value.toString();
|
|
216
|
+
}
|
|
217
|
+
else if ('unit' in filter.value) {
|
|
218
|
+
if (filter.operator === DateOperator.InTheCurrent) {
|
|
219
|
+
value = `${filter.value.unit}`;
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
value = `${filter.value.value} ${filter.value.unit}${filter.value.value === 1 ? '' : 's'}`;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else if ('startDate' in filter.value) {
|
|
226
|
+
value = `from ${filter.value.startDate}`;
|
|
227
|
+
}
|
|
228
|
+
else if (filter.value.length > 0) {
|
|
229
|
+
value = filter.value.join(', ');
|
|
230
|
+
}
|
|
231
|
+
return `${snakeAndCamelCaseToTitleCase(filter.field)} ${filter.operator}${filter.operator === 'is' || filter.operator === 'is not' ? ' one of' : ''} ${value}`;
|
|
232
|
+
}
|
|
@@ -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"}
|
|
@@ -24,13 +24,16 @@ export async function generatePivotWithSQL(pivot, report, client, dateBucket, da
|
|
|
24
24
|
}
|
|
25
25
|
if (pivot.rowField && !pivot.rowFieldType) {
|
|
26
26
|
const rowColumn = report.columns.find((column) => column.field === pivot.rowField);
|
|
27
|
-
pivot.rowFieldType = rowColumn
|
|
27
|
+
pivot.rowFieldType = rowColumn?.format || 'string';
|
|
28
28
|
}
|
|
29
29
|
let distinctStringValues = undefined;
|
|
30
30
|
if (!distinctStrings && report.rows && pivot.columnField) {
|
|
31
31
|
const distinctValues = Array.from(new Set(report.rows.map((row) => row[pivot.columnField])));
|
|
32
32
|
distinctStringValues = distinctValues.map((value) => value.toString());
|
|
33
33
|
}
|
|
34
|
+
if (!report.itemQuery) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
34
37
|
const sqlQuery = generatePivotQuery(pivot, report.itemQuery, client.databaseType, comparisonInterval, distinctStrings ? distinctStrings : distinctStringValues, dateBucket);
|
|
35
38
|
if (sqlQuery && report.rows.length > 0) {
|
|
36
39
|
const hostedBody = {
|
|
@@ -67,6 +70,9 @@ export async function generatePivotWithSQL(pivot, report, client, dateBucket, da
|
|
|
67
70
|
.map((field) => ({
|
|
68
71
|
field: processColumnName(field.name),
|
|
69
72
|
label: snakeCaseToTitleCase(processColumnName(field.name.replace('comparison_', 'comparison '))),
|
|
73
|
+
format: field.name === pivot.rowField
|
|
74
|
+
? 'string'
|
|
75
|
+
: pivot.valueFieldType ?? 'whole_number',
|
|
70
76
|
}))
|
|
71
77
|
.filter((field, index) => field.field !== 'comparison_' + pivot.rowField || index === 0)
|
|
72
78
|
.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/esm/utils/report.js
CHANGED
|
@@ -1,10 +1,31 @@
|
|
|
1
|
+
import { getYAxisFields } from './columnProcessing';
|
|
1
2
|
import { cleanDashboardItem } from './dashboard';
|
|
2
3
|
import { getData } from './dataFetcher';
|
|
3
4
|
import { DataLoadError } from './error';
|
|
4
5
|
import { processFilterErrorList } from './errorProcessing';
|
|
5
6
|
import { internalLog } from './logging';
|
|
6
7
|
import { mergeComparisonRange } from './merge';
|
|
8
|
+
import { isValidPivot } from './pivotProcessing';
|
|
7
9
|
import { quillFormat } from './valueFormatter';
|
|
10
|
+
export const EMPTY_REPORT = {
|
|
11
|
+
id: '',
|
|
12
|
+
name: '',
|
|
13
|
+
dashboardName: '',
|
|
14
|
+
rows: [],
|
|
15
|
+
columns: [],
|
|
16
|
+
chartType: '',
|
|
17
|
+
dateField: null,
|
|
18
|
+
pivot: null,
|
|
19
|
+
xAxisLabel: '',
|
|
20
|
+
xAxisField: '',
|
|
21
|
+
xAxisFormat: 'string',
|
|
22
|
+
yAxisFields: [],
|
|
23
|
+
order: -1,
|
|
24
|
+
compareRows: [],
|
|
25
|
+
filtersApplied: [],
|
|
26
|
+
queryString: '',
|
|
27
|
+
rowCount: 0,
|
|
28
|
+
};
|
|
8
29
|
export async function fetchReport(reportId, client, useReportTask = true, filters = [], additionalProcessing, dateBucket, customFields) {
|
|
9
30
|
let reportInfo = undefined;
|
|
10
31
|
let errorMessage = undefined;
|
|
@@ -53,12 +74,18 @@ export async function fetchReport(reportId, client, useReportTask = true, filter
|
|
|
53
74
|
errorMessage = error;
|
|
54
75
|
}
|
|
55
76
|
else {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
77
|
+
if (!error.data.data) {
|
|
78
|
+
errorMessage = "Couln't find report";
|
|
79
|
+
reportInfo = EMPTY_REPORT;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
reportInfo = {
|
|
83
|
+
...error.data.data,
|
|
84
|
+
id: error.data.data._id,
|
|
85
|
+
error: error.message,
|
|
86
|
+
adminError: error.data.adminErrorMessage,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
62
89
|
errorMessage = error.message;
|
|
63
90
|
}
|
|
64
91
|
}
|
|
@@ -74,6 +101,9 @@ export async function fetchReport(reportId, client, useReportTask = true, filter
|
|
|
74
101
|
return { report: reportInfo, error: errorMessage };
|
|
75
102
|
}
|
|
76
103
|
export const formatRowsFromReport = (report) => {
|
|
104
|
+
if (!report.rows || !report.columns) {
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
77
107
|
return report.rows.map((row) => {
|
|
78
108
|
return report.columns.reduce((formattedRow, column) => {
|
|
79
109
|
// Apply the format function to each field in the row
|
|
@@ -86,3 +116,59 @@ export const formatRowsFromReport = (report) => {
|
|
|
86
116
|
}, {});
|
|
87
117
|
});
|
|
88
118
|
};
|
|
119
|
+
export function convertInternalReportToReport(report) {
|
|
120
|
+
try {
|
|
121
|
+
if (!report) {
|
|
122
|
+
return EMPTY_REPORT;
|
|
123
|
+
}
|
|
124
|
+
const formattedReport = {
|
|
125
|
+
...report,
|
|
126
|
+
};
|
|
127
|
+
if (formattedReport.pivot && isValidPivot(formattedReport.pivot)) {
|
|
128
|
+
let columns = report.pivotColumns ?? report.columns;
|
|
129
|
+
let rows = report.pivotRows ?? report.rows;
|
|
130
|
+
if (report.chartType === 'table') {
|
|
131
|
+
columns =
|
|
132
|
+
report.pivotColumns?.map((col, index) => {
|
|
133
|
+
if (index === 0) {
|
|
134
|
+
return {
|
|
135
|
+
...col,
|
|
136
|
+
format: col.format || 'string',
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
...col,
|
|
141
|
+
format: report.pivot?.valueFieldType || 'whole_number',
|
|
142
|
+
};
|
|
143
|
+
}) ?? report.columns;
|
|
144
|
+
rows = formatRowsFromReport({ rows, columns });
|
|
145
|
+
}
|
|
146
|
+
else if (report.chartType === 'metric') {
|
|
147
|
+
columns =
|
|
148
|
+
report.pivotColumns?.map((col) => {
|
|
149
|
+
return { ...col, format: report.xAxisFormat };
|
|
150
|
+
}) ?? report.columns;
|
|
151
|
+
rows = formatRowsFromReport({ rows, columns });
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
...formattedReport,
|
|
155
|
+
rows: rows,
|
|
156
|
+
yAxisFields: getYAxisFields(report),
|
|
157
|
+
columns: columns,
|
|
158
|
+
rowCount: rows ? rows.length : 0,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
let rows = report.rows;
|
|
162
|
+
if (report.chartType === 'metric' || report.chartType === 'table') {
|
|
163
|
+
rows = formatRowsFromReport(report);
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
...formattedReport,
|
|
167
|
+
rows: rows,
|
|
168
|
+
yAxisFields: getYAxisFields(report),
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
return EMPTY_REPORT;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
@@ -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[];
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"convert.uspec.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/convert.uspec.ts"],"names":[],"mappings":""}
|