@quillsql/react 2.13.37 → 2.13.39
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 +2 -1
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +1 -2
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +68 -57
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +69 -51
- package/dist/cjs/components/Chart/ChartTooltip.d.ts +1 -1
- package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
- package/dist/cjs/components/Chart/ChartTooltip.js +3 -3
- package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/InternalChart.js +7 -1
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/LineChart.js +4 -4
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +3 -3
- package/dist/cjs/components/ReportBuilder/convert.d.ts +1 -1
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +73 -21
- package/dist/cjs/components/UiComponents.d.ts +2 -1
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +11 -4
- package/dist/cjs/hooks/useExport.d.ts.map +1 -1
- package/dist/cjs/hooks/useExport.js +4 -5
- package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +19 -11
- package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotForm.js +62 -48
- package/dist/cjs/internals/ReportBuilder/PivotList.js +5 -4
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +28 -31
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +315 -633
- package/dist/cjs/models/Pivot.d.ts +27 -7
- package/dist/cjs/models/Pivot.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.js +2 -2
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +36 -11
- package/dist/cjs/utils/merge.d.ts.map +1 -1
- package/dist/cjs/utils/merge.js +2 -1
- package/dist/cjs/utils/pivotConstructor.d.ts +1 -0
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +37 -7
- package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/pivotProcessing.js +10 -14
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +421 -134
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/report.js +2 -2
- package/dist/cjs/utils/textProcessing.d.ts +1 -1
- package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/textProcessing.js +3 -0
- package/dist/esm/Chart.d.ts +2 -1
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +1 -2
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +68 -57
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +69 -51
- package/dist/esm/components/Chart/ChartTooltip.d.ts +1 -1
- package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
- package/dist/esm/components/Chart/ChartTooltip.js +3 -3
- package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/InternalChart.js +7 -1
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/LineChart.js +4 -4
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +3 -3
- package/dist/esm/components/ReportBuilder/convert.d.ts +1 -1
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +74 -22
- package/dist/esm/components/UiComponents.d.ts +2 -1
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +11 -4
- package/dist/esm/hooks/useExport.d.ts.map +1 -1
- package/dist/esm/hooks/useExport.js +4 -5
- package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +19 -11
- package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotForm.js +63 -49
- package/dist/esm/internals/ReportBuilder/PivotList.js +5 -4
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +28 -31
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +327 -635
- package/dist/esm/models/Pivot.d.ts +27 -7
- package/dist/esm/models/Pivot.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.js +2 -2
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +36 -11
- package/dist/esm/utils/merge.d.ts.map +1 -1
- package/dist/esm/utils/merge.js +2 -1
- package/dist/esm/utils/pivotConstructor.d.ts +1 -0
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +37 -8
- package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/esm/utils/pivotProcessing.js +10 -14
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +421 -134
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/report.js +2 -2
- package/dist/esm/utils/textProcessing.d.ts +1 -1
- package/dist/esm/utils/textProcessing.d.ts.map +1 -1
- package/dist/esm/utils/textProcessing.js +3 -0
- package/package.json +1 -1
|
@@ -2,12 +2,8 @@ import { ColumnInternal } from './Columns';
|
|
|
2
2
|
/**
|
|
3
3
|
* Represents the metadata of a pivot table.
|
|
4
4
|
*/
|
|
5
|
-
export type Pivot =
|
|
6
|
-
|
|
7
|
-
valueField: string;
|
|
8
|
-
valueField2?: string;
|
|
9
|
-
valueField2Type?: string;
|
|
10
|
-
valueFieldType?: string;
|
|
5
|
+
export type Pivot = SingleAggregationPivot | MultiAggregationPivot;
|
|
6
|
+
interface BasePivot {
|
|
11
7
|
rowField?: string;
|
|
12
8
|
rowFieldType?: string;
|
|
13
9
|
columnField?: string;
|
|
@@ -20,7 +16,30 @@ export type Pivot = {
|
|
|
20
16
|
triggerButtonText?: string;
|
|
21
17
|
rowLimit?: number;
|
|
22
18
|
columnValues?: string[];
|
|
23
|
-
}
|
|
19
|
+
}
|
|
20
|
+
interface SingleAggregationPivot extends BasePivot {
|
|
21
|
+
aggregationType: AggregationType;
|
|
22
|
+
valueField?: string;
|
|
23
|
+
valueField2?: string;
|
|
24
|
+
valueField2Type?: string;
|
|
25
|
+
valueFieldType?: string;
|
|
26
|
+
aggregations?: never;
|
|
27
|
+
}
|
|
28
|
+
interface MultiAggregationPivot extends BasePivot {
|
|
29
|
+
aggregationType?: never;
|
|
30
|
+
valueField?: never;
|
|
31
|
+
valueField2?: never;
|
|
32
|
+
valueField2Type?: never;
|
|
33
|
+
valueFieldType?: never;
|
|
34
|
+
aggregations: {
|
|
35
|
+
valueField?: string;
|
|
36
|
+
valueFieldType?: string;
|
|
37
|
+
valueField2?: string;
|
|
38
|
+
valueField2Type?: string;
|
|
39
|
+
aggregationType: AggregationType;
|
|
40
|
+
}[];
|
|
41
|
+
}
|
|
42
|
+
export type AggregationType = 'sum' | 'average' | 'min' | 'max' | 'count' | 'avg' | 'percentage';
|
|
24
43
|
export type PivotInfo = {
|
|
25
44
|
pivot: Pivot;
|
|
26
45
|
possibleRowFields: string[];
|
|
@@ -34,4 +53,5 @@ export type PivotData = {
|
|
|
34
53
|
pivotQuery: string;
|
|
35
54
|
comparisonPivotQuery?: string;
|
|
36
55
|
};
|
|
56
|
+
export {};
|
|
37
57
|
//# sourceMappingURL=Pivot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pivot.d.ts","sourceRoot":"","sources":["../../../src/models/Pivot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG;IAClB,
|
|
1
|
+
{"version":3,"file":"Pivot.d.ts","sourceRoot":"","sources":["../../../src/models/Pivot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,sBAAsB,GAAG,qBAAqB,CAAC;AAGnE,UAAU,SAAS;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AACD,UAAU,sBAAuB,SAAQ,SAAS;IAChD,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,KAAK,CAAC;CACtB;AACD,UAAU,qBAAsB,SAAQ,SAAS;IAC/C,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,cAAc,CAAC,EAAE,KAAK,CAAC;IACvB,YAAY,EAAE;QACZ,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,eAAe,CAAC;KAClC,EAAE,CAAC;CACL;AAED,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,YAAY,CAAC;AAEjG,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC"}
|
|
@@ -185,7 +185,7 @@ function getColumnAndTableInfo(tableAliasMap, column, schemaInfo) {
|
|
|
185
185
|
}
|
|
186
186
|
function getColumnsByTableFromASTAndSchema(ast, tables, tableAliasMap) {
|
|
187
187
|
const referencedColumns = {};
|
|
188
|
-
if (ast
|
|
188
|
+
if (ast?.columns === '*' || ast?.columns?.[0]?.expr?.column === '*') {
|
|
189
189
|
// Be sure to select everything from stars
|
|
190
190
|
const tableList = ast.from.map((table) => recursiveSearchByKey(table, 'table'));
|
|
191
191
|
tableList.forEach((table) => {
|
|
@@ -529,7 +529,7 @@ function getTablesHelper(ast, allTables) {
|
|
|
529
529
|
for (const table in referencedColumns) {
|
|
530
530
|
referencedColumns[table] = Array.from(new Set(referencedColumns[table]));
|
|
531
531
|
}
|
|
532
|
-
const referencedTablesAndColumns =
|
|
532
|
+
const referencedTablesAndColumns = onlyReferenceTables.map((tableName) => {
|
|
533
533
|
return {
|
|
534
534
|
name: tableName,
|
|
535
535
|
columns: referencedColumns[tableName]?.map((column) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAcvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA2BzD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,EAAE,mBAAmB,EAC3B,UAAU,CAAC,EAAE,MAAM,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,OAAO,CAAC,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAcvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA2BzD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,EAAE,mBAAmB,EAC3B,UAAU,CAAC,EAAE,MAAM,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,OAAO,CAAC,mBAAmB,CAAC,CA+F9B;AA0ID,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EACJ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;CAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EACvB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,CA6Bd"}
|
|
@@ -50,7 +50,19 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket, ad
|
|
|
50
50
|
let pivotTable;
|
|
51
51
|
let pivotError;
|
|
52
52
|
try {
|
|
53
|
-
pivotTable = await getPivotTable(
|
|
53
|
+
pivotTable = await getPivotTable({
|
|
54
|
+
...item,
|
|
55
|
+
pivot: item.pivot ? {
|
|
56
|
+
...item.pivot,
|
|
57
|
+
aggregations: item.pivot.aggregations ?? [{
|
|
58
|
+
valueField: item.pivot.valueField,
|
|
59
|
+
valueFieldType: item.pivot.valueFieldType,
|
|
60
|
+
valueField2: item.pivot.valueField2,
|
|
61
|
+
valueField2Type: item.pivot.valueField2Type,
|
|
62
|
+
aggregationType: item.pivot.aggregationType,
|
|
63
|
+
}]
|
|
64
|
+
} : undefined,
|
|
65
|
+
}, dashboardFilters, client, dateBucket, additionalProcessing, item.dashboardName);
|
|
54
66
|
}
|
|
55
67
|
catch (e) {
|
|
56
68
|
pivotTable = undefined;
|
|
@@ -78,7 +90,17 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket, ad
|
|
|
78
90
|
pivot: pivotError
|
|
79
91
|
? undefined
|
|
80
92
|
: item.pivot
|
|
81
|
-
? {
|
|
93
|
+
? {
|
|
94
|
+
...item.pivot,
|
|
95
|
+
aggregations: item.pivot.aggregations ?? [{
|
|
96
|
+
valueField: item.pivot.valueField,
|
|
97
|
+
valueFieldType: item.pivot.valueFieldType,
|
|
98
|
+
valueField2: item.pivot.valueField2,
|
|
99
|
+
valueField2Type: item.pivot.valueField2Type,
|
|
100
|
+
aggregationType: item.pivot.aggregationType,
|
|
101
|
+
}],
|
|
102
|
+
columnValues: item.distinctStrings
|
|
103
|
+
}
|
|
82
104
|
: undefined,
|
|
83
105
|
yAxisFields: pivotTable
|
|
84
106
|
? extractPivotedYAxis(pivotTable, item)
|
|
@@ -129,15 +151,18 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
|
|
|
129
151
|
dataTypeID: (0, columnProcessing_1.fieldTypeToDataTypeID)(pivot.rowFieldType || 'string'),
|
|
130
152
|
});
|
|
131
153
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
154
|
+
for (const agg of pivot.aggregations ?? []) {
|
|
155
|
+
if (agg.valueField) {
|
|
156
|
+
columns.push({
|
|
157
|
+
field: agg.valueField,
|
|
158
|
+
label: (0, textProcessing_1.snakeCaseToTitleCase)((0, columnProcessing_1.processColumnName)(agg.valueField)),
|
|
159
|
+
//FIXME: valueFieldType is not always the same as the format
|
|
160
|
+
format: agg.valueFieldType ?? 'whole_number',
|
|
161
|
+
jsType: agg.valueFieldType ?? 'number',
|
|
162
|
+
fieldType: agg.valueFieldType ?? 'number',
|
|
163
|
+
dataTypeID: (0, columnProcessing_1.fieldTypeToDataTypeID)(agg.valueFieldType ?? 'number'),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
141
166
|
}
|
|
142
167
|
return {
|
|
143
168
|
rows: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/utils/merge.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/utils/merge.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMxC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAgBnD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAsBrE;AAyBD,wBAAgB,2BAA2B,CAAC,EAC1C,KAAK,EACL,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,GAAG,EAAE,CAAC;CACjB,GAAG,GAAG,EAAE,CAMR;AAED,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,iBAAiB,GAClB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,GAAG,EAAE,CAyBR"}
|
package/dist/cjs/utils/merge.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.mergeComparisonPivotRows = mergeComparisonPivotRows;
|
|
|
7
7
|
const date_fns_1 = require("date-fns");
|
|
8
8
|
const columnProcessing_1 = require("./columnProcessing");
|
|
9
9
|
const date_fns_tz_1 = require("date-fns-tz");
|
|
10
|
+
// FIXME: Update all of this as part of restoring date comparisons
|
|
10
11
|
function mergeComparisonRange(resp) {
|
|
11
12
|
if (resp.chartType === 'table')
|
|
12
13
|
return resp;
|
|
@@ -94,7 +95,7 @@ function merge2DPivotRows(pivot, rows, compRows, columnFieldValues, databaseType
|
|
|
94
95
|
return merge2DDatePivotRows(pivot, rows, compRows, columnFieldValues, databaseType, dateBucket, comparisonInterval);
|
|
95
96
|
}
|
|
96
97
|
function merge2DStringPivotRows(pivot, rows, compRows, columnFieldValues) {
|
|
97
|
-
if (!pivot.rowField || !pivot.valueField) {
|
|
98
|
+
if (!pivot.rowField || !pivot.aggregations?.some((agg) => agg.valueField)) {
|
|
98
99
|
return rows;
|
|
99
100
|
}
|
|
100
101
|
return rows.map((row) => {
|
|
@@ -19,4 +19,5 @@ export declare function generatePivotWithSQL({ pivot, report, client, dateBucket
|
|
|
19
19
|
comparisonPivotQuery?: string;
|
|
20
20
|
getPivotRowCount?: boolean;
|
|
21
21
|
}): Promise<PivotData>;
|
|
22
|
+
export declare function disambiguatedValueField(pivot: Pivot): string | undefined;
|
|
22
23
|
//# sourceMappingURL=pivotConstructor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAYvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,OAAO,EACP,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,gBAAuB,GACxB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,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,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAYvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,OAAO,EACP,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,gBAAuB,GACxB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,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,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,SAAS,CAAC,CAkWrB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,sBAUnD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generatePivotWithSQL = generatePivotWithSQL;
|
|
4
|
+
exports.disambiguatedValueField = disambiguatedValueField;
|
|
4
5
|
const PivotModal_1 = require("../internals/ReportBuilder/PivotModal");
|
|
5
6
|
const columnProcessing_1 = require("./columnProcessing");
|
|
6
7
|
const constants_1 = require("./constants");
|
|
@@ -18,7 +19,23 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
|
|
|
18
19
|
pivot.columnField &&
|
|
19
20
|
!pivot.columnValues &&
|
|
20
21
|
!distinctStrings) {
|
|
21
|
-
|
|
22
|
+
if (!report?.rows) {
|
|
23
|
+
throw new Error('No distinct strings provided for column field');
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
distinctStrings = Array.from(new Set(report.rows
|
|
27
|
+
.map((row) => row[pivot.columnField])
|
|
28
|
+
.filter((value) => value !== null && value !== undefined)));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (!pivot.aggregations?.length && pivot.aggregationType) {
|
|
32
|
+
pivot.aggregations = [{
|
|
33
|
+
aggregationType: pivot.aggregationType,
|
|
34
|
+
valueField: pivot.valueField,
|
|
35
|
+
valueFieldType: pivot.valueFieldType,
|
|
36
|
+
valueField2: pivot.valueField2,
|
|
37
|
+
valueField2Type: pivot.valueField2Type,
|
|
38
|
+
}];
|
|
22
39
|
}
|
|
23
40
|
let comparisonInterval = undefined;
|
|
24
41
|
if (dateFilter && dateFilter.comparisonRange) {
|
|
@@ -31,7 +48,7 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
|
|
|
31
48
|
const rowColumn = report?.columns.find((column) => column.field === pivot.rowField);
|
|
32
49
|
pivot.rowFieldType = rowColumn?.format || 'string';
|
|
33
50
|
}
|
|
34
|
-
const filteredDistinctStrings = distinctStrings?.filter((value) => value !== null && value !== undefined);
|
|
51
|
+
const filteredDistinctStrings = distinctStrings?.filter((value) => value !== null && value !== undefined && value !== '');
|
|
35
52
|
const pivotColumnFields = filteredDistinctStrings?.slice(0, constants_1.MAX_PIVOT_UNIQUE_VALUES);
|
|
36
53
|
if (!pivotQuery && report) {
|
|
37
54
|
if (!report.itemQuery) {
|
|
@@ -124,12 +141,12 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
|
|
|
124
141
|
});
|
|
125
142
|
}
|
|
126
143
|
const columns = responseFields
|
|
127
|
-
?.map((field) => ({
|
|
144
|
+
?.map((field, index) => ({
|
|
128
145
|
field: (0, columnProcessing_1.processColumnName)(field.name),
|
|
129
146
|
label: (0, textProcessing_1.snakeCaseToTitleCase)((0, columnProcessing_1.processColumnName)(field.name.replace('comparison_', 'comparison '))),
|
|
130
147
|
format: field.name === pivot.rowField
|
|
131
148
|
? 'string'
|
|
132
|
-
: (pivot.
|
|
149
|
+
: (pivot.aggregations?.[index]?.aggregationType === 'percentage')
|
|
133
150
|
? 'percent'
|
|
134
151
|
: 'whole_number',
|
|
135
152
|
fieldType: field.fieldType,
|
|
@@ -217,11 +234,12 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
|
|
|
217
234
|
// });
|
|
218
235
|
// }
|
|
219
236
|
// for the case of count agg on no value field
|
|
220
|
-
columns?.forEach((column) => {
|
|
237
|
+
columns?.forEach((column, index) => {
|
|
221
238
|
if (column.label &&
|
|
222
239
|
['null', 'undefined'].includes(column.label.toLowerCase()) &&
|
|
223
|
-
!pivot.
|
|
224
|
-
pivot.
|
|
240
|
+
!pivot.columnField &&
|
|
241
|
+
!pivot.aggregations?.[index]?.valueField &&
|
|
242
|
+
pivot.aggregations?.[index]?.aggregationType === 'count') {
|
|
225
243
|
column.label = 'Count';
|
|
226
244
|
}
|
|
227
245
|
});
|
|
@@ -243,3 +261,15 @@ async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFil
|
|
|
243
261
|
comparisonPivotQuery: comparisonPivotSql,
|
|
244
262
|
};
|
|
245
263
|
}
|
|
264
|
+
function disambiguatedValueField(pivot) {
|
|
265
|
+
// console.log(pivot);
|
|
266
|
+
if (pivot.aggregations && pivot.aggregations.length > 0) {
|
|
267
|
+
if (pivot.aggregations.length === 1) {
|
|
268
|
+
return pivot.aggregations[0]?.valueField ?? pivot.valueField;
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
return `${pivot.aggregations[0].valueField}_${(0, textProcessing_1.matchCasing)(pivot.aggregations[0].aggregationType, pivot.aggregations[0].valueField)}`;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return pivot.valueField;
|
|
275
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAuCR;AAkBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAuCR;AAkBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAmB7E;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAAE;;;;EAsDjE;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE;IACf,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,GAAG,CAAC;IAClB,WAAW,EAAE,GAAG,CAAC;CAClB,GACA,KAAK,CAoCP;AAED,eAAO,MAAM,eAAe,WAAY,GAAG,SAAS,KAAK,YA8BxD,CAAC"}
|
|
@@ -52,7 +52,7 @@ function generateTwoDPivotQuery(pivot, query, columns) {
|
|
|
52
52
|
FROM original_query GROUP BY ${pivot.rowField}`;
|
|
53
53
|
}
|
|
54
54
|
function isValidPivot(pivot) {
|
|
55
|
-
if (!pivot.rowField && !pivot.valueField) {
|
|
55
|
+
if (!pivot.rowField && !pivot.aggregations?.[0]?.valueField) {
|
|
56
56
|
return {
|
|
57
57
|
valid: false,
|
|
58
58
|
reason: 'Row field cannot be empty without a value field',
|
|
@@ -64,17 +64,7 @@ function isValidPivot(pivot) {
|
|
|
64
64
|
reason: 'Row field cannot be empty when column field is present',
|
|
65
65
|
};
|
|
66
66
|
}
|
|
67
|
-
else if (
|
|
68
|
-
return { valid: false, reason: 'Aggregation type cannot be empty' };
|
|
69
|
-
}
|
|
70
|
-
else if (pivot.aggregationType === 'percentage' &&
|
|
71
|
-
(!pivot.valueField2 || !pivot.valueField)) {
|
|
72
|
-
return {
|
|
73
|
-
valid: false,
|
|
74
|
-
reason: 'Percentage aggregation requires two value fields',
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
else if (!pivot.valueField && pivot.aggregationType !== 'count') {
|
|
67
|
+
else if (pivot.aggregations?.some((a) => a.aggregationType !== 'count' && !a.valueField)) {
|
|
78
68
|
return {
|
|
79
69
|
valid: false,
|
|
80
70
|
reason: 'Value field cannot be empty when aggregation is not "count"',
|
|
@@ -112,9 +102,9 @@ function getPossiblePivotFieldOptions(columns, uniqueValues) {
|
|
|
112
102
|
rowFields.push(column.field);
|
|
113
103
|
}
|
|
114
104
|
}
|
|
115
|
-
// value fields can be numbers
|
|
105
|
+
// value fields can be numbers or bools
|
|
116
106
|
// TODO: should "format" be used as the indicator, or fieldType?
|
|
117
|
-
if (valueFormatter_1.NUMBER_FORMAT_TYPES.includes(column.format)) {
|
|
107
|
+
if (valueFormatter_1.NUMBER_FORMAT_TYPES.includes(column.format) || column.jsType === 'bool') {
|
|
118
108
|
if (!(0, util_1.isIdColumn)(column.field)) {
|
|
119
109
|
valueFields.push(column.field);
|
|
120
110
|
}
|
|
@@ -149,6 +139,12 @@ function cleanPivot(pivot, possibleColumns) {
|
|
|
149
139
|
!possibleColumns.columnFields.includes(pivot.columnField)) {
|
|
150
140
|
pivot.columnField = undefined;
|
|
151
141
|
}
|
|
142
|
+
if (pivot.aggregationType) {
|
|
143
|
+
pivot.aggregations = [{
|
|
144
|
+
valueField: pivot.valueField,
|
|
145
|
+
aggregationType: pivot.aggregationType,
|
|
146
|
+
}];
|
|
147
|
+
}
|
|
152
148
|
return pivot;
|
|
153
149
|
}
|
|
154
150
|
const isPivotPossible = (fields, pivot) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAStE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,UAAQ,UAGrE;AAMD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EAEvB,uBAAuB,CAAC,EAAE,OAAO,EACjC,sBAAsB,CAAC,EAAE,OAAO,UAkGjC;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,UAE1D;AAmBD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,UA8B5B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,UAYnB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAsBrB;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAcrB;AAmFD,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAkBrB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAkBpB;
|
|
1
|
+
{"version":3,"file":"queryConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAStE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,UAAQ,UAGrE;AAMD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EAEvB,uBAAuB,CAAC,EAAE,OAAO,EACjC,sBAAsB,CAAC,EAAE,OAAO,UAkGjC;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,UAE1D;AAmBD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,UA8B5B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,UAYnB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAsBrB;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAcrB;AAmFD,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAkBrB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAkBpB;AA8uBD,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,KAAK,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,YAAY,SAAe,sBAgE5B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,sBAqB1E"}
|