@quillsql/react 2.12.27 → 2.12.29
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 +40 -21
- package/dist/cjs/ChartBuilder.d.ts +38 -4
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +66 -25
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +66 -26
- package/dist/cjs/Context.d.ts +1 -19
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +32 -83
- package/dist/cjs/Dashboard.d.ts +6 -1
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +79 -50
- package/dist/cjs/ReportBuilder.d.ts +10 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +331 -99
- package/dist/cjs/SQLEditor.d.ts +10 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +122 -29
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +21 -11
- package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
- package/dist/cjs/components/Chart/ChartTooltip.js +5 -4
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +61 -20
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +7 -1
- package/dist/cjs/components/Dashboard/TableComponent.d.ts +16 -2
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +2 -14
- package/dist/cjs/components/QuillTable.d.ts +2 -2
- package/dist/cjs/components/QuillTable.d.ts.map +1 -1
- package/dist/cjs/components/QuillTable.js +7 -5
- package/dist/cjs/components/UiComponents.d.ts +3 -3
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +4 -4
- package/dist/cjs/hooks/useDashboard.d.ts +1 -1
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +18 -4
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +16 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +179 -105
- package/dist/cjs/utils/columnProcessing.d.ts +1 -0
- package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/columnProcessing.js +8 -1
- package/dist/cjs/utils/constants.d.ts +2 -0
- package/dist/cjs/utils/constants.d.ts.map +1 -0
- package/dist/cjs/utils/constants.js +4 -0
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +26 -96
- package/dist/cjs/utils/dataFetcher.d.ts +1 -1
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +63 -15
- package/dist/cjs/utils/dates.d.ts +9 -0
- package/dist/cjs/utils/dates.d.ts.map +1 -1
- package/dist/cjs/utils/dates.js +43 -1
- package/dist/cjs/utils/logging.d.ts +2 -0
- package/dist/cjs/utils/logging.d.ts.map +1 -0
- package/dist/cjs/utils/logging.js +10 -0
- package/dist/cjs/utils/monacoAutocomplete.d.ts +20 -0
- package/dist/cjs/utils/monacoAutocomplete.d.ts.map +1 -0
- package/dist/cjs/utils/monacoAutocomplete.js +145 -0
- package/dist/cjs/utils/pivotConstructor.d.ts +6 -0
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -0
- package/dist/cjs/utils/pivotConstructor.js +140 -0
- package/dist/cjs/utils/queryConstructor.d.ts +5 -2
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +149 -53
- package/dist/cjs/utils/queryConstructor.uspec.d.ts +2 -0
- package/dist/cjs/utils/queryConstructor.uspec.d.ts.map +1 -0
- package/dist/cjs/utils/queryConstructor.uspec.js +225 -0
- package/dist/cjs/utils/tableProcessing.d.ts +23 -0
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +125 -2
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +40 -21
- package/dist/esm/ChartBuilder.d.ts +38 -4
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +64 -24
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +66 -26
- package/dist/esm/Context.d.ts +1 -19
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +32 -82
- package/dist/esm/Dashboard.d.ts +6 -1
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +80 -51
- package/dist/esm/ReportBuilder.d.ts +10 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +333 -101
- package/dist/esm/SQLEditor.d.ts +10 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +123 -30
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +21 -11
- package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
- package/dist/esm/components/Chart/ChartTooltip.js +5 -4
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +61 -20
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +7 -1
- package/dist/esm/components/Dashboard/TableComponent.d.ts +16 -2
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +2 -14
- package/dist/esm/components/QuillTable.d.ts +2 -2
- package/dist/esm/components/QuillTable.d.ts.map +1 -1
- package/dist/esm/components/QuillTable.js +7 -5
- package/dist/esm/components/UiComponents.d.ts +3 -3
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +4 -4
- package/dist/esm/hooks/useDashboard.d.ts +1 -1
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +19 -5
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +16 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +177 -105
- package/dist/esm/utils/columnProcessing.d.ts +1 -0
- package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
- package/dist/esm/utils/columnProcessing.js +6 -0
- package/dist/esm/utils/constants.d.ts +2 -0
- package/dist/esm/utils/constants.d.ts.map +1 -0
- package/dist/esm/utils/constants.js +1 -0
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +27 -97
- package/dist/esm/utils/dataFetcher.d.ts +1 -1
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +63 -15
- package/dist/esm/utils/dates.d.ts +9 -0
- package/dist/esm/utils/dates.d.ts.map +1 -1
- package/dist/esm/utils/dates.js +39 -0
- package/dist/esm/utils/logging.d.ts +2 -0
- package/dist/esm/utils/logging.d.ts.map +1 -0
- package/dist/esm/utils/logging.js +6 -0
- package/dist/esm/utils/monacoAutocomplete.d.ts +20 -0
- package/dist/esm/utils/monacoAutocomplete.d.ts.map +1 -0
- package/dist/esm/utils/monacoAutocomplete.js +140 -0
- package/dist/esm/utils/pivotConstructor.d.ts +6 -0
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -0
- package/dist/esm/utils/pivotConstructor.js +136 -0
- package/dist/esm/utils/queryConstructor.d.ts +5 -2
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +145 -52
- package/dist/esm/utils/queryConstructor.uspec.d.ts +2 -0
- package/dist/esm/utils/queryConstructor.uspec.d.ts.map +1 -0
- package/dist/esm/utils/queryConstructor.uspec.js +223 -0
- package/dist/esm/utils/tableProcessing.d.ts +23 -0
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +122 -2
- package/package.json +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.spec.d.ts +0 -2
- package/dist/cjs/internals/ReportBuilder/PivotModal.spec.d.ts.map +0 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.spec.js +0 -213
- package/dist/esm/internals/ReportBuilder/PivotModal.spec.d.ts +0 -2
- package/dist/esm/internals/ReportBuilder/PivotModal.spec.d.ts.map +0 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.spec.js +0 -211
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generatePivotTable = exports.isDateField = exports.getDateString = exports.getDateRange = exports.generatePivotTitle = exports.generatePivotTableYAxis = exports.PivotModal = void 0;
|
|
3
|
+
exports.generatePivotTableInMemory = exports.generatePivotTable = exports.isDateField = exports.getDateString = exports.getDateBuckets = 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");
|
|
@@ -16,6 +16,8 @@ const QuillCard_1 = require("../../components/QuillCard");
|
|
|
16
16
|
const pivotProcessing_1 = require("../../utils/pivotProcessing");
|
|
17
17
|
const crypto_1 = require("../../utils/crypto");
|
|
18
18
|
const tableProcessing_1 = require("../../utils/tableProcessing");
|
|
19
|
+
const pivotConstructor_1 = require("../../utils/pivotConstructor");
|
|
20
|
+
const dates_1 = require("../../utils/dates");
|
|
19
21
|
const QuillHover = () => {
|
|
20
22
|
return ((0, jsx_runtime_1.jsx)("style", { children: `
|
|
21
23
|
.quill-hover {
|
|
@@ -29,7 +31,7 @@ const QuillHover = () => {
|
|
|
29
31
|
}
|
|
30
32
|
` }));
|
|
31
33
|
};
|
|
32
|
-
const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivotColumnField, pivotValueField, setPivotValueField, pivotAggregation, setPivotAggregation, popUpTitle, setPopUpTitle, selectedTable, SelectComponent, ButtonComponent, SecondaryButtonComponent, PopoverComponent, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, LoadingComponent = UiComponents_1.QuillLoadingComponent, CardComponent = QuillCard_1.QuillCard, HeaderComponent, LabelComponent, TextComponent, selectedPivotIndex, setSelectedPivotIndex, removePivot, selectPivot, showUpdatePivot, setShowUpdatePivot, data, columns, theme, isOpen, setIsOpen, dateRange, createdPivots, setCreatedPivots, recommendedPivots, setRecommendedPivots, triggerButtonText = 'Pivot', showPivotEditButton = false, showEditOnPivotClick = true, selectPivotOnEdit = false, showTrigger = true, rightAlign = false, parentRef, pivotCountRequest = 6, query, initialUniqueValues, initialSelectedPivotTable, disabled = false, pivotRecommendationsEnabled = true, }) => {
|
|
34
|
+
const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivotColumnField, pivotValueField, setPivotValueField, pivotAggregation, setPivotAggregation, popUpTitle, setPopUpTitle, selectedTable, SelectComponent, ButtonComponent, SecondaryButtonComponent, PopoverComponent, ErrorMessageComponent = UiComponents_1.QuillErrorMessageComponent, PivotRowContainer = UiComponents_1.QuillPivotRowContainer, PivotColumnContainer = UiComponents_1.QuillPivotColumnContainer, LoadingComponent = UiComponents_1.QuillLoadingComponent, CardComponent = QuillCard_1.QuillCard, HeaderComponent, LabelComponent, TextComponent, selectedPivotIndex, setSelectedPivotIndex, removePivot, selectPivot, showUpdatePivot, setShowUpdatePivot, data, columns, theme, isOpen, setIsOpen, dateRange, createdPivots, setCreatedPivots, recommendedPivots, setRecommendedPivots, triggerButtonText = 'Pivot', showPivotEditButton = false, showEditOnPivotClick = true, selectPivotOnEdit = false, showTrigger = true, rightAlign = false, parentRef, pivotCountRequest = 6, query, initialUniqueValues, initialSelectedPivotTable, disabled = false, pivotRecommendationsEnabled = true, report, }) => {
|
|
33
35
|
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
34
36
|
const [selectedPivotType, setSelectedPivotType] = (0, react_1.useState)('recommended');
|
|
35
37
|
const [errors, setErrors] = (0, react_1.useState)([]);
|
|
@@ -44,6 +46,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
44
46
|
const [allowedRowFields, setAllowedRowFields] = (0, react_1.useState)([]);
|
|
45
47
|
const [allowedValueFields, setAllowedValueFields] = (0, react_1.useState)([]);
|
|
46
48
|
const [uniqueValues, setUniqueValues] = (0, react_1.useState)(initialUniqueValues);
|
|
49
|
+
const [dateRanges, setDateRanges] = (0, react_1.useState)({});
|
|
47
50
|
const getDistinctValues = async () => {
|
|
48
51
|
if (columns) {
|
|
49
52
|
const stringColumns = columns.filter((column) => {
|
|
@@ -54,9 +57,10 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
54
57
|
setAllowedRowFields(possibleColumns.rowFields);
|
|
55
58
|
setAllowedColumnFields(possibleColumns.columnFields);
|
|
56
59
|
setAllowedValueFields(possibleColumns.valueFields);
|
|
57
|
-
return possibleColumns;
|
|
60
|
+
return { possibleColumns, uniqueValues: {} };
|
|
58
61
|
}
|
|
59
|
-
const
|
|
62
|
+
const smallStringColumns = await (0, tableProcessing_1.getCountsByColumns)(stringColumns, query || '', client, customFields);
|
|
63
|
+
const newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(smallStringColumns, query || '', data.rows || [], client, customFields);
|
|
60
64
|
if (!uniqueValues ||
|
|
61
65
|
(0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(newUniqueValues)) {
|
|
62
66
|
const possibleColumns = (0, pivotProcessing_1.getPossiblePivotFieldOptions)(columns, newUniqueValues || {});
|
|
@@ -64,10 +68,26 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
64
68
|
setAllowedColumnFields(possibleColumns.columnFields);
|
|
65
69
|
setAllowedValueFields(possibleColumns.valueFields);
|
|
66
70
|
setUniqueValues(newUniqueValues);
|
|
67
|
-
return possibleColumns;
|
|
71
|
+
return { possibleColumns, uniqueValues: newUniqueValues };
|
|
68
72
|
}
|
|
69
73
|
}
|
|
70
|
-
return {
|
|
74
|
+
return {
|
|
75
|
+
possibleColumns: { rowFields: [], columnFields: [], valueFields: [] },
|
|
76
|
+
uniqueValues: {},
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
const getAllDateRangesByColumn = async () => {
|
|
80
|
+
// Don't reprocess dateRanges if they are already gathered
|
|
81
|
+
if (columns) {
|
|
82
|
+
const dateColumns = columns.filter((column) => {
|
|
83
|
+
return column.jsType === 'date';
|
|
84
|
+
});
|
|
85
|
+
if (dateColumns.length === 0) {
|
|
86
|
+
return [];
|
|
87
|
+
}
|
|
88
|
+
const dateRangeByColumn = await (0, tableProcessing_1.getDateRangeByColumns)(dateColumns, query || '', client, customFields);
|
|
89
|
+
setDateRanges(dateRangeByColumn || {});
|
|
90
|
+
}
|
|
71
91
|
};
|
|
72
92
|
(0, react_1.useEffect)(() => {
|
|
73
93
|
const calculatePivotCardSize = () => {
|
|
@@ -94,76 +114,62 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
94
114
|
}
|
|
95
115
|
}, [showUpdatePivot, isOpen]);
|
|
96
116
|
(0, react_1.useEffect)(() => {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
if ((pivotRowField && data && columns) || initialSelectedPivotTable) {
|
|
110
|
-
getDistinctValues();
|
|
111
|
-
}
|
|
112
|
-
if (initialUniqueValues) {
|
|
113
|
-
const possibleColumns = (0, pivotProcessing_1.getPossiblePivotFieldOptions)(columns, initialUniqueValues);
|
|
114
|
-
setAllowedRowFields(possibleColumns.rowFields);
|
|
115
|
-
setAllowedColumnFields(possibleColumns.columnFields);
|
|
116
|
-
setAllowedValueFields(possibleColumns.valueFields);
|
|
117
|
-
setUniqueValues(initialUniqueValues);
|
|
118
|
-
}
|
|
119
|
-
if (pivotRowField && data && columns) {
|
|
120
|
-
const pivot = {
|
|
121
|
-
rowField: pivotRowField || '',
|
|
122
|
-
rowFieldType: columnsToShow[pivotRowField || ''],
|
|
123
|
-
columnField: pivotColumnField,
|
|
124
|
-
columnFieldType: columnsToShow[pivotColumnField || ''],
|
|
125
|
-
valueField: pivotValueField || '',
|
|
126
|
-
aggregationType: pivotAggregation || '',
|
|
127
|
-
};
|
|
128
|
-
if (initialSelectedPivotTable) {
|
|
129
|
-
setSamplePivotTable({
|
|
130
|
-
pivot: pivot,
|
|
131
|
-
rows: initialSelectedPivotTable.rows,
|
|
132
|
-
columns: initialSelectedPivotTable.columns,
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
const { rows, columns } = generatePivotTable(pivot, data, dateRange, false);
|
|
117
|
+
const fetchPivotData = async () => {
|
|
118
|
+
if (pivotRowField && data && columns) {
|
|
119
|
+
const pivot = {
|
|
120
|
+
rowField: pivotRowField || '',
|
|
121
|
+
rowFieldType: columnsToShow[pivotRowField || ''],
|
|
122
|
+
columnField: pivotColumnField,
|
|
123
|
+
columnFieldType: columnsToShow[pivotColumnField || ''],
|
|
124
|
+
valueField: pivotValueField || '',
|
|
125
|
+
aggregationType: pivotAggregation || '',
|
|
126
|
+
};
|
|
127
|
+
const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false, -1, undefined, undefined, report, client, uniqueValues);
|
|
137
128
|
setSamplePivotTable({ pivot: pivot, rows, columns });
|
|
138
129
|
}
|
|
139
|
-
|
|
130
|
+
if ((pivotRowField && data && columns) || initialSelectedPivotTable) {
|
|
131
|
+
getDistinctValues();
|
|
132
|
+
}
|
|
133
|
+
if (initialUniqueValues) {
|
|
134
|
+
const possibleColumns = (0, pivotProcessing_1.getPossiblePivotFieldOptions)(columns, initialUniqueValues);
|
|
135
|
+
setAllowedRowFields(possibleColumns.rowFields);
|
|
136
|
+
setAllowedColumnFields(possibleColumns.columnFields);
|
|
137
|
+
setAllowedValueFields(possibleColumns.valueFields);
|
|
138
|
+
setUniqueValues(initialUniqueValues);
|
|
139
|
+
}
|
|
140
|
+
if (pivotRowField && data && columns) {
|
|
141
|
+
const pivot = {
|
|
142
|
+
rowField: pivotRowField || '',
|
|
143
|
+
rowFieldType: columnsToShow[pivotRowField || ''],
|
|
144
|
+
columnField: pivotColumnField,
|
|
145
|
+
columnFieldType: columnsToShow[pivotColumnField || ''],
|
|
146
|
+
valueField: pivotValueField || '',
|
|
147
|
+
aggregationType: pivotAggregation || '',
|
|
148
|
+
};
|
|
149
|
+
if (initialSelectedPivotTable) {
|
|
150
|
+
setSamplePivotTable({
|
|
151
|
+
pivot: pivot,
|
|
152
|
+
rows: initialSelectedPivotTable.rows,
|
|
153
|
+
columns: initialSelectedPivotTable.columns,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false, -1, undefined, undefined, report, client, uniqueValues);
|
|
158
|
+
setSamplePivotTable({ pivot: pivot, rows, columns });
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
fetchPivotData();
|
|
140
163
|
}, []);
|
|
141
164
|
(0, react_1.useEffect)(() => {
|
|
142
|
-
if (
|
|
165
|
+
if (pivotRowField && data && columns) {
|
|
143
166
|
getDistinctValues();
|
|
167
|
+
getAllDateRangesByColumn();
|
|
144
168
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
const pivot = {
|
|
148
|
-
rowField: pivotRowField || '',
|
|
149
|
-
rowFieldType: columnsToShow[pivotRowField || ''],
|
|
150
|
-
columnField: pivotColumnField,
|
|
151
|
-
columnFieldType: columnsToShow[pivotColumnField || ''],
|
|
152
|
-
valueField: pivotValueField || '',
|
|
153
|
-
aggregationType: pivotAggregation || '',
|
|
154
|
-
};
|
|
155
|
-
if ((0, pivotProcessing_1.isValidPivot)(pivot) && data && columns) {
|
|
156
|
-
const { rows, columns } = generatePivotTable(pivot, data, dateRange, false);
|
|
157
|
-
setSamplePivotTable({ pivot: pivot, rows, columns });
|
|
169
|
+
else if (initialSelectedPivotTable) {
|
|
170
|
+
getDistinctValues();
|
|
158
171
|
}
|
|
159
|
-
}, [
|
|
160
|
-
data,
|
|
161
|
-
columns,
|
|
162
|
-
pivotRowField,
|
|
163
|
-
pivotColumnField,
|
|
164
|
-
pivotValueField,
|
|
165
|
-
pivotAggregation,
|
|
166
|
-
]);
|
|
172
|
+
}, [initialSelectedPivotTable, columns, data, pivotRowField]);
|
|
167
173
|
(0, react_1.useEffect)(() => {
|
|
168
174
|
if (!initialUniqueValues) {
|
|
169
175
|
return;
|
|
@@ -184,21 +190,25 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
184
190
|
return map;
|
|
185
191
|
}, {});
|
|
186
192
|
}, [columns]);
|
|
187
|
-
const selectedPivotTable = (0, react_1.
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
193
|
+
const [selectedPivotTable, setSelectedPivotTable] = (0, react_1.useState)(null);
|
|
194
|
+
(0, react_1.useEffect)(() => {
|
|
195
|
+
const fetchPivotTables = async () => {
|
|
196
|
+
if (selectedPivotIndex === -1) {
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
const pivot = createdPivots[selectedPivotIndex];
|
|
200
|
+
const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false, -1, undefined, undefined, report, client, uniqueValues);
|
|
201
|
+
setSelectedPivotTable({
|
|
202
|
+
pivot: pivot,
|
|
203
|
+
rows: rows,
|
|
204
|
+
columns: columns,
|
|
205
|
+
});
|
|
197
206
|
};
|
|
207
|
+
fetchPivotTables();
|
|
198
208
|
}, [selectedPivotIndex, data, dateRange, createdPivots]);
|
|
199
209
|
const onSelectRecommendedPivot = (pivot, index) => {
|
|
200
210
|
if (showEditOnPivotClick) {
|
|
201
|
-
onEditPivot(pivot, index);
|
|
211
|
+
onEditPivot(pivot, index, 'recommended');
|
|
202
212
|
return;
|
|
203
213
|
}
|
|
204
214
|
if (index === selectedPivotIndex && selectedPivotType === 'recommended') {
|
|
@@ -211,20 +221,30 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
211
221
|
setIsOpen(false);
|
|
212
222
|
};
|
|
213
223
|
const onSelectCreatedPivot = (pivot, index) => {
|
|
214
|
-
selectPivot(pivot);
|
|
224
|
+
selectPivot(pivot, pivot.columnField ? uniqueValues : undefined, dateRanges[pivot.rowField]?.dateRange, samplePivotTable);
|
|
215
225
|
setSelectedPivotType('created');
|
|
216
226
|
setIsOpen(false);
|
|
217
227
|
setPopUpTitle('Add pivot');
|
|
218
228
|
};
|
|
219
|
-
const onEditPivot = (pivot, index) => {
|
|
229
|
+
const onEditPivot = async (pivot, index, pivotType) => {
|
|
220
230
|
setIsLoading(false);
|
|
221
231
|
setPivotRowField(pivot.rowField);
|
|
222
232
|
setPivotColumnField(pivot.columnField);
|
|
223
233
|
setPivotValueField(pivot.valueField);
|
|
224
234
|
setPivotAggregation(pivot.aggregationType);
|
|
225
235
|
setShowUpdatePivot(true);
|
|
236
|
+
if (pivotType === 'recommended' &&
|
|
237
|
+
index !== null &&
|
|
238
|
+
recommendedPivotTables[index]) {
|
|
239
|
+
setSamplePivotTable(recommendedPivotTables[index]);
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
226
242
|
if ((0, pivotProcessing_1.isValidPivot)(pivot)) {
|
|
227
|
-
|
|
243
|
+
let dateBucket = undefined;
|
|
244
|
+
if (pivotRowField && dateRanges[pivotRowField]) {
|
|
245
|
+
dateBucket = (0, dates_1.getDateBucketFromRange)(dateRanges[pivotRowField].dateRange);
|
|
246
|
+
}
|
|
247
|
+
const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false, -1, undefined, dateBucket, report, client, uniqueValues);
|
|
228
248
|
setSamplePivotTable({ pivot, rows, columns });
|
|
229
249
|
return;
|
|
230
250
|
}
|
|
@@ -240,6 +260,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
240
260
|
return;
|
|
241
261
|
}
|
|
242
262
|
setIsLoading(true);
|
|
263
|
+
let tempUniqueValues = uniqueValues;
|
|
243
264
|
let possibleColumns = {
|
|
244
265
|
rowFields: allowedRowFields,
|
|
245
266
|
columnFields: allowedColumnFields,
|
|
@@ -249,7 +270,9 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
249
270
|
allowedColumnFields.length === 0 &&
|
|
250
271
|
allowedValueFields.length === 0) ||
|
|
251
272
|
!uniqueValues) {
|
|
252
|
-
|
|
273
|
+
const distinctValues = await getDistinctValues();
|
|
274
|
+
possibleColumns = distinctValues.possibleColumns;
|
|
275
|
+
tempUniqueValues = distinctValues.uniqueValues;
|
|
253
276
|
}
|
|
254
277
|
const cloudBody = {
|
|
255
278
|
pivotCountRequest,
|
|
@@ -269,9 +292,8 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
269
292
|
try {
|
|
270
293
|
const resp = await (0, dataFetcher_1.getDataFromCloud)(client, 'pivotai', cloudBody);
|
|
271
294
|
const recommendedPivots = resp?.data?.pivotTables.map((pivot) => (0, pivotProcessing_1.cleanPivot)(pivot, possibleColumns)) || [];
|
|
272
|
-
|
|
273
|
-
if (pivot.columnField &&
|
|
274
|
-
columnsToShow[pivot.columnField] === 'date') {
|
|
295
|
+
const cleanedPivots = recommendedPivots.map((pivot) => {
|
|
296
|
+
if (pivot.columnField && columnsToShow[pivot.columnField] === 'date') {
|
|
275
297
|
const columnField = pivot.columnField;
|
|
276
298
|
pivot.columnField = pivot.rowField;
|
|
277
299
|
pivot.rowField = columnField;
|
|
@@ -284,7 +306,13 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
284
306
|
: undefined,
|
|
285
307
|
title: generatePivotTitle(pivot),
|
|
286
308
|
};
|
|
309
|
+
});
|
|
310
|
+
setRecommendedPivots(cleanedPivots);
|
|
311
|
+
const pts = await Promise.all(cleanedPivots.map(async (p) => {
|
|
312
|
+
const { rows, columns } = await generatePivotTable(p, data, dateRange, false, 6, undefined, undefined, report, client, tempUniqueValues);
|
|
313
|
+
return { pivot: p, rows, columns };
|
|
287
314
|
}));
|
|
315
|
+
setRecommendedPivotTables(pts);
|
|
288
316
|
setSelectedPivotIndex(-1);
|
|
289
317
|
}
|
|
290
318
|
catch (e) {
|
|
@@ -326,26 +354,51 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
326
354
|
setSamplePivotTable(null);
|
|
327
355
|
return;
|
|
328
356
|
}
|
|
329
|
-
|
|
330
|
-
|
|
357
|
+
let dateBucket = undefined;
|
|
358
|
+
if (pivotRowField && dateRanges[pivotRowField]) {
|
|
359
|
+
dateBucket = (0, dates_1.getDateBucketFromRange)(dateRanges[pivotRowField].dateRange);
|
|
360
|
+
}
|
|
361
|
+
setTimeout(async () => {
|
|
362
|
+
const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false, -1, undefined, dateBucket, report, client, uniqueValues);
|
|
331
363
|
setSamplePivotTable({ pivot, rows, columns });
|
|
332
364
|
setIsLoading(false);
|
|
333
365
|
}, 500);
|
|
334
366
|
};
|
|
335
|
-
const recommendedPivotTables = (0, react_1.
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
367
|
+
const [recommendedPivotTables, setRecommendedPivotTables] = (0, react_1.useState)([]);
|
|
368
|
+
// useEffect(() => {
|
|
369
|
+
// const fetchPivotTables = async () => {
|
|
370
|
+
// const pts = await Promise.all(
|
|
371
|
+
// recommendedPivots.map(async (p: Pivot) => {
|
|
372
|
+
// const { rows, columns } = await generatePivotTable(
|
|
373
|
+
// p,
|
|
374
|
+
// data,
|
|
375
|
+
// dateRange,
|
|
376
|
+
// false,
|
|
377
|
+
// 6,
|
|
378
|
+
// undefined,
|
|
379
|
+
// undefined,
|
|
380
|
+
// report,
|
|
381
|
+
// client,
|
|
382
|
+
// uniqueValues,
|
|
383
|
+
// );
|
|
384
|
+
// return { pivot: p, rows, columns };
|
|
385
|
+
// }),
|
|
386
|
+
// );
|
|
387
|
+
// setRecommendedPivotTables(pts);
|
|
388
|
+
// };
|
|
389
|
+
// fetchPivotTables();
|
|
390
|
+
// }, [recommendedPivots, dateRange]);
|
|
391
|
+
const [createdPivotTables, setCreatedPivotTables] = (0, react_1.useState)([]);
|
|
392
|
+
(0, react_1.useEffect)(() => {
|
|
393
|
+
const fetchPivotTables = async () => {
|
|
394
|
+
const pts = await Promise.all(createdPivots.map(async (p) => {
|
|
395
|
+
const { rows, columns } = await generatePivotTable(p, data, dateRange, false, 6, undefined, undefined, report, client, uniqueValues);
|
|
396
|
+
return { pivot: p, rows, columns };
|
|
397
|
+
}));
|
|
398
|
+
setCreatedPivotTables(pts);
|
|
399
|
+
};
|
|
400
|
+
fetchPivotTables();
|
|
401
|
+
}, [createdPivots, dateRange]);
|
|
349
402
|
return ((0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
350
403
|
position: 'relative',
|
|
351
404
|
display: 'inline-block',
|
|
@@ -639,6 +692,7 @@ function getDateBuckets(dateRange, column, data, dateBucket) {
|
|
|
639
692
|
const dayDifference = (0, date_fns_1.differenceInDays)(dateRange.end, dateRange.start);
|
|
640
693
|
return dayDifferenceToInterval(dayDifference, dateRange);
|
|
641
694
|
}
|
|
695
|
+
exports.getDateBuckets = getDateBuckets;
|
|
642
696
|
function getCompDateBuckets(dateRange, compDateRange, column, data) {
|
|
643
697
|
if (!dateRange) {
|
|
644
698
|
return (0, date_fns_1.eachMonthOfInterval)(getDateRange(undefined, column, data));
|
|
@@ -745,7 +799,27 @@ const fixBigQueryData = (data = []) => {
|
|
|
745
799
|
}
|
|
746
800
|
return newData;
|
|
747
801
|
};
|
|
748
|
-
function generatePivotTable(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = undefined, dateBucket) {
|
|
802
|
+
async function generatePivotTable(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = undefined, dateBucket, report, client, uniqueValues) {
|
|
803
|
+
try {
|
|
804
|
+
if (report && report.rowCount && report.rowCount !== data.length) {
|
|
805
|
+
let dateFilter = report
|
|
806
|
+
? report.filtersApplied.find((f) => f.filterType === 'date_range')
|
|
807
|
+
: undefined;
|
|
808
|
+
const pivotTable = await (0, pivotConstructor_1.generatePivotWithSQL)(pivot, report, client, dateBucket, dateFilter, pivot.columnField && uniqueValues
|
|
809
|
+
? Object.keys(uniqueValues[pivot.columnField])
|
|
810
|
+
: undefined);
|
|
811
|
+
if (pivotTable) {
|
|
812
|
+
return pivotTable;
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
catch (e) {
|
|
817
|
+
console.error('Error generating pivot table with SQL, using in memory process', e);
|
|
818
|
+
}
|
|
819
|
+
return generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLimit, compRange);
|
|
820
|
+
}
|
|
821
|
+
exports.generatePivotTable = generatePivotTable;
|
|
822
|
+
function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = undefined, dateBucket) {
|
|
749
823
|
// If there is no rowField, aggregate on the valueField
|
|
750
824
|
if (!pivot.rowField) {
|
|
751
825
|
return valueFieldAggregation(data, pivot.valueField, pivot.aggregationType, isComparison);
|
|
@@ -1095,7 +1169,7 @@ function generatePivotTable(pivot, data, dateRange, isComparison, rowLimit = -1,
|
|
|
1095
1169
|
}
|
|
1096
1170
|
return { rows: pivotRows, columns };
|
|
1097
1171
|
}
|
|
1098
|
-
exports.
|
|
1172
|
+
exports.generatePivotTableInMemory = generatePivotTableInMemory;
|
|
1099
1173
|
function valueFieldAggregation(data, valueField, aggregationType, isComparison) {
|
|
1100
1174
|
if (!data || data.length === 0) {
|
|
1101
1175
|
return {
|
|
@@ -7,4 +7,5 @@ export declare function convertPostgresColumn(field: {
|
|
|
7
7
|
export declare function convertColumnInfoToColumnInternal(columnInfo: ColumnInfo): ColumnInternal;
|
|
8
8
|
export declare function convertFieldTypeToJSType(fieldType: string): string;
|
|
9
9
|
export declare function convertFormatToJsType(column: Column): string;
|
|
10
|
+
export declare function processColumnName(columnName: string): string;
|
|
10
11
|
//# sourceMappingURL=columnProcessing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columnProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/columnProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"columnProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/columnProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAM3D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,cAAc,CAyGjB;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,UAAU,GACrB,cAAc,CAShB;AA0DD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAsBlE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY5D;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5D"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.convertFormatToJsType = exports.convertFieldTypeToJSType = exports.convertColumnInfoToColumnInternal = exports.convertPostgresColumn = void 0;
|
|
3
|
+
exports.processColumnName = exports.convertFormatToJsType = exports.convertFieldTypeToJSType = exports.convertColumnInfoToColumnInternal = exports.convertPostgresColumn = void 0;
|
|
4
|
+
function removeBigQuerySpecialChars(columnName) {
|
|
5
|
+
return columnName.replaceAll('quill_forward_slash', '/');
|
|
6
|
+
}
|
|
4
7
|
function convertPostgresColumn(field) {
|
|
5
8
|
let format;
|
|
6
9
|
let fieldType;
|
|
@@ -207,3 +210,7 @@ function convertFormatToJsType(column) {
|
|
|
207
210
|
}
|
|
208
211
|
}
|
|
209
212
|
exports.convertFormatToJsType = convertFormatToJsType;
|
|
213
|
+
function processColumnName(columnName) {
|
|
214
|
+
return removeBigQuerySpecialChars(columnName);
|
|
215
|
+
}
|
|
216
|
+
exports.processColumnName = processColumnName;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,MAAM,CAAC"}
|
|
@@ -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;AAoC5E;;;;;;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,CAiD9B;AA0KD,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,GAAG,GACV,OAAO,CAAC,GAAG,CAAC,CA0Bd"}
|
|
@@ -4,9 +4,9 @@ exports.getDashboard = 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
7
|
const dataFetcher_1 = require("./dataFetcher");
|
|
9
|
-
const
|
|
8
|
+
const dates_1 = require("./dates");
|
|
9
|
+
const pivotConstructor_1 = require("./pivotConstructor");
|
|
10
10
|
const defaultDashboardItem = {
|
|
11
11
|
id: '',
|
|
12
12
|
name: '',
|
|
@@ -70,8 +70,10 @@ async function cleanDashboardItem(item, dashboardFilters, client, dateBucket) {
|
|
|
70
70
|
xAxisFormat: item.xAxisFormat,
|
|
71
71
|
order: item.order,
|
|
72
72
|
filtersApplied: item.filtersApplied,
|
|
73
|
+
rowCount: parseInt(item.rowCount),
|
|
73
74
|
sort: item.sort,
|
|
74
75
|
page: item.page,
|
|
76
|
+
itemQuery: item.itemQuery,
|
|
75
77
|
};
|
|
76
78
|
}
|
|
77
79
|
exports.cleanDashboardItem = cleanDashboardItem;
|
|
@@ -122,106 +124,34 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
|
|
|
122
124
|
}
|
|
123
125
|
const pivot = report?.pivot;
|
|
124
126
|
const data = report || {};
|
|
125
|
-
if (
|
|
127
|
+
if (pivot && client) {
|
|
128
|
+
if (report.rowCount === 0) {
|
|
129
|
+
return { rows: [], columns: [] };
|
|
130
|
+
}
|
|
126
131
|
try {
|
|
127
|
-
let dateRange = undefined;
|
|
128
|
-
let comparisonInterval = undefined;
|
|
129
132
|
let dateBucket = dateBucketInitial;
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
-
}
|
|
133
|
+
let filterDateRange = undefined;
|
|
134
|
+
if (dateFilter) {
|
|
135
|
+
filterDateRange = {
|
|
136
|
+
start: dateFilter.startDate,
|
|
137
|
+
end: dateFilter.endDate,
|
|
138
|
+
};
|
|
152
139
|
}
|
|
153
|
-
if (
|
|
154
|
-
|
|
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
|
-
}
|
|
140
|
+
else if (report.dateRange) {
|
|
141
|
+
filterDateRange = report.dateRange;
|
|
166
142
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
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
|
-
};
|
|
143
|
+
if (!dateBucket && filterDateRange) {
|
|
144
|
+
dateBucket = (0, dates_1.getDateBucketFromRange)(filterDateRange);
|
|
145
|
+
}
|
|
146
|
+
const pivotTable = await (0, pivotConstructor_1.generatePivotWithSQL)(pivot, report, client, dateBucket, dateFilter, report.distinctStrings);
|
|
147
|
+
if (pivotTable) {
|
|
148
|
+
return pivotTable;
|
|
222
149
|
}
|
|
150
|
+
throw new Error('Error generating pivot table');
|
|
151
|
+
}
|
|
152
|
+
catch (e) {
|
|
153
|
+
throw new Error('Error generating pivot table: ' + e);
|
|
223
154
|
}
|
|
224
|
-
catch (e) { }
|
|
225
155
|
}
|
|
226
156
|
return pivot && data.rows
|
|
227
157
|
? (0, PivotModal_1.generatePivotTable)(pivot, JSON.parse(JSON.stringify(data.rows)), // deep copy
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare function getData(client: any, cloudQueryEndpoint: string, noCred: RequestCredentials, hostedRequestBody: any, cloudRequestBody: any, method?: string): Promise<any>;
|
|
1
|
+
export declare function getData(client: any, cloudQueryEndpoint: string, noCred: RequestCredentials, hostedRequestBody: any, cloudRequestBody: any, method?: string, queryParam?: string): Promise<any>;
|
|
2
2
|
export declare function getDataFromCloud(client: any, cloudQueryEndpoint: string, cloudRequestBody: any, method?: string): Promise<any>;
|
|
3
3
|
//# sourceMappingURL=dataFetcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/dataFetcher.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dataFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/dataFetcher.tsx"],"names":[],"mappings":"AAqBA,wBAAsB,OAAO,CAC3B,MAAM,EAAE,GAAG,EACX,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,iBAAiB,EAAE,GAAG,EACtB,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,EACf,UAAU,CAAC,EAAE,MAAM,gBAwGpB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,GAAG,EACX,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,gBAgChB"}
|