@quillsql/react 2.12.21 → 2.12.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +43 -18
- package/dist/cjs/ChartEditor.js +1 -1
- package/dist/cjs/Dashboard.d.ts +10 -2
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +16 -9
- package/dist/cjs/Table.js +2 -2
- package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/BarChart.js +4 -2
- package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
- package/dist/cjs/components/Chart/ChartTooltip.js +1 -1
- package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +13 -20
- package/dist/cjs/components/QuillTable.d.ts.map +1 -1
- package/dist/cjs/components/QuillTable.js +2 -2
- package/dist/cjs/components/ReportBuilder/convert.d.ts +2 -2
- package/dist/cjs/components/UiComponents.d.ts +6 -1
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +40 -2
- package/dist/cjs/internals/ReportBuilder/PivotList.js +5 -4
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +11 -0
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +8 -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 +112 -4
- package/dist/cjs/utils/errorProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/errorProcessing.js +0 -3
- package/dist/cjs/utils/merge.js +1 -1
- package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/pivotProcessing.js +0 -42
- package/dist/cjs/utils/queryConstructor.d.ts +2 -0
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +124 -1
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +43 -18
- package/dist/esm/ChartEditor.js +1 -1
- package/dist/esm/Dashboard.d.ts +10 -2
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +17 -10
- package/dist/esm/Table.js +2 -2
- package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/BarChart.js +4 -2
- package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
- package/dist/esm/components/Chart/ChartTooltip.js +1 -1
- package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +13 -20
- package/dist/esm/components/QuillTable.d.ts.map +1 -1
- package/dist/esm/components/QuillTable.js +2 -2
- package/dist/esm/components/ReportBuilder/convert.d.ts +2 -2
- package/dist/esm/components/UiComponents.d.ts +6 -1
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +15 -1
- package/dist/esm/internals/ReportBuilder/PivotList.js +5 -4
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +11 -0
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +7 -2
- 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 +113 -5
- package/dist/esm/utils/errorProcessing.d.ts.map +1 -1
- package/dist/esm/utils/errorProcessing.js +0 -3
- package/dist/esm/utils/merge.js +1 -1
- package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/esm/utils/pivotProcessing.js +0 -42
- package/dist/esm/utils/queryConstructor.d.ts +2 -0
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +122 -0
- package/package.json +1 -1
|
@@ -102,6 +102,17 @@ export declare function generatePivotTableYAxis(pivot: Pivot, cols: {
|
|
|
102
102
|
format: AxisFormat;
|
|
103
103
|
}[];
|
|
104
104
|
export declare function generatePivotTitle(pivot: Pivot): string;
|
|
105
|
+
export declare function getDateRange(dateRange: {
|
|
106
|
+
start: Date;
|
|
107
|
+
end: Date;
|
|
108
|
+
} | undefined, column: string, data: any): {
|
|
109
|
+
start: Date;
|
|
110
|
+
end: Date;
|
|
111
|
+
};
|
|
112
|
+
export declare function getDateString(value: string, dateRange?: {
|
|
113
|
+
start: Date;
|
|
114
|
+
end: Date;
|
|
115
|
+
}, dateBucket?: string): string;
|
|
105
116
|
export declare function isDateField(fieldType: string): boolean;
|
|
106
117
|
export declare function generatePivotTable(pivot: Pivot, data: any, dateRange: {
|
|
107
118
|
start: Date;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PivotModal.d.ts","sourceRoot":"","sources":["../../../../src/internals/ReportBuilder/PivotModal.tsx"],"names":[],"mappings":"AAAA,OAAc,EAOZ,SAAS,EACV,MAAM,OAAO,CAAC;AAuBf,OAAO,EACL,oBAAoB,EAKrB,MAAM,+BAA+B,CAAC;AAavC,OAAO,EAAU,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAkBD,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,GAAG,CAAC;IACnB,gBAAgB,EAAE,GAAG,CAAC;IACtB,gBAAgB,EAAE,GAAG,CAAC;IACtB,mBAAmB,EAAE,GAAG,CAAC;IACzB,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,gBAAgB,EAAE,GAAG,CAAC;IACtB,mBAAmB,EAAE,GAAG,CAAC;IACzB,UAAU,EAAE,GAAG,CAAC;IAChB,aAAa,EAAE,GAAG,CAAC;IACnB,aAAa,EAAE,GAAG,CAAC;IACnB,eAAe,EAAE,GAAG,CAAC;IACrB,eAAe,EAAE,GAAG,CAAC;IACrB,aAAa,EAAE,GAAG,CAAC;IACnB,wBAAwB,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IACvE,gBAAgB,EAAE,CAAC,KAAK,EAAE;QACxB,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACrC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAClC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAClC,eAAe,EAAE,SAAS,CAAC;KAC5B,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,eAAe,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IAC3D,cAAc,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IAC1D,aAAa,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IACzD,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IACzE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IACpE,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,KAAK,GAAG,CAAC,OAAO,CAAC;IACvE,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,kBAAkB,EAAE,GAAG,CAAC;IACxB,qBAAqB,EAAE,GAAG,CAAC;IAC3B,WAAW,EAAE,GAAG,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC;IACjB,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,GAAG,CAAC;IACf,SAAS,EAAE,GAAG,CAAC;IACf,aAAa,EAAE,GAAG,CAAC;IACnB,gBAAgB,EAAE,GAAG,CAAC;IACtB,iBAAiB,EAAE,GAAG,CAAC;IACvB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,GAAG,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,GAAG,CAAC;IAC1B,yBAAyB,CAAC,EAAE,GAAG,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,eAAO,MAAM,UAAU,m3BAqDpB,eAAe,
|
|
1
|
+
{"version":3,"file":"PivotModal.d.ts","sourceRoot":"","sources":["../../../../src/internals/ReportBuilder/PivotModal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generatePivotTable = exports.isDateField = exports.generatePivotTitle = exports.generatePivotTableYAxis = exports.PivotModal = void 0;
|
|
3
|
+
exports.generatePivotTable = exports.isDateField = exports.getDateString = exports.getDateRange = exports.generatePivotTitle = exports.generatePivotTableYAxis = exports.PivotModal = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const Context_1 = require("../../Context");
|
|
@@ -138,6 +138,11 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
140
|
}, []);
|
|
141
|
+
(0, react_1.useEffect)(() => {
|
|
142
|
+
if ((pivotRowField && data && columns) || initialSelectedPivotTable) {
|
|
143
|
+
getDistinctValues();
|
|
144
|
+
}
|
|
145
|
+
}, [initialSelectedPivotTable, columns, data, pivotRowField]);
|
|
141
146
|
(0, react_1.useEffect)(() => {
|
|
142
147
|
const pivot = {
|
|
143
148
|
rowField: pivotRowField || '',
|
|
@@ -606,6 +611,7 @@ function getDateRange(dateRange, column, data) {
|
|
|
606
611
|
return dateRange;
|
|
607
612
|
}
|
|
608
613
|
}
|
|
614
|
+
exports.getDateRange = getDateRange;
|
|
609
615
|
function determineIntervalThroughOverride(dateBucket, dateRange) {
|
|
610
616
|
switch (dateBucket) {
|
|
611
617
|
case 'day':
|
|
@@ -702,6 +708,7 @@ function getDateString(value, dateRange, dateBucket) {
|
|
|
702
708
|
fields: [{ field: 'date', format }],
|
|
703
709
|
});
|
|
704
710
|
}
|
|
711
|
+
exports.getDateString = getDateString;
|
|
705
712
|
function isDateField(fieldType) {
|
|
706
713
|
return (fieldType === 'date' ||
|
|
707
714
|
fieldType === 'datetime' ||
|
|
@@ -8,5 +8,5 @@ import { QuillReportInternal } from '../Dashboard';
|
|
|
8
8
|
*/
|
|
9
9
|
export declare function cleanDashboardItem(item: {
|
|
10
10
|
[key: string]: any;
|
|
11
|
-
} | undefined, dashboardFilters: any): QuillReportInternal
|
|
11
|
+
} | undefined, dashboardFilters: any, client?: any, dateBucket?: string): Promise<QuillReportInternal>;
|
|
12
12
|
//# sourceMappingURL=dashboard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAkC5E;;;;;;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,CA+C9B"}
|
|
@@ -4,6 +4,9 @@ exports.cleanDashboardItem = void 0;
|
|
|
4
4
|
const valueFormatter_1 = require("./valueFormatter");
|
|
5
5
|
const PivotModal_1 = require("../internals/ReportBuilder/PivotModal");
|
|
6
6
|
const textProcessing_1 = require("./textProcessing");
|
|
7
|
+
const queryConstructor_1 = require("./queryConstructor");
|
|
8
|
+
const dataFetcher_1 = require("./dataFetcher");
|
|
9
|
+
const date_fns_1 = require("date-fns");
|
|
7
10
|
const defaultDashboardItem = {
|
|
8
11
|
id: '',
|
|
9
12
|
name: '',
|
|
@@ -31,7 +34,7 @@ const defaultDashboardItem = {
|
|
|
31
34
|
* interface to build amazing dashboards on top of.
|
|
32
35
|
* @param item
|
|
33
36
|
*/
|
|
34
|
-
function cleanDashboardItem(item, dashboardFilters) {
|
|
37
|
+
async function cleanDashboardItem(item, dashboardFilters, client, dateBucket) {
|
|
35
38
|
if (!item)
|
|
36
39
|
return defaultDashboardItem;
|
|
37
40
|
if (!item.rows)
|
|
@@ -40,7 +43,7 @@ function cleanDashboardItem(item, dashboardFilters) {
|
|
|
40
43
|
id: item._id,
|
|
41
44
|
name: item.name,
|
|
42
45
|
};
|
|
43
|
-
const pivotTable = getPivotTable(item, dashboardFilters);
|
|
46
|
+
const pivotTable = await getPivotTable(item, dashboardFilters, client, dateBucket);
|
|
44
47
|
const { primaryAggregation, comparisonAggregation, aggregationPercentChange, } = getAggragations(pivotTable, item);
|
|
45
48
|
return {
|
|
46
49
|
id: item._id,
|
|
@@ -109,12 +112,117 @@ function formatAggragation(item, value) {
|
|
|
109
112
|
/**
|
|
110
113
|
* Extract and transform the data from itemInfo.
|
|
111
114
|
*/
|
|
112
|
-
function getPivotTable(report, dashboardFilters) {
|
|
115
|
+
async function getPivotTable(report, dashboardFilters, client, dateBucketInitial) {
|
|
113
116
|
if (!report)
|
|
114
117
|
return undefined;
|
|
115
|
-
|
|
118
|
+
let dateFilter = Object.values(dashboardFilters ?? {}).find((filter) => filter.filterType === 'date_range' || filter.opterator === 'BETWEEN');
|
|
119
|
+
if (dateFilter?.opterator === 'BETWEEN') {
|
|
120
|
+
dateFilter.startDate = dateFilter.value[0];
|
|
121
|
+
dateFilter.endDate = dateFilter.value[1];
|
|
122
|
+
}
|
|
116
123
|
const pivot = report?.pivot;
|
|
117
124
|
const data = report || {};
|
|
125
|
+
if (client && client.databaseType.toLowerCase() === 'postgresql') {
|
|
126
|
+
try {
|
|
127
|
+
let dateRange = undefined;
|
|
128
|
+
let comparisonInterval = undefined;
|
|
129
|
+
let dateBucket = dateBucketInitial;
|
|
130
|
+
if (!dateBucket && pivot.rowFieldType !== 'string' && pivot.rowField) {
|
|
131
|
+
let filterDateRange = undefined;
|
|
132
|
+
if (dateFilter) {
|
|
133
|
+
filterDateRange = {
|
|
134
|
+
start: dateFilter.startDate,
|
|
135
|
+
end: dateFilter.endDate,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
dateRange = (0, PivotModal_1.getDateRange)(filterDateRange, pivot.rowField, data.rows);
|
|
139
|
+
const difference = (0, date_fns_1.differenceInDays)(dateRange.end, dateRange.start);
|
|
140
|
+
if (difference < 14) {
|
|
141
|
+
dateBucket = 'day';
|
|
142
|
+
}
|
|
143
|
+
else if (difference < 60) {
|
|
144
|
+
dateBucket = 'week';
|
|
145
|
+
}
|
|
146
|
+
else if (difference < 365 * 3) {
|
|
147
|
+
dateBucket = 'month';
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
dateBucket = 'year';
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (dateFilter && dateFilter && dateFilter.comparisonRange) {
|
|
154
|
+
const comparisonRange = (0, date_fns_1.differenceInDays)(dateFilter?.comparisonRange.endDate, dateFilter?.comparisonRange.startDate);
|
|
155
|
+
if (!isNaN(comparisonRange)) {
|
|
156
|
+
if (dateBucket === 'month') {
|
|
157
|
+
comparisonInterval = comparisonRange / 30 + ' month';
|
|
158
|
+
}
|
|
159
|
+
else if (dateBucket === 'year') {
|
|
160
|
+
comparisonInterval = comparisonRange / 365 + ' year';
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
comparisonInterval = comparisonRange + ' day';
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
const sqlQuery = (0, queryConstructor_1.generatePivotQuery)(pivot, report.itemQuery, report.rows, dateBucket, comparisonInterval);
|
|
168
|
+
if (sqlQuery && report.rows.length > 0) {
|
|
169
|
+
const hostedBody = {
|
|
170
|
+
metadata: {
|
|
171
|
+
preQueries: [sqlQuery],
|
|
172
|
+
task: 'query',
|
|
173
|
+
orgId: client.customerId || '*',
|
|
174
|
+
clientId: client.publicKey,
|
|
175
|
+
databaseType: client?.databaseType,
|
|
176
|
+
getCustomFields: false,
|
|
177
|
+
runQueryConfig: {
|
|
178
|
+
overridePost: true,
|
|
179
|
+
convertDatatypes: true,
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
const cloudBody = { ...hostedBody };
|
|
184
|
+
const resp = await (0, dataFetcher_1.getData)(client, 'query', 'same-origin', hostedBody, cloudBody);
|
|
185
|
+
// With our current design we have to remove the second row field but leave the first for comparison purposes.
|
|
186
|
+
const rows = resp.queryResults[0].rows;
|
|
187
|
+
const columns = resp.queryResults[0].fields
|
|
188
|
+
.map((field) => ({
|
|
189
|
+
field: field.name,
|
|
190
|
+
label: field.name.replace('comparison_', 'comparison '),
|
|
191
|
+
}))
|
|
192
|
+
.filter((field, index) => field.field !== 'comparison_' + pivot.rowField || index === 0);
|
|
193
|
+
if (pivot.rowFieldType !== 'string') {
|
|
194
|
+
rows.forEach((row) => {
|
|
195
|
+
row[pivot.rowField] = (0, PivotModal_1.getDateString)(row[pivot.rowField], undefined, dateBucket);
|
|
196
|
+
});
|
|
197
|
+
// add a row for each date in the range that doesn't have a value
|
|
198
|
+
if (pivot.rowFieldType !== 'string') {
|
|
199
|
+
const dateSet = new Set(rows.map((row) => row[pivot.rowField]));
|
|
200
|
+
// create a loop that will go through each formatted date and add a row if it doesn't exist going to the current date
|
|
201
|
+
for (let date = dateFilter.startDate; date <= dateFilter.endDate; date = new Date(date.getTime() + 24 * 60 * 60 * 1000)) {
|
|
202
|
+
const formattedDate = (0, PivotModal_1.getDateString)(date.toDateString(), undefined, dateBucket);
|
|
203
|
+
if (!dateSet.has(formattedDate)) {
|
|
204
|
+
const newRow = {};
|
|
205
|
+
newRow[pivot.rowField] = formattedDate;
|
|
206
|
+
rows.push(newRow);
|
|
207
|
+
dateSet.add(formattedDate);
|
|
208
|
+
}
|
|
209
|
+
// order the rows by the date field
|
|
210
|
+
rows.sort((a, b) => {
|
|
211
|
+
return new Date(a[pivot.rowField]) < new Date(b[pivot.rowField])
|
|
212
|
+
? -1
|
|
213
|
+
: 1;
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
rows: rows,
|
|
220
|
+
columns: columns,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch (e) { }
|
|
225
|
+
}
|
|
118
226
|
return pivot && data.rows
|
|
119
227
|
? (0, PivotModal_1.generatePivotTable)(pivot, JSON.parse(JSON.stringify(data.rows)), // deep copy
|
|
120
228
|
dateFilter?.startDate && dateFilter?.endDate
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/errorProcessing.ts"],"names":[],"mappings":"AAAA,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"errorProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/errorProcessing.ts"],"names":[],"mappings":"AAAA,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,QAI/C"}
|
|
@@ -5,8 +5,5 @@ function processFilterErrorList(resp) {
|
|
|
5
5
|
if (!resp || !resp.filterErrorList || !Array.isArray(resp.filterErrorList)) {
|
|
6
6
|
return;
|
|
7
7
|
}
|
|
8
|
-
resp.filterErrorList.forEach((filterError) => {
|
|
9
|
-
console.error(filterError);
|
|
10
|
-
});
|
|
11
8
|
}
|
|
12
9
|
exports.processFilterErrorList = processFilterErrorList;
|
package/dist/cjs/utils/merge.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.mergeComparisonRange = void 0;
|
|
4
4
|
function mergeComparisonRange(resp) {
|
|
5
|
-
if (resp.chartType ===
|
|
5
|
+
if (resp.chartType === 'table')
|
|
6
6
|
return;
|
|
7
7
|
mergeForwards(resp);
|
|
8
8
|
// mergeBackwards(resp); // uncomment to switch back and forth
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAC;AAC9D,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG3D,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAsCR;
|
|
1
|
+
{"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAC;AAC9D,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG3D,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAsCR;AAkBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,WAgBxC;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE;;;;EAsCvC;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,CAqCP"}
|
|
@@ -34,48 +34,6 @@ function pivotToSql(pivot, query, columns) {
|
|
|
34
34
|
return query;
|
|
35
35
|
}
|
|
36
36
|
exports.pivotToSql = pivotToSql;
|
|
37
|
-
function createPivotSqlQuery(rowField, columnField, valueField, aggregationType, query) {
|
|
38
|
-
// const sqlAggregationType = convertToSqlAggregationType(aggregationType);
|
|
39
|
-
return `with query_table as (${query}),
|
|
40
|
-
distinct_column_fields as (
|
|
41
|
-
select distinct
|
|
42
|
-
${columnField}
|
|
43
|
-
from
|
|
44
|
-
query_table
|
|
45
|
-
),
|
|
46
|
-
case_when_query as (
|
|
47
|
-
select
|
|
48
|
-
string_agg(
|
|
49
|
-
concat(
|
|
50
|
-
'${aggregationType}(CASE WHEN ${columnField} = ''',
|
|
51
|
-
replace(${columnField}, '''', ''''''),
|
|
52
|
-
''' THEN ${valueField} ELSE 0 END) AS ',
|
|
53
|
-
concat(concat('"', replace(${columnField}, ' ', '_')), '"')
|
|
54
|
-
),
|
|
55
|
-
',
|
|
56
|
-
'
|
|
57
|
-
) as sql_part
|
|
58
|
-
from
|
|
59
|
-
distinct_column_fields
|
|
60
|
-
),
|
|
61
|
-
joined_queries as (
|
|
62
|
-
select
|
|
63
|
-
concat(
|
|
64
|
-
'WITH query_table as (${query}) SELECT ${rowField}, ',
|
|
65
|
-
sql_part,
|
|
66
|
-
'
|
|
67
|
-
FROM query_table
|
|
68
|
-
GROUP BY ${rowField}
|
|
69
|
-
ORDER BY ${rowField}'
|
|
70
|
-
) as query
|
|
71
|
-
from
|
|
72
|
-
case_when_query
|
|
73
|
-
)
|
|
74
|
-
select
|
|
75
|
-
query
|
|
76
|
-
from
|
|
77
|
-
joined_queries;`;
|
|
78
|
-
}
|
|
79
37
|
function generateTwoDPivotQuery(pivot, query, columns) {
|
|
80
38
|
const caseWhens = columns.map((column) => {
|
|
81
39
|
return `${pivot.aggregationType}(
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
+
import { Pivot } from '../internals/ReportBuilder/PivotModal';
|
|
1
2
|
export declare function generateDistinctQuery(stringFields: string[], query: string): string;
|
|
3
|
+
export declare function generatePivotQuery(pivot: Pivot, itemQueries: string[], rows: any[], dateBucket?: string, comparisonInterval?: string): string | undefined;
|
|
2
4
|
//# sourceMappingURL=queryConstructor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,UAQ1E"}
|
|
1
|
+
{"version":3,"file":"queryConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAC;AAe9D,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,UAQ1E;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,IAAI,EAAE,GAAG,EAAE,EACX,UAAU,CAAC,EAAE,MAAM,EACnB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,MAAM,GAAG,SAAS,CAiBpB"}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateDistinctQuery = void 0;
|
|
3
|
+
exports.generatePivotQuery = exports.generateDistinctQuery = void 0;
|
|
4
|
+
const pivotProcessing_1 = require("./pivotProcessing");
|
|
5
|
+
function processAggType(aggType) {
|
|
6
|
+
if (aggType === 'count')
|
|
7
|
+
return 'SUM';
|
|
8
|
+
return aggType?.toLowerCase() === 'average' ? 'AVG' : aggType?.toLowerCase();
|
|
9
|
+
}
|
|
10
|
+
function processValueField(aggType, valueField) {
|
|
11
|
+
if (aggType === 'min' || aggType === 'max')
|
|
12
|
+
return `"${valueField}" ELSE null`;
|
|
13
|
+
if (aggType === 'count')
|
|
14
|
+
return `1 ELSE 0`;
|
|
15
|
+
return valueField ? `"${valueField}" ELSE 0` : `1 ELSE 0`;
|
|
16
|
+
}
|
|
4
17
|
function generateDistinctQuery(stringFields, query) {
|
|
5
18
|
const distinctQueries = stringFields.map((field) => {
|
|
6
19
|
return `SELECT '${field}' AS field, ARRAY_AGG(DISTINCT ${field}) AS string_values FROM querytable`;
|
|
@@ -9,3 +22,113 @@ function generateDistinctQuery(stringFields, query) {
|
|
|
9
22
|
return `WITH querytable AS (${query.replace(';', '')}) ` + distinctQuery;
|
|
10
23
|
}
|
|
11
24
|
exports.generateDistinctQuery = generateDistinctQuery;
|
|
25
|
+
function generatePivotQuery(pivot, itemQueries, rows, dateBucket, comparisonInterval) {
|
|
26
|
+
if (!(0, pivotProcessing_1.isValidPivot)(pivot)) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
if (!pivot.rowField) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
if (pivot.columnField) {
|
|
33
|
+
return create2DPivotQuery(pivot, itemQueries, rows, dateBucket, comparisonInterval);
|
|
34
|
+
}
|
|
35
|
+
return create1DPivotQuery(pivot, itemQueries, dateBucket, comparisonInterval);
|
|
36
|
+
}
|
|
37
|
+
exports.generatePivotQuery = generatePivotQuery;
|
|
38
|
+
function create2DPivotQuery(pivot, itemQueries, rows, dateBucket, comparisonInterval) {
|
|
39
|
+
if (!pivot || !pivot.columnField) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
const columnValues = rows.map((row) => row[pivot.columnField]);
|
|
44
|
+
const distinctColumnValues = Array.from(new Set(columnValues)).filter((value) => value !== undefined && value !== null);
|
|
45
|
+
if (distinctColumnValues.length === 0) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
if (pivot.rowFieldType === 'string') {
|
|
49
|
+
return create2DStringPivotQuery(pivot, itemQueries, distinctColumnValues);
|
|
50
|
+
}
|
|
51
|
+
return create2DDatePivotQuery(pivot, itemQueries, distinctColumnValues, dateBucket, comparisonInterval);
|
|
52
|
+
}
|
|
53
|
+
function create2DStringPivotQuery(pivot, itemQueries, distinctColumnValues) {
|
|
54
|
+
const caseWhens = distinctColumnValues.map((column) => {
|
|
55
|
+
return `${processAggType(pivot.aggregationType)}(CASE WHEN "${pivot.columnField}" = '${column.replaceAll("'", "''")}' THEN ${processValueField(pivot.aggregationType, pivot.valueField)} END) AS "${column}"`;
|
|
56
|
+
});
|
|
57
|
+
const caseWhensCompare = distinctColumnValues.map((column) => {
|
|
58
|
+
return `${processAggType(pivot.aggregationType)}(CASE WHEN "${pivot.columnField}" = '${column.replaceAll("'", "''")}' THEN ${processValueField(pivot.aggregationType, pivot.valueField)} END) AS "comparison_${column}"`;
|
|
59
|
+
});
|
|
60
|
+
const compareCTE = itemQueries[1]
|
|
61
|
+
? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
|
|
62
|
+
: '';
|
|
63
|
+
const compareCaseWhenCTE = itemQueries[1]
|
|
64
|
+
? `, quill_ct_cw as (SELECT "${pivot.rowField}" as "comparison_${pivot.rowField}", ${caseWhensCompare.join(', ')} FROM quill_ct GROUP BY ${pivot.rowField})`
|
|
65
|
+
: '';
|
|
66
|
+
const joinQuery = itemQueries[1]
|
|
67
|
+
? `JOIN quill_ct_cw ct ON ct."comparison_${pivot.rowField}" = qt."${pivot.rowField}"`
|
|
68
|
+
: '';
|
|
69
|
+
return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
|
|
70
|
+
quill_qt_cw AS (SELECT ${pivot.rowField}, ${caseWhens.join(', ')} FROM quill_qt GROUP BY ${pivot.rowField})
|
|
71
|
+
${compareCTE} ${compareCaseWhenCTE}
|
|
72
|
+
SELECT * FROM quill_qt_cw qt
|
|
73
|
+
${joinQuery}`;
|
|
74
|
+
}
|
|
75
|
+
function create2DDatePivotQuery(pivot, itemQueries, distinctColumnValues, dateBucket = 'month', comparisonInterval) {
|
|
76
|
+
const caseWhens = distinctColumnValues.map((column) => {
|
|
77
|
+
return `${processAggType(pivot.aggregationType)}(CASE WHEN qt."${pivot.columnField}" = '${column.replaceAll("'", "''")}' THEN ${processValueField(pivot.aggregationType, pivot.valueField)} END) AS "${column}"`;
|
|
78
|
+
});
|
|
79
|
+
const caseWhensCompare = distinctColumnValues.map((column) => {
|
|
80
|
+
return `${processAggType(pivot.aggregationType)}(CASE WHEN "${pivot.columnField}" = '${column.replaceAll("'", "''")}' THEN ${processValueField(pivot.aggregationType, pivot.valueField)} END) AS "comparison_${column}"`;
|
|
81
|
+
});
|
|
82
|
+
const compareCTE = itemQueries[1] && comparisonInterval
|
|
83
|
+
? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
|
|
84
|
+
: '';
|
|
85
|
+
const compareCaseWhenCTE = itemQueries[1] && comparisonInterval
|
|
86
|
+
? `, quill_ct_cw as (SELECT date_trunc('${dateBucket}', ${pivot.rowField}) as comparison_${pivot.rowField}, ${caseWhensCompare.join(', ')} FROM quill_ct GROUP BY date_trunc('${dateBucket}', ${pivot.rowField}))`
|
|
87
|
+
: '';
|
|
88
|
+
const joinQuery = itemQueries[1] && comparisonInterval
|
|
89
|
+
? `LEFT JOIN quill_ct_cw ct ON qt."${pivot.rowField}" = date_trunc('${dateBucket}', (ct."comparison_${pivot.rowField}" + INTERVAL '${comparisonInterval} day'))`
|
|
90
|
+
: '';
|
|
91
|
+
return `WITH quill_query_table AS (${itemQueries[0]?.replaceAll(';', '')}),
|
|
92
|
+
quill_qt_agg as (SELECT date_trunc('${dateBucket}', ${pivot.rowField}) as ${pivot.rowField}, ${caseWhens.join(', ')} FROM quill_query_table qt GROUP BY date_trunc('${dateBucket}', ${pivot.rowField}))
|
|
93
|
+
${compareCTE} ${compareCaseWhenCTE}
|
|
94
|
+
SELECT * FROM quill_qt_agg qt
|
|
95
|
+
${joinQuery} ORDER BY qt."${pivot.rowField}"`;
|
|
96
|
+
}
|
|
97
|
+
function create1DPivotQuery(pivot, itemQueries, dateBucket = 'month', comparisonInterval) {
|
|
98
|
+
if (pivot.rowFieldType === 'string') {
|
|
99
|
+
return create1DStringPivotQuery(pivot, itemQueries);
|
|
100
|
+
}
|
|
101
|
+
return create1DDatePivotQuery(pivot, itemQueries, dateBucket, comparisonInterval);
|
|
102
|
+
}
|
|
103
|
+
function create1DStringPivotQuery(pivot, itemQueries) {
|
|
104
|
+
const compareCTE = itemQueries[1]
|
|
105
|
+
? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
|
|
106
|
+
: '';
|
|
107
|
+
const compareCaseWhenCTE = itemQueries[1]
|
|
108
|
+
? `, quill_ct_cw as (SELECT ${pivot.rowField} as "comparison_${pivot.rowField}", ${processAggType(pivot.aggregationType)}(${pivot.valueField}) as comparison_${pivot.valueField} FROM quill_ct GROUP BY ${pivot.rowField})`
|
|
109
|
+
: '';
|
|
110
|
+
const joinQuery = itemQueries[1]
|
|
111
|
+
? `JOIN quill_ct_cw ct ON ct."comparison_${pivot.rowField}" = qt."${pivot.rowField}"`
|
|
112
|
+
: '';
|
|
113
|
+
return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
|
|
114
|
+
quill_qt_cw AS (SELECT ${pivot.rowField}, ${processAggType(pivot.aggregationType)}(${pivot.valueField}) as ${pivot.valueField} FROM quill_qt GROUP BY ${pivot.rowField})
|
|
115
|
+
${compareCTE} ${compareCaseWhenCTE}
|
|
116
|
+
SELECT * FROM quill_qt_cw qt
|
|
117
|
+
${joinQuery}`;
|
|
118
|
+
}
|
|
119
|
+
function create1DDatePivotQuery(pivot, itemQueries, dateBucket = 'month', comparisonInterval) {
|
|
120
|
+
const compareCTE = itemQueries[1] && comparisonInterval
|
|
121
|
+
? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
|
|
122
|
+
: '';
|
|
123
|
+
const compareCaseWhenCTE = itemQueries[1] && comparisonInterval
|
|
124
|
+
? `, quill_ct_cw as (SELECT date_trunc('${dateBucket}', ${pivot.rowField}) as comparison_${pivot.rowField}, ${processAggType(pivot.aggregationType)}(${pivot.valueField}) as comparison_${pivot.valueField} FROM quill_ct GROUP BY date_trunc('${dateBucket}', ${pivot.rowField}))`
|
|
125
|
+
: '';
|
|
126
|
+
const joinQuery = itemQueries[1] && comparisonInterval
|
|
127
|
+
? `LEFT JOIN quill_ct_cw ct ON qt."${pivot.rowField}" = date_trunc('${dateBucket}', (ct."comparison_${pivot.rowField}" + INTERVAL '${comparisonInterval}'))`
|
|
128
|
+
: '';
|
|
129
|
+
return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
|
|
130
|
+
quill_qt_agg AS (SELECT date_trunc('${dateBucket}', ${pivot.rowField}) as ${pivot.rowField}, ${processAggType(pivot.aggregationType)}(${pivot.valueField}) as ${pivot.valueField} FROM quill_qt GROUP BY date_trunc('${dateBucket}', ${pivot.rowField}))
|
|
131
|
+
${compareCTE} ${compareCaseWhenCTE}
|
|
132
|
+
SELECT * FROM quill_qt_agg qt
|
|
133
|
+
${joinQuery} ORDER BY qt."${pivot.rowField}"`;
|
|
134
|
+
}
|
package/dist/esm/Chart.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAe7C,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AA6DzC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAe7C,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AA6DzC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,WA4F5D;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,WAKlE;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC;CACH,CAAC;AAeF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,WAAW,GAAG,GAAG,CAAC;IAE3B;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;IAEtC;;OAEG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC;;OAEG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAEnC;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAEzC;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAE5C;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,KAAK,YAAY,CAAC;IAE7E;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IAErC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAErC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,qEAAqE;IACrE,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAE1C,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,KAAK,UAAW,UAAU,4CAgD/B,CAAC;AA+yBF,eAAe,KAAK,CAAC"}
|
package/dist/esm/Chart.js
CHANGED
|
@@ -66,12 +66,34 @@ export function isEquivalent(filters1, filters2) {
|
|
|
66
66
|
return false;
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
+
else if (filter1?.operator === 'BETWEEN' &&
|
|
70
|
+
filter2?.operator === 'BETWEEN') {
|
|
71
|
+
if (!filter1?.values && !filter2?.values) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
else if (!filter1?.values || !filter2?.values) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
if (filter1?.values && filter2?.values) {
|
|
78
|
+
if (!areDatesNearby(filter1.values[0], filter2.values[0]) ||
|
|
79
|
+
!areDatesNearby(filter1.values[1], filter2.values[1])) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
69
84
|
else if (filterType === 'date_range') {
|
|
85
|
+
if (!filter1.startDate && !filter2.startDate) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
70
88
|
if (!areDatesNearby(filter1.startDate, filter2.startDate) ||
|
|
71
89
|
!areDatesNearby(filter1.endDate, filter2.endDate)) {
|
|
72
90
|
return false;
|
|
73
91
|
}
|
|
74
92
|
if (filter1.comparisonRange && filter2.comparisonRange) {
|
|
93
|
+
if (!filter1.comparisonRange.startDate &&
|
|
94
|
+
!filter2.comparisonRange.endDate) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
75
97
|
if (!areDatesNearby(filter1.comparisonRange.startDate, filter2.comparisonRange.startDate) ||
|
|
76
98
|
!areDatesNearby(filter1.comparisonRange.endDate, filter2.comparisonRange.endDate)) {
|
|
77
99
|
return false;
|
|
@@ -225,7 +247,7 @@ const ChartUpdater = ({ colors, reportId, className, containerStyle, isAnimation
|
|
|
225
247
|
...resp,
|
|
226
248
|
filtersApplied: minimalFilters.filter((f) => f.dashboardName === dashboard[reportId].dashboardName),
|
|
227
249
|
};
|
|
228
|
-
const cleanedReport = cleanDashboardItem(dashboardItem, filters);
|
|
250
|
+
const cleanedReport = await cleanDashboardItem(dashboardItem, filters);
|
|
229
251
|
setReport(cleanedReport);
|
|
230
252
|
dispatch({
|
|
231
253
|
type: 'UPDATE_DASHBOARD_ITEM',
|
|
@@ -310,7 +332,7 @@ const ChartUpdater = ({ colors, reportId, className, containerStyle, isAnimation
|
|
|
310
332
|
...resp,
|
|
311
333
|
filtersApplied: minimalFilters.filter((f) => f.dashboardName === dashboard[reportId].dashboardName),
|
|
312
334
|
};
|
|
313
|
-
const cleanedReport = cleanDashboardItem(dashboardItem, filters);
|
|
335
|
+
const cleanedReport = await cleanDashboardItem(dashboardItem, filters);
|
|
314
336
|
if (cleanedReport.chartType === 'table' && cleanedReport.pivot) {
|
|
315
337
|
cleanedReport.columns = cleanedReport.yAxisFields;
|
|
316
338
|
}
|
|
@@ -356,6 +378,8 @@ const ChartDisplay = ({ reportId, config, colors, className, containerStyle, hid
|
|
|
356
378
|
: ['#4E80EE', '#E14F62', '#55B5A6', '#E9A23B', '#6466E9', '#55B685'];
|
|
357
379
|
}, [colors]);
|
|
358
380
|
const rows = config?.pivotRows ?? config?.rows ?? [];
|
|
381
|
+
const dateFilter = !hideDateRangeFilter &&
|
|
382
|
+
findAndProcessDateFilter(Object.values(specificDashboardFilter ?? []));
|
|
359
383
|
const getYAxisFields = () => {
|
|
360
384
|
if (config && config.pivot && config.pivot.columnField) {
|
|
361
385
|
return (config?.pivotColumns
|
|
@@ -376,12 +400,25 @@ const ChartDisplay = ({ reportId, config, colors, className, containerStyle, hid
|
|
|
376
400
|
}) ?? []);
|
|
377
401
|
}
|
|
378
402
|
else {
|
|
403
|
+
if (dateFilter?.comparison &&
|
|
404
|
+
dateFilter.comparisonRange.value !== 'NO_COMPARISON') {
|
|
405
|
+
const comparisonYAxisFields = config?.yAxisFields?.map((field) => {
|
|
406
|
+
return {
|
|
407
|
+
...field,
|
|
408
|
+
field: `comparison_${field.field}`,
|
|
409
|
+
label: `comparison ${field.label ?? field.field}`,
|
|
410
|
+
};
|
|
411
|
+
});
|
|
412
|
+
return (config?.pivotColumns ?? [
|
|
413
|
+
...config?.yAxisFields,
|
|
414
|
+
...comparisonYAxisFields,
|
|
415
|
+
] ??
|
|
416
|
+
[]);
|
|
417
|
+
}
|
|
379
418
|
return config?.pivotColumns ?? config?.yAxisFields ?? [];
|
|
380
419
|
}
|
|
381
420
|
};
|
|
382
421
|
const yAxisFields = getYAxisFields();
|
|
383
|
-
const dateFilter = !hideDateRangeFilter &&
|
|
384
|
-
findAndProcessDateFilter(Object.values(specificDashboardFilter ?? []));
|
|
385
422
|
if (error) {
|
|
386
423
|
return _jsx(ChartError, { className: className, containerStyle: containerStyle });
|
|
387
424
|
}
|
|
@@ -462,19 +499,6 @@ const ChartDisplay = ({ reportId, config, colors, className, containerStyle, hid
|
|
|
462
499
|
if (chartTypes.includes('bar')) {
|
|
463
500
|
return (_jsx(BarList, { data: rows, theme: theme, yAxisFields: yAxisFields, colors: chartColors, xAxisField: config.xAxisField, xAxisFormat: config.xAxisFormat, containerStyle: containerStyle, className: className, colorMap: colorMap, onClickChartElement: onClickChartElement }));
|
|
464
501
|
}
|
|
465
|
-
if (yAxisFields.length === 1) {
|
|
466
|
-
if (yAxisFields[0].label === '' && yAxisFields.length === 1) {
|
|
467
|
-
yAxisFields[0].label = yAxisFields[0].label;
|
|
468
|
-
}
|
|
469
|
-
if (dateFilter?.comparison) {
|
|
470
|
-
const sampleField = yAxisFields[0];
|
|
471
|
-
yAxisFields[yAxisFields.length] = {
|
|
472
|
-
...sampleField,
|
|
473
|
-
field: `comparison_${sampleField?.field}`,
|
|
474
|
-
label: `comparison ${sampleField?.label}`,
|
|
475
|
-
};
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
502
|
if (chartTypes.includes('column')) {
|
|
479
503
|
// Autofill the column chart with an empty column if there are no rows
|
|
480
504
|
let barChartData = rows;
|
|
@@ -500,7 +524,8 @@ const ChartDisplay = ({ reportId, config, colors, className, containerStyle, hid
|
|
|
500
524
|
break;
|
|
501
525
|
}
|
|
502
526
|
}
|
|
503
|
-
return (_jsx(BarChart, { colors: chartColors, theme: theme, isStacked: config.pivot && yAxisFields.length > (dateFilter?.comparison ? 2 : 1), yAxisFields: yAxisFields, data: barChartData, xAxisField: config.xAxisField, xAxisLabel: config.xAxisLabel, xAxisFormat: xAxisFormat, containerStyle: containerStyle, className: className, comparison: dateFilter?.comparison
|
|
527
|
+
return (_jsx(BarChart, { colors: chartColors, theme: theme, isStacked: config.pivot && yAxisFields.length > (dateFilter?.comparison ? 2 : 1), yAxisFields: yAxisFields, data: barChartData, xAxisField: config.xAxisField, xAxisLabel: config.xAxisLabel, xAxisFormat: xAxisFormat, containerStyle: containerStyle, className: className, comparison: dateFilter?.comparison &&
|
|
528
|
+
dateFilter.comparisonRange.value !== 'NO_COMPARISON', isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, colorMap: colorMap, onClickChartElement: onClickChartElement, dateFilter: dateFilter }));
|
|
504
529
|
}
|
|
505
530
|
if (chartTypes.includes('metric')) {
|
|
506
531
|
const isComparison = rows?.length > 0 &&
|
package/dist/esm/ChartEditor.js
CHANGED
|
@@ -150,7 +150,7 @@ export default function ChartEditor({ isOpen, reportId, isAdmin = false, destina
|
|
|
150
150
|
...resp,
|
|
151
151
|
filtersApplied: specificDashboardFilter,
|
|
152
152
|
};
|
|
153
|
-
const cleanedReport = cleanDashboardItem(curDashboardItem, specificDashboardFilter);
|
|
153
|
+
const cleanedReport = await cleanDashboardItem(curDashboardItem, specificDashboardFilter);
|
|
154
154
|
setDashboardItem({ ...dashboardItem, ...cleanedReport });
|
|
155
155
|
dispatch({
|
|
156
156
|
type: 'UPDATE_DASHBOARD_ITEM',
|
package/dist/esm/Dashboard.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { ReactNode, ChangeEvent } from 'react';
|
|
1
|
+
import React, { CSSProperties, ReactNode, ChangeEvent } from 'react';
|
|
2
2
|
import { Column } from './models/Columns';
|
|
3
3
|
import { Filter } from './models/Filter';
|
|
4
4
|
/**
|
|
@@ -231,6 +231,14 @@ export interface DashboardProps {
|
|
|
231
231
|
}) => JSX.Element;
|
|
232
232
|
/** A fallback component displayed when an active dashboard has no items. */
|
|
233
233
|
EmptyDashboardComponent?: () => JSX.Element;
|
|
234
|
+
/** A component that displays a loading state for charts. */
|
|
235
|
+
DashboardLoadingComponent?: ({ showFilterLoading, numCharts, containerStyle, chartContainerStyle, LoadingComponent, }: {
|
|
236
|
+
showFilterLoading?: boolean;
|
|
237
|
+
numCharts?: number;
|
|
238
|
+
containerStyle?: CSSProperties;
|
|
239
|
+
chartContainerStyle?: CSSProperties;
|
|
240
|
+
LoadingComponent?: () => JSX.Element;
|
|
241
|
+
}) => JSX.Element;
|
|
234
242
|
/** A callback fired when a report is clicked. */
|
|
235
243
|
onClickReport?: (report: QuillReport) => void;
|
|
236
244
|
/** A callback that is fired when the loading status of the dashboard changes. */
|
|
@@ -306,5 +314,5 @@ export interface DashboardProps {
|
|
|
306
314
|
* ### API Reference
|
|
307
315
|
* @see https://docs.quillsql.com/components/dashboard
|
|
308
316
|
*/
|
|
309
|
-
export default function Dashboard({ name, hidden, SelectComponent, MultiSelectComponent, EmptyDashboardComponent, DateRangePickerComponent, MetricComponent, ChartComponent, TableComponent, DashboardSectionComponent, DashboardSectionContainerComponent, FilterContainerComponent, onClickReport, onChangeLoading, hideFilters, hideDateRangeFilter, hideXAxis, hideYAxis, hideCartesianGrid, comparisonLineStyle, containerStyle, className, chartContainerStyle, filters, onClickChartElement, dateBucket, additionalProcessing, }: DashboardProps): import("react/jsx-runtime").JSX.Element | null;
|
|
317
|
+
export default function Dashboard({ name, hidden, SelectComponent, MultiSelectComponent, EmptyDashboardComponent, DateRangePickerComponent, MetricComponent, ChartComponent, TableComponent, DashboardSectionComponent, DashboardSectionContainerComponent, FilterContainerComponent, DashboardLoadingComponent, onClickReport, onChangeLoading, hideFilters, hideDateRangeFilter, hideXAxis, hideYAxis, hideCartesianGrid, comparisonLineStyle, containerStyle, className, chartContainerStyle, filters, onClickChartElement, dateBucket, additionalProcessing, }: DashboardProps): import("react/jsx-runtime").JSX.Element | null;
|
|
310
318
|
//# sourceMappingURL=Dashboard.d.ts.map
|