@quillsql/react 2.13.39 → 2.13.41
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 +5 -1
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +51 -28
- package/dist/cjs/ChartBuilder.d.ts +13 -1
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +347 -147
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +11 -1
- package/dist/cjs/Context.d.ts +16 -4
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +57 -38
- package/dist/cjs/Dashboard.d.ts +6 -3
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +70 -28
- package/dist/cjs/QuillProvider.d.ts +4 -8
- package/dist/cjs/QuillProvider.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.d.ts +1 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +117 -45
- package/dist/cjs/SQLEditor.d.ts +7 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +53 -9
- package/dist/cjs/Table.d.ts +21 -1
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +30 -192
- package/dist/cjs/components/Chart/BarChart.d.ts +5 -1
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +4 -3
- package/dist/cjs/components/Chart/CustomReferenceLine.d.ts +2 -0
- package/dist/cjs/components/Chart/CustomReferenceLine.d.ts.map +1 -0
- package/dist/cjs/components/Chart/CustomReferenceLine.js +26 -0
- package/dist/cjs/components/Chart/GaugeChart.d.ts +11 -0
- package/dist/cjs/components/Chart/GaugeChart.d.ts.map +1 -0
- package/dist/cjs/components/Chart/GaugeChart.js +198 -0
- package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/InternalChart.js +14 -11
- package/dist/cjs/components/Chart/LineChart.d.ts +5 -1
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +4 -3
- package/dist/cjs/components/Chart/MapChart.d.ts +36 -0
- package/dist/cjs/components/Chart/MapChart.d.ts.map +1 -0
- package/dist/cjs/components/Chart/MapChart.js +548 -0
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +114 -42
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +57 -54
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +5 -1
- package/dist/cjs/components/QuillMultiSelectSectionList.js +5 -5
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +5 -4
- package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelectWithCombo.js +12 -11
- package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnModal.js +2 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.js +13 -13
- package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +2 -1
- package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/FilterStack.js +4 -4
- package/dist/cjs/components/ReportBuilder/convert.d.ts +2 -0
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +28 -7
- package/dist/cjs/components/ReportBuilder/util.d.ts +1 -1
- package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/util.js +15 -2
- package/dist/cjs/components/UiComponents.d.ts +4 -1
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +31 -5
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +11 -9
- package/dist/cjs/hooks/useExport.d.ts.map +1 -1
- package/dist/cjs/hooks/useExport.js +18 -4
- package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useQuill.js +16 -3
- package/dist/cjs/hooks/useReport.d.ts.map +1 -1
- package/dist/cjs/hooks/useReport.js +1 -7
- package/dist/cjs/hooks/useVirtualTables.d.ts +6 -2
- package/dist/cjs/hooks/useVirtualTables.d.ts.map +1 -1
- package/dist/cjs/hooks/useVirtualTables.js +5 -2
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +6 -7
- package/dist/cjs/models/Filter.d.ts +20 -13
- package/dist/cjs/models/Filter.d.ts.map +1 -1
- package/dist/cjs/models/Filter.js +161 -87
- package/dist/cjs/models/Report.d.ts +12 -1
- package/dist/cjs/models/Report.d.ts.map +1 -1
- package/dist/cjs/models/Schema.d.ts +12 -1
- package/dist/cjs/models/Schema.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.js +22 -22
- package/dist/cjs/utils/astProcessing.d.ts +2 -2
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.js +25 -6
- package/dist/cjs/utils/axisFormatter.d.ts.map +1 -1
- package/dist/cjs/utils/axisFormatter.js +25 -0
- package/dist/cjs/utils/color.d.ts +159 -0
- package/dist/cjs/utils/color.d.ts.map +1 -1
- package/dist/cjs/utils/color.js +14 -5
- package/dist/cjs/utils/columnProcessing.js +3 -3
- package/dist/cjs/utils/constants.d.ts +1 -0
- package/dist/cjs/utils/constants.d.ts.map +1 -1
- package/dist/cjs/utils/constants.js +2 -1
- package/dist/cjs/utils/dashboard.d.ts +13 -3
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +73 -16
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +3 -1
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/filterProcessing.js +9 -9
- package/dist/cjs/utils/getDomain.d.ts +4 -1
- package/dist/cjs/utils/getDomain.d.ts.map +1 -1
- package/dist/cjs/utils/getDomain.js +11 -1
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +7 -6
- package/dist/cjs/utils/queryConstructor.d.ts +1 -1
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +71 -43
- package/dist/cjs/utils/report.d.ts +23 -5
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/report.js +28 -8
- package/dist/cjs/utils/schema.d.ts +26 -3
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/schema.js +75 -43
- package/dist/cjs/utils/tableProcessing.d.ts +10 -3
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +4 -6
- package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/textProcessing.js +0 -1
- package/dist/esm/Chart.d.ts +5 -1
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +52 -29
- package/dist/esm/ChartBuilder.d.ts +13 -1
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +352 -152
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +11 -1
- package/dist/esm/Context.d.ts +16 -4
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +59 -40
- package/dist/esm/Dashboard.d.ts +6 -3
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +71 -29
- package/dist/esm/QuillProvider.d.ts +4 -8
- package/dist/esm/QuillProvider.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.d.ts +1 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +119 -47
- package/dist/esm/SQLEditor.d.ts +7 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +54 -10
- package/dist/esm/Table.d.ts +21 -1
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +34 -196
- package/dist/esm/components/Chart/BarChart.d.ts +5 -1
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.js +5 -4
- package/dist/esm/components/Chart/CustomReferenceLine.d.ts +2 -0
- package/dist/esm/components/Chart/CustomReferenceLine.d.ts.map +1 -0
- package/dist/esm/components/Chart/CustomReferenceLine.js +23 -0
- package/dist/esm/components/Chart/GaugeChart.d.ts +11 -0
- package/dist/esm/components/Chart/GaugeChart.d.ts.map +1 -0
- package/dist/esm/components/Chart/GaugeChart.js +195 -0
- package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/InternalChart.js +14 -11
- package/dist/esm/components/Chart/LineChart.d.ts +5 -1
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +5 -4
- package/dist/esm/components/Chart/MapChart.d.ts +36 -0
- package/dist/esm/components/Chart/MapChart.d.ts.map +1 -0
- package/dist/esm/components/Chart/MapChart.js +541 -0
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +114 -42
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +57 -54
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +5 -1
- package/dist/esm/components/QuillMultiSelectSectionList.js +5 -5
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +5 -4
- package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillSelectWithCombo.js +12 -11
- package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnModal.js +2 -1
- package/dist/esm/components/ReportBuilder/FilterModal.js +14 -14
- package/dist/esm/components/ReportBuilder/FilterStack.d.ts +2 -1
- package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/FilterStack.js +4 -4
- package/dist/esm/components/ReportBuilder/convert.d.ts +2 -0
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +26 -7
- package/dist/esm/components/ReportBuilder/util.d.ts +1 -1
- package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/util.js +15 -2
- package/dist/esm/components/UiComponents.d.ts +4 -1
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +29 -4
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +11 -9
- package/dist/esm/hooks/useExport.d.ts.map +1 -1
- package/dist/esm/hooks/useExport.js +19 -5
- package/dist/esm/hooks/useQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useQuill.js +16 -3
- package/dist/esm/hooks/useReport.d.ts.map +1 -1
- package/dist/esm/hooks/useReport.js +1 -7
- package/dist/esm/hooks/useVirtualTables.d.ts +6 -2
- package/dist/esm/hooks/useVirtualTables.d.ts.map +1 -1
- package/dist/esm/hooks/useVirtualTables.js +6 -3
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +6 -7
- package/dist/esm/models/Filter.d.ts +20 -13
- package/dist/esm/models/Filter.d.ts.map +1 -1
- package/dist/esm/models/Filter.js +160 -86
- package/dist/esm/models/Report.d.ts +12 -1
- package/dist/esm/models/Report.d.ts.map +1 -1
- package/dist/esm/models/Schema.d.ts +12 -1
- package/dist/esm/models/Schema.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.js +23 -23
- package/dist/esm/utils/astProcessing.d.ts +2 -2
- package/dist/esm/utils/astProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.js +25 -6
- package/dist/esm/utils/axisFormatter.d.ts.map +1 -1
- package/dist/esm/utils/axisFormatter.js +25 -0
- package/dist/esm/utils/color.d.ts +159 -0
- package/dist/esm/utils/color.d.ts.map +1 -1
- package/dist/esm/utils/color.js +8 -2
- package/dist/esm/utils/columnProcessing.js +3 -3
- package/dist/esm/utils/constants.d.ts +1 -0
- package/dist/esm/utils/constants.d.ts.map +1 -1
- package/dist/esm/utils/constants.js +1 -0
- package/dist/esm/utils/dashboard.d.ts +13 -3
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +73 -16
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +3 -1
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/filterProcessing.js +10 -10
- package/dist/esm/utils/getDomain.d.ts +4 -1
- package/dist/esm/utils/getDomain.d.ts.map +1 -1
- package/dist/esm/utils/getDomain.js +11 -1
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +7 -6
- package/dist/esm/utils/queryConstructor.d.ts +1 -1
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +71 -43
- package/dist/esm/utils/report.d.ts +23 -5
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/report.js +29 -9
- package/dist/esm/utils/schema.d.ts +26 -3
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/schema.js +74 -43
- package/dist/esm/utils/tableProcessing.d.ts +10 -3
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +4 -6
- package/dist/esm/utils/textProcessing.d.ts.map +1 -1
- package/dist/esm/utils/textProcessing.js +0 -1
- package/package.json +8 -3
|
@@ -18,14 +18,14 @@ function replaceBigQuerySpecialCharacters(column) {
|
|
|
18
18
|
}
|
|
19
19
|
export function processColumnReference(column, databaseType, fallbackOnNull,
|
|
20
20
|
// for mysql, we only want to use double quotes for pivot column field aliases
|
|
21
|
-
|
|
21
|
+
isColumnFieldAlias, isValueFieldAlias) {
|
|
22
22
|
switch (databaseType.toLowerCase()) {
|
|
23
23
|
case 'postgresql':
|
|
24
24
|
case 'clickhouse': {
|
|
25
25
|
if (column === '') {
|
|
26
26
|
return fallbackOnNull ? `"${fallbackOnNull}"` : `"_"`;
|
|
27
27
|
}
|
|
28
|
-
if (
|
|
28
|
+
if (isColumnFieldAlias) {
|
|
29
29
|
return `"${column.replaceAll('"', '')}"`;
|
|
30
30
|
}
|
|
31
31
|
const columnParts = column.split('.');
|
|
@@ -40,7 +40,7 @@ isPivotColumnFieldAlias, isPivotValueFieldAlias) {
|
|
|
40
40
|
if (column === '') {
|
|
41
41
|
return fallbackOnNull ? `${fallbackOnNull}` : '_';
|
|
42
42
|
}
|
|
43
|
-
if (
|
|
43
|
+
if (isColumnFieldAlias) {
|
|
44
44
|
return `\`${column.replaceAll(`\``, '').replaceAll(`"`, '')}\``;
|
|
45
45
|
}
|
|
46
46
|
const columnParts = column.split('.');
|
|
@@ -56,10 +56,10 @@ isPivotColumnFieldAlias, isPivotValueFieldAlias) {
|
|
|
56
56
|
if (column === '') {
|
|
57
57
|
return fallbackOnNull ? `${fallbackOnNull}` : '_';
|
|
58
58
|
}
|
|
59
|
-
if (
|
|
59
|
+
if (isColumnFieldAlias) {
|
|
60
60
|
return `"${column.replaceAll('"', '')}"`;
|
|
61
61
|
}
|
|
62
|
-
if (
|
|
62
|
+
if (isValueFieldAlias) {
|
|
63
63
|
const cleanedColumn = column.replaceAll(')', '').replaceAll('(', '_');
|
|
64
64
|
return `${cleanedColumn}`;
|
|
65
65
|
}
|
|
@@ -73,7 +73,7 @@ isPivotColumnFieldAlias, isPivotValueFieldAlias) {
|
|
|
73
73
|
if (column === '') {
|
|
74
74
|
return fallbackOnNull ? `\`${fallbackOnNull}\`` : '`_`';
|
|
75
75
|
}
|
|
76
|
-
if (
|
|
76
|
+
if (isColumnFieldAlias) {
|
|
77
77
|
return `\`${replaceBigQuerySpecialCharacters(column.replaceAll('`', ''))}\``;
|
|
78
78
|
}
|
|
79
79
|
const columnParts = column.split('.');
|
|
@@ -88,7 +88,7 @@ isPivotColumnFieldAlias, isPivotValueFieldAlias) {
|
|
|
88
88
|
if (column === '') {
|
|
89
89
|
return fallbackOnNull ? `[${fallbackOnNull}]` : `[_]`;
|
|
90
90
|
}
|
|
91
|
-
if (
|
|
91
|
+
if (isColumnFieldAlias) {
|
|
92
92
|
return `[${column.replaceAll(']', '').replaceAll('[', '')}]`;
|
|
93
93
|
}
|
|
94
94
|
const columnParts = column.split('.');
|
|
@@ -165,7 +165,7 @@ export function generateCountQuery(fields, query, databaseType) {
|
|
|
165
165
|
switch (databaseType.toLowerCase()) {
|
|
166
166
|
case 'mysql':
|
|
167
167
|
cte = fields.map((field, index) => {
|
|
168
|
-
return `, distinct_cte_${index} AS (SELECT DISTINCT ${processColumnReference(field, databaseType)} FROM querytable LIMIT ${MAX_PIVOT_UNIQUE_VALUES + 1})`;
|
|
168
|
+
return `, distinct_cte_${index} AS (SELECT DISTINCT ${processColumnReference(field, databaseType, undefined, true)} FROM querytable LIMIT ${MAX_PIVOT_UNIQUE_VALUES + 1})`;
|
|
169
169
|
});
|
|
170
170
|
countQuery = fields.map((field, index) => {
|
|
171
171
|
return `SELECT '${field}' AS ${processColumnReference('field', databaseType)}, COUNT(*) AS ${processColumnReference('count', databaseType)} FROM distinct_cte_${index}`;
|
|
@@ -174,7 +174,7 @@ export function generateCountQuery(fields, query, databaseType) {
|
|
|
174
174
|
break;
|
|
175
175
|
default:
|
|
176
176
|
countQuery = fields.map((field) => {
|
|
177
|
-
return `SELECT '${field}' AS ${processColumnReference('field', databaseType)}, COUNT(DISTINCT ${processColumnReference(field, databaseType)}) AS ${processColumnReference('count', databaseType)} FROM querytable`;
|
|
177
|
+
return `SELECT '${field}' AS ${processColumnReference('field', databaseType)}, COUNT(DISTINCT ${processColumnReference(field, databaseType, undefined, true)}) AS ${processColumnReference('count', databaseType)} FROM querytable`;
|
|
178
178
|
});
|
|
179
179
|
}
|
|
180
180
|
return cteQuery + countQuery.join(' UNION ALL ');
|
|
@@ -293,7 +293,10 @@ function create2DStringPivotQuery(pivot, itemQuery, columnFieldValues, databaseT
|
|
|
293
293
|
if (!isValidBaseQuery || !pivot.columnField || !pivot.rowField)
|
|
294
294
|
return undefined;
|
|
295
295
|
const rowField = pivot.rowField;
|
|
296
|
-
if (!pivot.aggregations?.[0]?.valueField &&
|
|
296
|
+
if (!pivot.aggregations?.[0]?.valueField &&
|
|
297
|
+
pivot.aggregations?.[0]?.aggregationType !== 'count' &&
|
|
298
|
+
!pivot.valueField &&
|
|
299
|
+
pivot.aggregationType !== 'count')
|
|
297
300
|
throw new Error('No value field provided for pivot');
|
|
298
301
|
if (!pivot.aggregations?.[0]?.aggregationType && !pivot.aggregationType)
|
|
299
302
|
throw new Error('No aggregation type provided for pivot');
|
|
@@ -317,7 +320,7 @@ function create2DStringPivotQuery(pivot, itemQuery, columnFieldValues, databaseT
|
|
|
317
320
|
let disambiguationIndex = seenAggs[currentAgg.aggregationType ?? '']?.[currentAgg.valueField ?? '']?.toString();
|
|
318
321
|
if (disambiguationIndex === '1')
|
|
319
322
|
disambiguationIndex = '';
|
|
320
|
-
const valueFieldAlias = processColumnReference(
|
|
323
|
+
const valueFieldAlias = processColumnReference(currentAgg.valueField || rowField || 'count', databaseType, undefined, false, true);
|
|
321
324
|
const valueAliasSubstring = currentAgg.valueField
|
|
322
325
|
? `${processColumnReference(currentAgg.valueField, databaseType, undefined, true)} AS ${valueFieldAlias}`
|
|
323
326
|
: '';
|
|
@@ -340,7 +343,8 @@ function create2DStringPivotQuery(pivot, itemQuery, columnFieldValues, databaseT
|
|
|
340
343
|
const value2Expr = (currentAgg.valueField2Type ?? currentAgg.valueFieldType) === 'bool'
|
|
341
344
|
? `CASE WHEN ${valueField2Alias} THEN 1 ELSE 0 END`
|
|
342
345
|
: valueField2Alias;
|
|
343
|
-
if (currentAgg.valueField === currentAgg.valueField2 ||
|
|
346
|
+
if (currentAgg.valueField === currentAgg.valueField2 ||
|
|
347
|
+
!currentAgg.valueField2) {
|
|
344
348
|
caseWhens = columnFieldValues.map((column) => {
|
|
345
349
|
return `sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${valueExpr} END) / GREATEST(sum(${value2Expr}), 1) AS ${processColumnReference(column + disambiguation, databaseType, '_', true)}`;
|
|
346
350
|
});
|
|
@@ -372,7 +376,7 @@ function create2DStringPivotQuery(pivot, itemQuery, columnFieldValues, databaseT
|
|
|
372
376
|
];
|
|
373
377
|
valueAliases = Array.from(new Set(valueAliases));
|
|
374
378
|
const sortQuery = pivot.sort && pivot.sortField && pivot.rowLimit
|
|
375
|
-
? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType)} ${pivot.sortDirection || ''} `
|
|
379
|
+
? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType, undefined, true)} ${pivot.sortDirection || ''} `
|
|
376
380
|
: '';
|
|
377
381
|
const pivotQuery = `
|
|
378
382
|
,quill_alias AS (
|
|
@@ -401,7 +405,10 @@ function create2DDatePivotQuery(pivot, itemQuery, columnFieldValues, databaseTyp
|
|
|
401
405
|
if (!isValidBaseQuery || !pivot.columnField || !pivot.rowField) {
|
|
402
406
|
return undefined;
|
|
403
407
|
}
|
|
404
|
-
if (!pivot.aggregations?.[0]?.valueField &&
|
|
408
|
+
if (!pivot.aggregations?.[0]?.valueField &&
|
|
409
|
+
pivot.aggregations?.[0]?.aggregationType !== 'count' &&
|
|
410
|
+
!pivot.valueField &&
|
|
411
|
+
pivot.aggregationType !== 'count')
|
|
405
412
|
throw new Error('No value field provided for pivot');
|
|
406
413
|
if (!pivot.aggregations?.[0]?.aggregationType && !pivot.aggregationType)
|
|
407
414
|
throw new Error('No aggregation type provided for pivot');
|
|
@@ -427,12 +434,14 @@ function create2DDatePivotQuery(pivot, itemQuery, columnFieldValues, databaseTyp
|
|
|
427
434
|
let disambiguationIndex = seenAggs[currentAgg.aggregationType ?? '']?.[currentAgg.valueField ?? '']?.toString();
|
|
428
435
|
if (disambiguationIndex === '1')
|
|
429
436
|
disambiguationIndex = '';
|
|
430
|
-
const valueFieldAlias = processColumnReference(
|
|
437
|
+
const valueFieldAlias = processColumnReference(currentAgg.valueField ?? rowField, databaseType, undefined, false, true);
|
|
431
438
|
const valueAliasSubstring = currentAgg.valueField
|
|
432
439
|
? `${processColumnReference(currentAgg.valueField, databaseType, undefined, true)} AS ${valueFieldAlias}`
|
|
433
440
|
: '';
|
|
434
441
|
let value2AliasSubstring = '';
|
|
435
|
-
const disambiguationField = Object.values(seenAggs[currentAgg.aggregationType ?? ''] ?? {}).reduce((acc, v) => acc + v) > 1
|
|
442
|
+
const disambiguationField = Object.values(seenAggs[currentAgg.aggregationType ?? ''] ?? {}).reduce((acc, v) => acc + v) > 1
|
|
443
|
+
? `_${currentAgg.valueField}${disambiguationIndex}`
|
|
444
|
+
: '';
|
|
436
445
|
const disambiguation = pivot.aggregations?.length > 1
|
|
437
446
|
? `${disambiguationField}_${disambiguationField ? matchCasing(currentAgg.aggregationType, currentAgg.valueField) : currentAgg.aggregationType}`
|
|
438
447
|
: '';
|
|
@@ -449,7 +458,8 @@ function create2DDatePivotQuery(pivot, itemQuery, columnFieldValues, databaseTyp
|
|
|
449
458
|
? `CASE WHEN ${valueField2Alias} THEN 1 ELSE 0 END`
|
|
450
459
|
: valueField2Alias;
|
|
451
460
|
// edge case. if the user picks amount and amount, we assume they want a pie chart like breakdown of amount. so the summation of valueField2 has to be moved outside of the case whe
|
|
452
|
-
if (currentAgg.valueField === currentAgg.valueField2 ||
|
|
461
|
+
if (currentAgg.valueField === currentAgg.valueField2 ||
|
|
462
|
+
!currentAgg.valueField2) {
|
|
453
463
|
caseWhens = [
|
|
454
464
|
...caseWhens,
|
|
455
465
|
...columnFieldValues.map((column) => {
|
|
@@ -487,7 +497,7 @@ function create2DDatePivotQuery(pivot, itemQuery, columnFieldValues, databaseTyp
|
|
|
487
497
|
];
|
|
488
498
|
valueFieldAliases = Array.from(new Set(valueFieldAliases));
|
|
489
499
|
// pivot sort matters in the base query when there is a rowLimit. In mssql, an orderby must be accompanied by a limit in a subquery and not allowed in a cte
|
|
490
|
-
const sortQuery = `${pivot.sort && pivot.sortField && pivot.rowLimit ? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType)} ${pivot.sortDirection || ''} ` : ''}`;
|
|
500
|
+
const sortQuery = `${pivot.sort && pivot.sortField && pivot.rowLimit ? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType, undefined, true)} ${pivot.sortDirection || ''} ` : ''}`;
|
|
491
501
|
const pivotQuery = `
|
|
492
502
|
, quill_alias AS (SELECT ${valueFieldAliases.length > 0 ? `${valueFieldAliases.join(', ')}` : ''} FROM quill_base_table),
|
|
493
503
|
quill_qt_agg AS (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${rowFieldAlias}${caseWhens.length > 0 ? `, ${caseWhens.join(', ')}` : ''} FROM quill_alias GROUP BY ${databaseType.toLowerCase() === 'clickhouse' ? processColumnReference(`${rowField}`, databaseType) : processDateTrunc(dateBucket, rowFieldAlias, databaseType)}),
|
|
@@ -534,7 +544,7 @@ function create1DStringPivotQuery(pivot, itemQuery, databaseType) {
|
|
|
534
544
|
if (disambiguationIndex === '1')
|
|
535
545
|
disambiguationIndex = '';
|
|
536
546
|
// This is the alias (from quill_alias CTE) for the field
|
|
537
|
-
const valueFieldAlias = processColumnReference(
|
|
547
|
+
const valueFieldAlias = processColumnReference(currentAgg.valueField || rowField || 'count', databaseType, undefined, false, true);
|
|
538
548
|
// In the base query, we select the raw column.
|
|
539
549
|
const valueAliasSubstring = currentAgg.valueField
|
|
540
550
|
? `${processColumnReference(currentAgg.valueField, databaseType, undefined, true)} AS ${valueFieldAlias}`
|
|
@@ -557,10 +567,13 @@ function create1DStringPivotQuery(pivot, itemQuery, databaseType) {
|
|
|
557
567
|
if ((currentAgg.valueField2Type ?? currentAgg.valueFieldType) === 'bool') {
|
|
558
568
|
value2Expr = `CASE WHEN ${valueField2Alias} THEN 1 ELSE 0 END`;
|
|
559
569
|
}
|
|
560
|
-
value2AliasSubstring =
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
570
|
+
value2AliasSubstring =
|
|
571
|
+
currentAgg.valueField2 &&
|
|
572
|
+
currentAgg.valueField !== currentAgg.valueField2
|
|
573
|
+
? `${processColumnReference(currentAgg.valueField2, databaseType, undefined, true)} AS ${valueField2Alias}`
|
|
574
|
+
: '';
|
|
575
|
+
const percentageExpr = currentAgg.valueField === currentAgg.valueField2 ||
|
|
576
|
+
!currentAgg.valueField2
|
|
564
577
|
? `sum(${valueExpr}) / ${(currentAgg.valueField2Type ?? currentAgg.valueFieldType) === 'bool' ? 'COUNT(*)' : 'SUM(sum(' + valueExpr + ')) OVER ()'}`
|
|
565
578
|
: `sum(${valueExpr}) / GREATEST(sum(${value2Expr}), 1)`;
|
|
566
579
|
quillAggSelects = [
|
|
@@ -581,7 +594,7 @@ function create1DStringPivotQuery(pivot, itemQuery, databaseType) {
|
|
|
581
594
|
});
|
|
582
595
|
valueFieldAliases = Array.from(new Set(valueFieldAliases));
|
|
583
596
|
const sortQuery = `${pivot.sort && pivot.sortField && pivot.rowLimit
|
|
584
|
-
? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType)} ${pivot.sortDirection || ''} `
|
|
597
|
+
? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType, undefined, true)} ${pivot.sortDirection || ''} `
|
|
585
598
|
: ''}`;
|
|
586
599
|
const pivotQuery = `, quill_alias AS (
|
|
587
600
|
SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowAlias}${valueFieldAliases.length > 0 ? `, ${valueFieldAliases.join(', ')}` : ''}
|
|
@@ -606,7 +619,9 @@ function create1DDatePivotQuery(pivot, itemQuery, dateBucket = 'month', database
|
|
|
606
619
|
}
|
|
607
620
|
const rowField = pivot.rowField || '';
|
|
608
621
|
const rowFieldAlias = processColumnReference(rowField, databaseType, undefined);
|
|
609
|
-
let quillAggSelects = [
|
|
622
|
+
let quillAggSelects = [
|
|
623
|
+
`${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${processColumnReference(rowField, databaseType)}`,
|
|
624
|
+
];
|
|
610
625
|
let valueFieldAliases = [];
|
|
611
626
|
const seenAggs = {};
|
|
612
627
|
pivot.aggregations?.forEach((currentAgg) => {
|
|
@@ -625,7 +640,7 @@ function create1DDatePivotQuery(pivot, itemQuery, dateBucket = 'month', database
|
|
|
625
640
|
let disambiguationIndex = seenAggs[currentAgg.aggregationType ?? '']?.[currentAgg.valueField ?? '']?.toString() ?? '';
|
|
626
641
|
if (disambiguationIndex === '1')
|
|
627
642
|
disambiguationIndex = '';
|
|
628
|
-
const valueFieldAlias = processColumnReference(
|
|
643
|
+
const valueFieldAlias = processColumnReference(currentAgg.valueField || rowField || 'count', databaseType, undefined, false, true);
|
|
629
644
|
const valueAliasSubstring = currentAgg.valueField
|
|
630
645
|
? `${processColumnReference(currentAgg.valueField, databaseType, undefined, true)} AS ${valueFieldAlias}`
|
|
631
646
|
: '';
|
|
@@ -643,14 +658,17 @@ function create1DDatePivotQuery(pivot, itemQuery, dateBucket = 'month', database
|
|
|
643
658
|
throw new Error('No value field provided for percentage aggregation');
|
|
644
659
|
}
|
|
645
660
|
const valueField2Alias = processColumnReference(currentAgg.valueField2 ?? currentAgg.valueField, databaseType, undefined, false, true);
|
|
646
|
-
value2AliasSubstring =
|
|
647
|
-
|
|
648
|
-
|
|
661
|
+
value2AliasSubstring =
|
|
662
|
+
currentAgg.valueField2 &&
|
|
663
|
+
currentAgg.valueField !== currentAgg.valueField2
|
|
664
|
+
? `${processColumnReference(currentAgg.valueField2, databaseType, undefined, true)} AS ${valueField2Alias}`
|
|
665
|
+
: '';
|
|
649
666
|
let value2Expr = valueField2Alias;
|
|
650
667
|
if ((currentAgg.valueField2Type ?? currentAgg.valueFieldType) === 'bool') {
|
|
651
668
|
value2Expr = `CASE WHEN ${valueField2Alias} THEN 1 ELSE 0 END`;
|
|
652
669
|
}
|
|
653
|
-
const percentageExpr = currentAgg.valueField === currentAgg.valueField2 ||
|
|
670
|
+
const percentageExpr = currentAgg.valueField === currentAgg.valueField2 ||
|
|
671
|
+
!currentAgg.valueField2
|
|
654
672
|
? `sum(${valueExpr}) / ${(currentAgg.valueField2Type ?? currentAgg.valueFieldType) === 'bool' ? 'COUNT(*)' : 'SUM(sum(' + valueExpr + ')) OVER ()'}`
|
|
655
673
|
: `sum(${valueExpr}) / GREATEST(sum(${value2Expr}), 1)`;
|
|
656
674
|
quillAggSelects = [
|
|
@@ -671,7 +689,7 @@ function create1DDatePivotQuery(pivot, itemQuery, dateBucket = 'month', database
|
|
|
671
689
|
});
|
|
672
690
|
valueFieldAliases = Array.from(new Set(valueFieldAliases));
|
|
673
691
|
// pivot sort matters in the base query when there is a rowLimit. In mssql, an orderby must be accompanied by a limit in a subquery and not allowed in a cte
|
|
674
|
-
const sortQuery = `${pivot.sort && pivot.sortField && pivot.rowLimit ? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType)} ${pivot.sortDirection || ''} ` : ''}`;
|
|
692
|
+
const sortQuery = `${pivot.sort && pivot.sortField && pivot.rowLimit ? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType, undefined, true)} ${pivot.sortDirection || ''} ` : ''}`;
|
|
675
693
|
const pivotQuery = `, quill_alias AS (SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowFieldAlias}${valueFieldAliases.length > 0 ? `, ${valueFieldAliases.join(', ')}` : ''}
|
|
676
694
|
FROM quill_base_table),
|
|
677
695
|
quill_qt_agg AS (SELECT ${quillAggSelects.join(', ')}
|
|
@@ -707,7 +725,7 @@ function createAggregationValuePivot(pivot, itemQuery, databaseType) {
|
|
|
707
725
|
let disambiguationIndex = seenAggs[currentAgg.aggregationType ?? '']?.[currentAgg.valueField ?? '']?.toString() ?? '';
|
|
708
726
|
if (disambiguationIndex === '1')
|
|
709
727
|
disambiguationIndex = '';
|
|
710
|
-
const valueFieldAlias = processColumnReference(
|
|
728
|
+
const valueFieldAlias = processColumnReference(currentAgg.valueField || 'count', databaseType, undefined, false, true);
|
|
711
729
|
const valueAliasSubstring = currentAgg.valueField
|
|
712
730
|
? `${processColumnReference(currentAgg.valueField, databaseType, undefined, true)} AS ${valueFieldAlias}`
|
|
713
731
|
: '';
|
|
@@ -717,9 +735,10 @@ function createAggregationValuePivot(pivot, itemQuery, databaseType) {
|
|
|
717
735
|
: '';
|
|
718
736
|
// If the field type is bool, wrap it in a CASE WHEN
|
|
719
737
|
let valueExpr = !currentAgg.valueField ? '*' : valueFieldAlias;
|
|
720
|
-
valueExpr =
|
|
721
|
-
|
|
722
|
-
|
|
738
|
+
valueExpr =
|
|
739
|
+
currentAgg.valueFieldType === 'bool'
|
|
740
|
+
? `CASE WHEN ${valueFieldAlias} THEN 1 ELSE 0 END`
|
|
741
|
+
: valueExpr;
|
|
723
742
|
if (currentAgg.aggregationType === 'percentage') {
|
|
724
743
|
if (!currentAgg.valueField) {
|
|
725
744
|
throw new Error('No value field provided for percentage aggregation');
|
|
@@ -728,10 +747,13 @@ function createAggregationValuePivot(pivot, itemQuery, databaseType) {
|
|
|
728
747
|
const value2Expr = (currentAgg.valueField2Type ?? currentAgg.valueFieldType) === 'bool'
|
|
729
748
|
? `CASE WHEN ${valueField2Alias} THEN 1 ELSE 0 END`
|
|
730
749
|
: valueField2Alias;
|
|
731
|
-
value2AliasSubstring =
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
750
|
+
value2AliasSubstring =
|
|
751
|
+
currentAgg.valueField2 &&
|
|
752
|
+
currentAgg.valueField !== currentAgg.valueField2
|
|
753
|
+
? `${processColumnReference(currentAgg.valueField2, databaseType, undefined, true)} AS ${valueField2Alias}`
|
|
754
|
+
: '';
|
|
755
|
+
const percentageExpr = currentAgg.valueField === currentAgg.valueField2 ||
|
|
756
|
+
!currentAgg.valueField2
|
|
735
757
|
? `sum(${valueExpr}) / ${(currentAgg.valueField2Type ?? currentAgg.valueFieldType) === 'bool' ? 'COUNT(*)' : 'SUM(sum(' + valueExpr + ')) OVER ()'}`
|
|
736
758
|
: `sum(${valueExpr}) / GREATEST(sum(${value2Expr}), 1)`;
|
|
737
759
|
quillAggSelects = [
|
|
@@ -752,7 +774,7 @@ function createAggregationValuePivot(pivot, itemQuery, databaseType) {
|
|
|
752
774
|
});
|
|
753
775
|
valueFieldAliases = Array.from(new Set(valueFieldAliases));
|
|
754
776
|
const sortQuery = pivot.sort && pivot.sortField && pivot.rowLimit
|
|
755
|
-
? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType)} ${pivot.sortDirection || ''} `
|
|
777
|
+
? ` ORDER BY ${processColumnReference(pivot.sortField, databaseType, undefined, true)} ${pivot.sortDirection || ''} `
|
|
756
778
|
: '';
|
|
757
779
|
const pivotQuery = `, quill_alias AS (
|
|
758
780
|
SELECT ${valueFieldAliases.join(', ')} FROM quill_base_table
|
|
@@ -782,7 +804,13 @@ export function additionalProcessingOnPivotQuery(pivot, query, additionalProcess
|
|
|
782
804
|
}
|
|
783
805
|
if (!pivot.aggregations || pivot.aggregations.length === 0) {
|
|
784
806
|
if (pivot.aggregationType) {
|
|
785
|
-
pivot.aggregations = [
|
|
807
|
+
pivot.aggregations = [
|
|
808
|
+
{
|
|
809
|
+
aggregationType: pivot.aggregationType,
|
|
810
|
+
valueField: pivot.valueField,
|
|
811
|
+
valueField2: pivot.valueField2,
|
|
812
|
+
},
|
|
813
|
+
];
|
|
786
814
|
}
|
|
787
815
|
else {
|
|
788
816
|
throw new Error('No aggregations provided for pivot');
|
|
@@ -806,13 +834,13 @@ export function additionalProcessingOnPivotQuery(pivot, query, additionalProcess
|
|
|
806
834
|
? `_${matchCasing(pivot.aggregations?.[0]?.aggregationType, pivot.aggregations?.[0]?.valueField)}`
|
|
807
835
|
: '';
|
|
808
836
|
if (additionalProcessing.sort) {
|
|
809
|
-
sortQuery = `ORDER BY ${processColumnReference(additionalProcessing.sort.field, databaseType)} ${additionalProcessing.sort.direction || ''}`;
|
|
837
|
+
sortQuery = `ORDER BY ${processColumnReference(additionalProcessing.sort.field, databaseType, undefined, true)} ${additionalProcessing.sort.direction || ''}`;
|
|
810
838
|
}
|
|
811
839
|
else {
|
|
812
840
|
const valueFieldAlias = processColumnReference((pivot.aggregations?.[0]?.valueField ?? '') + disambiguation, databaseType, undefined, false, true);
|
|
813
841
|
const defaultSortField = pivot.sortField || pivot.rowField || valueFieldAlias;
|
|
814
842
|
const defaultSortDirection = pivot.sortDirection || '';
|
|
815
|
-
sortQuery = `ORDER BY ${processColumnReference(defaultSortField, databaseType)} ${defaultSortDirection}`;
|
|
843
|
+
sortQuery = `ORDER BY ${processColumnReference(defaultSortField, databaseType, undefined, true)} ${defaultSortDirection}`;
|
|
816
844
|
}
|
|
817
845
|
const additionalProcessingQuery = `
|
|
818
846
|
SELECT *
|
|
@@ -5,6 +5,7 @@ import { Pivot, PivotData } from '../models/Pivot';
|
|
|
5
5
|
import { QuillReport, QuillReportInternal } from '../models/Report';
|
|
6
6
|
import { DateRangesByColumn, Table, UniqueValuesByTable } from '../models/Tables';
|
|
7
7
|
import { AdditionalProcessing } from './tableProcessing';
|
|
8
|
+
import { CustomField } from '../models/Schema';
|
|
8
9
|
export type ReportBuilderInfo = {
|
|
9
10
|
rows: any[];
|
|
10
11
|
columns: ColumnInternal[];
|
|
@@ -22,19 +23,36 @@ export type ReportBuilderInfo = {
|
|
|
22
23
|
};
|
|
23
24
|
export declare const EMPTY_REPORT: QuillReport;
|
|
24
25
|
export declare const EMPTY_INTERNAL_REPORT: QuillReportInternal;
|
|
25
|
-
export declare function fetchReport(reportId
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
export declare function fetchReport({ reportId, client, tenants, flags, useReportTask, filters, additionalProcessing, dateBucket, customFields, rowsOnly, rowCountOnly, abortSignal, getDefaultDashboardFilters, }: {
|
|
27
|
+
reportId: string;
|
|
28
|
+
client: QuillProviderClient;
|
|
29
|
+
tenants?: {
|
|
30
|
+
tenantField: string;
|
|
31
|
+
tenantIds: (string | number)[];
|
|
32
|
+
}[] | (string | number)[];
|
|
33
|
+
flags?: string[];
|
|
34
|
+
useReportTask?: boolean;
|
|
35
|
+
filters?: any[];
|
|
36
|
+
additionalProcessing?: AdditionalProcessing;
|
|
37
|
+
dateBucket?: string;
|
|
38
|
+
customFields?: any;
|
|
39
|
+
rowsOnly?: boolean;
|
|
40
|
+
rowCountOnly?: boolean;
|
|
41
|
+
abortSignal?: AbortSignal;
|
|
42
|
+
getDefaultDashboardFilters?: boolean;
|
|
43
|
+
}): Promise<{
|
|
29
44
|
report: QuillReportInternal;
|
|
30
45
|
error?: string;
|
|
31
46
|
}>;
|
|
32
|
-
export declare function processReportResponse({ resp, client, filters, dateBucket, additionalProcessing, }: {
|
|
47
|
+
export declare function processReportResponse({ resp, client, filters, dateBucket, additionalProcessing, customFields, }: {
|
|
33
48
|
resp: any;
|
|
34
49
|
client: QuillProviderClient;
|
|
35
50
|
filters?: (DashboardFilter | InternalFilter)[];
|
|
36
51
|
dateBucket?: string;
|
|
37
52
|
additionalProcessing?: AdditionalProcessing;
|
|
53
|
+
customFields?: {
|
|
54
|
+
[tableName: string]: CustomField[];
|
|
55
|
+
} | null;
|
|
38
56
|
}): Promise<QuillReportInternal>;
|
|
39
57
|
export declare function fetchReportInfo(reportId: string, client: QuillProviderClient, tenants?: {
|
|
40
58
|
tenantField: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/utils/report.js
CHANGED
|
@@ -2,7 +2,7 @@ import equal from 'fast-deep-equal';
|
|
|
2
2
|
import { createInitialFormData } from '../ChartBuilder';
|
|
3
3
|
import { getTableNames } from '../components/ReportBuilder/ast';
|
|
4
4
|
import { generatePivotTable } from '../internals/ReportBuilder/PivotModal';
|
|
5
|
-
import {
|
|
5
|
+
import { InternalFilterType } from '../models/Filter';
|
|
6
6
|
import { createBasicSelectASTFromColumns } from './astProcessing';
|
|
7
7
|
import { getYAxisFields } from './columnProcessing';
|
|
8
8
|
import { cleanDashboardItem } from './dashboard';
|
|
@@ -57,10 +57,14 @@ function extractAllReportValuesFromQuillInternalReport(reportInternal) {
|
|
|
57
57
|
queryString: reportInternal.queryString,
|
|
58
58
|
rowCount: reportInternal.rowCount,
|
|
59
59
|
template: reportInternal.template,
|
|
60
|
+
referenceLineYValues: reportInternal.referenceLineYValues,
|
|
61
|
+
referenceLines: reportInternal.referenceLines,
|
|
62
|
+
includeCustomFields: reportInternal.includeCustomFields,
|
|
63
|
+
columnsWithCustomFields: reportInternal.columnsWithCustomFields,
|
|
60
64
|
};
|
|
61
65
|
}
|
|
62
66
|
// TODO: Convert this to take an object rather than a bunch of arguments
|
|
63
|
-
export async function fetchReport(reportId, client, tenants, flags, useReportTask = true, filters = [], additionalProcessing, dateBucket, customFields, rowsOnly, rowCountOnly, abortSignal, getDefaultDashboardFilters) {
|
|
67
|
+
export async function fetchReport({ reportId, client, tenants, flags, useReportTask = true, filters = [], additionalProcessing, dateBucket, customFields, rowsOnly, rowCountOnly, abortSignal, getDefaultDashboardFilters, }) {
|
|
64
68
|
let reportInfo = undefined;
|
|
65
69
|
let errorMessage = undefined;
|
|
66
70
|
try {
|
|
@@ -95,6 +99,7 @@ export async function fetchReport(reportId, client, tenants, flags, useReportTas
|
|
|
95
99
|
filters,
|
|
96
100
|
dateBucket,
|
|
97
101
|
additionalProcessing,
|
|
102
|
+
customFields,
|
|
98
103
|
});
|
|
99
104
|
}
|
|
100
105
|
catch (error) {
|
|
@@ -123,10 +128,10 @@ export async function fetchReport(reportId, client, tenants, flags, useReportTas
|
|
|
123
128
|
}
|
|
124
129
|
return { report: reportInfo || EMPTY_INTERNAL_REPORT, error: errorMessage };
|
|
125
130
|
}
|
|
126
|
-
export async function processReportResponse({ resp, client, filters, dateBucket, additionalProcessing, }) {
|
|
131
|
+
export async function processReportResponse({ resp, client, filters, dateBucket, additionalProcessing, customFields, }) {
|
|
127
132
|
const dashboardItem = {
|
|
128
133
|
...resp,
|
|
129
|
-
filtersApplied: filters?.filter((filter) => filter.filterType in
|
|
134
|
+
filtersApplied: filters?.filter((filter) => filter.filterType in InternalFilterType),
|
|
130
135
|
};
|
|
131
136
|
if (resp.errorMessage) {
|
|
132
137
|
throw new DataLoadError(resp?.errorMessage, {
|
|
@@ -143,7 +148,14 @@ export async function processReportResponse({ resp, client, filters, dateBucket,
|
|
|
143
148
|
parseValueFromBigQueryDates(dashboardItem.compareRows, resp.fields);
|
|
144
149
|
}
|
|
145
150
|
}
|
|
146
|
-
const reportInfo = await cleanDashboardItem(
|
|
151
|
+
const reportInfo = await cleanDashboardItem({
|
|
152
|
+
item: dashboardItem,
|
|
153
|
+
dashboardFilters: filters,
|
|
154
|
+
client,
|
|
155
|
+
dateBucket,
|
|
156
|
+
additionalProcessing,
|
|
157
|
+
customFields,
|
|
158
|
+
});
|
|
147
159
|
if (additionalProcessing) {
|
|
148
160
|
reportInfo.pagination = additionalProcessing.page;
|
|
149
161
|
reportInfo.sort = additionalProcessing.sort;
|
|
@@ -245,8 +257,13 @@ export const formatRowsFromReport = (report, xAxisField, xAxisFormat) => {
|
|
|
245
257
|
if (!report.rows || !report.columns) {
|
|
246
258
|
return [];
|
|
247
259
|
}
|
|
260
|
+
const columns = report.includeCustomFields &&
|
|
261
|
+
report.columnsWithCustomFields &&
|
|
262
|
+
!report.pivot
|
|
263
|
+
? report.columnsWithCustomFields
|
|
264
|
+
: report.columns;
|
|
248
265
|
return report.rows.map((row) => {
|
|
249
|
-
return
|
|
266
|
+
return columns.reduce((formattedRow, column) => {
|
|
250
267
|
// Apply the format function to each field in the row
|
|
251
268
|
const formattedValue = quillFormat({
|
|
252
269
|
value: row[column.field],
|
|
@@ -269,7 +286,8 @@ export function convertInternalReportToReport(report, dashboardFilters, initiato
|
|
|
269
286
|
};
|
|
270
287
|
if (formattedReport.pivot &&
|
|
271
288
|
isValidPivot(formattedReport.pivot).valid &&
|
|
272
|
-
initiator !== 'useQuill'
|
|
289
|
+
initiator !== 'useQuill' &&
|
|
290
|
+
initiator !== 'Table') {
|
|
273
291
|
let columns = report.pivotColumns ?? report.columns;
|
|
274
292
|
let rows = report.pivotRows ?? report.rows;
|
|
275
293
|
if (report.chartType === 'table') {
|
|
@@ -343,7 +361,7 @@ export const fetchReportBuilderDataFromAST = async ({ baseAst, formData, schema,
|
|
|
343
361
|
if (!table || !tableInfo) {
|
|
344
362
|
throw new Error('No table found');
|
|
345
363
|
}
|
|
346
|
-
const tableData = await fetchTableByAST({ ...baseAst, where: formData }, client, tenants, processing ?? { page: DEFAULT_PAGINATION },
|
|
364
|
+
const tableData = await fetchTableByAST({ ...baseAst, where: formData }, client, tenants, processing ?? { page: DEFAULT_PAGINATION }, customFields, skipRowCount, undefined, dashboardName);
|
|
347
365
|
if (tableData.error) {
|
|
348
366
|
throw new Error(tableData.error);
|
|
349
367
|
}
|
|
@@ -371,6 +389,8 @@ export const fetchReportBuilderDataFromAST = async ({ baseAst, formData, schema,
|
|
|
371
389
|
};
|
|
372
390
|
}),
|
|
373
391
|
columnInternal: tableData.columns,
|
|
392
|
+
referenceLines: report?.referenceLines,
|
|
393
|
+
referenceLineYValues: report?.referenceLineYValues,
|
|
374
394
|
};
|
|
375
395
|
if (table !== currentTable || previousFormData !== formData) {
|
|
376
396
|
const queryResult = await fetchSqlQuery({
|
|
@@ -411,7 +431,7 @@ export const fetchReportBuilderDataFromAST = async ({ baseAst, formData, schema,
|
|
|
411
431
|
}
|
|
412
432
|
if (!Object.values(relevantInfo.uniqueStrings[table] ?? {}).length ||
|
|
413
433
|
!equal(formData, previousFormData)) {
|
|
414
|
-
relevantInfo.uniqueStrings[table] = await getUniqueStringValues(tableInfo.columns.filter((column) => column.field === pivot?.columnField), table, client, tenants, customFields, undefined, undefined, query ? query : (report?.queryString ?? ''));
|
|
434
|
+
relevantInfo.uniqueStrings[table] = await getUniqueStringValues(tableInfo.columns.filter((column) => column.field === pivot?.columnField), table, client, tenants, customFields, undefined, undefined, query ? query : (report?.queryString ?? ''), report?.dashboardName);
|
|
415
435
|
}
|
|
416
436
|
newPivotData = await generatePivotTable({
|
|
417
437
|
pivot,
|
|
@@ -1,8 +1,31 @@
|
|
|
1
1
|
import { QuillProviderClient } from '../models/Client';
|
|
2
|
+
import { ColumnInternal } from '../models/Columns';
|
|
3
|
+
import { CustomField } from '../models/Schema';
|
|
2
4
|
import { Table } from '../models/Tables';
|
|
3
|
-
export declare const getCustomFieldInfo: (client
|
|
4
|
-
|
|
5
|
+
export declare const getCustomFieldInfo: ({ client, tenants, caller, }: {
|
|
6
|
+
client: QuillProviderClient;
|
|
7
|
+
tenants: {
|
|
8
|
+
tenantField: string;
|
|
9
|
+
tenantIds: (string | number)[];
|
|
10
|
+
}[] | (string | number)[];
|
|
11
|
+
caller?: string;
|
|
12
|
+
}) => Promise<{
|
|
13
|
+
[tableName: string]: CustomField[];
|
|
14
|
+
} | null>;
|
|
15
|
+
export declare const getSchemaInfo: ({ client, caller, tenants, tableIds, }: {
|
|
16
|
+
client: QuillProviderClient;
|
|
17
|
+
tenants?: {
|
|
18
|
+
tenantField: string;
|
|
19
|
+
tenantIds: (string | number)[];
|
|
20
|
+
}[] | (string | number)[];
|
|
21
|
+
caller?: string;
|
|
22
|
+
tableIds?: string[];
|
|
23
|
+
}) => Promise<{
|
|
5
24
|
schemaData: Table[];
|
|
6
|
-
customFieldsByTable:
|
|
25
|
+
customFieldsByTable: {
|
|
26
|
+
[tableName: string]: CustomField[];
|
|
27
|
+
} | null;
|
|
28
|
+
schemaWithCustomFields: Table[];
|
|
7
29
|
}>;
|
|
30
|
+
export declare const customFieldToColumnInternal: (customField: CustomField) => ColumnInternal;
|
|
8
31
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/utils/schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/utils/schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AA8BzC,eAAO,MAAM,kBAAkB,iCAI5B;IACD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EACH;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,KAAG,OAAO,CAAC;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAAA;CAAE,GAAG,IAAI,CAkFxD,CAAC;AAEF,eAAO,MAAM,aAAa,2CAKvB;IACD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,CAAC,EACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,KAAG,OAAO,CAAC;IACV,UAAU,EAAE,KAAK,EAAE,CAAC;IACpB,mBAAmB,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IACnE,sBAAsB,EAAE,KAAK,EAAE,CAAC;CACjC,CA6DA,CAAC;AA0BF,eAAO,MAAM,2BAA2B,gBACzB,WAAW,KACvB,cAaF,CAAC"}
|