@quillsql/react 2.12.27 → 2.12.28
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 +34 -17
- package/dist/cjs/ChartBuilder.d.ts +3 -3
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +30 -23
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +66 -26
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Dashboard.d.ts +6 -1
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +3 -1
- package/dist/cjs/ReportBuilder.d.ts +1 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +12 -10
- package/dist/cjs/SQLEditor.d.ts +10 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +27 -3
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +17 -7
- 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 +52 -15
- 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/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 +155 -80
- 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.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +56 -13
- package/dist/cjs/utils/dates.d.ts +8 -0
- package/dist/cjs/utils/dates.d.ts.map +1 -1
- package/dist/cjs/utils/dates.js +34 -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/pivotConstructor.d.ts +6 -0
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -0
- package/dist/cjs/utils/pivotConstructor.js +87 -0
- package/dist/cjs/utils/queryConstructor.d.ts +2 -1
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +46 -11
- package/dist/cjs/utils/tableProcessing.d.ts +22 -0
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +87 -1
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +34 -17
- package/dist/esm/ChartBuilder.d.ts +3 -3
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +30 -23
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +66 -26
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Dashboard.d.ts +6 -1
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +3 -1
- package/dist/esm/ReportBuilder.d.ts +1 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +13 -11
- package/dist/esm/SQLEditor.d.ts +10 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +27 -3
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +17 -7
- 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 +52 -15
- 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/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 +153 -80
- 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.map +1 -1
- package/dist/esm/utils/dataFetcher.js +56 -13
- package/dist/esm/utils/dates.d.ts +8 -0
- package/dist/esm/utils/dates.d.ts.map +1 -1
- package/dist/esm/utils/dates.js +31 -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/pivotConstructor.d.ts +6 -0
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -0
- package/dist/esm/utils/pivotConstructor.js +83 -0
- package/dist/esm/utils/queryConstructor.d.ts +2 -1
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +44 -10
- package/dist/esm/utils/tableProcessing.d.ts +22 -0
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +85 -1
- package/package.json +1 -1
|
@@ -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) => {
|
|
@@ -69,6 +72,23 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
69
72
|
}
|
|
70
73
|
return { rowFields: [], columnFields: [], valueFields: [] };
|
|
71
74
|
};
|
|
75
|
+
const getAllDateRangesByColumn = async () => {
|
|
76
|
+
// Don't reprocess dateRanges if they are already gathered
|
|
77
|
+
if (Object.keys(dateRanges).length > 0 ||
|
|
78
|
+
(client && client.databaseType !== 'postgresql')) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
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
|
+
}
|
|
91
|
+
};
|
|
72
92
|
(0, react_1.useEffect)(() => {
|
|
73
93
|
const calculatePivotCardSize = () => {
|
|
74
94
|
// The pivot card should be the same width as the row of inputs
|
|
@@ -93,30 +113,65 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
93
113
|
}, 500);
|
|
94
114
|
}
|
|
95
115
|
}, [showUpdatePivot, isOpen]);
|
|
116
|
+
(0, react_1.useEffect)(() => {
|
|
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);
|
|
128
|
+
setSamplePivotTable({ pivot: pivot, rows, columns });
|
|
129
|
+
}
|
|
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);
|
|
158
|
+
setSamplePivotTable({ pivot: pivot, rows, columns });
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
fetchPivotData();
|
|
163
|
+
}, []);
|
|
96
164
|
(0, react_1.useEffect)(() => {
|
|
97
165
|
if (pivotRowField && data && columns) {
|
|
98
|
-
const pivot = {
|
|
99
|
-
rowField: pivotRowField || '',
|
|
100
|
-
rowFieldType: columnsToShow[pivotRowField || ''],
|
|
101
|
-
columnField: pivotColumnField,
|
|
102
|
-
columnFieldType: columnsToShow[pivotColumnField || ''],
|
|
103
|
-
valueField: pivotValueField || '',
|
|
104
|
-
aggregationType: pivotAggregation || '',
|
|
105
|
-
};
|
|
106
|
-
const { rows, columns } = generatePivotTable(pivot, data, dateRange, false);
|
|
107
|
-
setSamplePivotTable({ pivot: pivot, rows, columns });
|
|
108
|
-
}
|
|
109
|
-
if ((pivotRowField && data && columns) || initialSelectedPivotTable) {
|
|
110
166
|
getDistinctValues();
|
|
167
|
+
getAllDateRangesByColumn();
|
|
111
168
|
}
|
|
112
|
-
if (
|
|
113
|
-
|
|
114
|
-
setAllowedRowFields(possibleColumns.rowFields);
|
|
115
|
-
setAllowedColumnFields(possibleColumns.columnFields);
|
|
116
|
-
setAllowedValueFields(possibleColumns.valueFields);
|
|
117
|
-
setUniqueValues(initialUniqueValues);
|
|
169
|
+
else if (initialSelectedPivotTable) {
|
|
170
|
+
getDistinctValues();
|
|
118
171
|
}
|
|
119
|
-
|
|
172
|
+
}, [initialSelectedPivotTable, columns, data, pivotRowField]);
|
|
173
|
+
(0, react_1.useEffect)(() => {
|
|
174
|
+
const fetchPivotTables = async () => {
|
|
120
175
|
const pivot = {
|
|
121
176
|
rowField: pivotRowField || '',
|
|
122
177
|
rowFieldType: columnsToShow[pivotRowField || ''],
|
|
@@ -125,37 +180,12 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
125
180
|
valueField: pivotValueField || '',
|
|
126
181
|
aggregationType: pivotAggregation || '',
|
|
127
182
|
};
|
|
128
|
-
if (
|
|
129
|
-
|
|
130
|
-
pivot: pivot,
|
|
131
|
-
rows: initialSelectedPivotTable.rows,
|
|
132
|
-
columns: initialSelectedPivotTable.columns,
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
const { rows, columns } = generatePivotTable(pivot, data, dateRange, false);
|
|
183
|
+
if ((0, pivotProcessing_1.isValidPivot)(pivot) && data && columns) {
|
|
184
|
+
const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false);
|
|
137
185
|
setSamplePivotTable({ pivot: pivot, rows, columns });
|
|
138
186
|
}
|
|
139
|
-
}
|
|
140
|
-
}, []);
|
|
141
|
-
(0, react_1.useEffect)(() => {
|
|
142
|
-
if ((pivotRowField && data && columns) || initialSelectedPivotTable) {
|
|
143
|
-
getDistinctValues();
|
|
144
|
-
}
|
|
145
|
-
}, [initialSelectedPivotTable, columns, data, pivotRowField]);
|
|
146
|
-
(0, react_1.useEffect)(() => {
|
|
147
|
-
const pivot = {
|
|
148
|
-
rowField: pivotRowField || '',
|
|
149
|
-
rowFieldType: columnsToShow[pivotRowField || ''],
|
|
150
|
-
columnField: pivotColumnField,
|
|
151
|
-
columnFieldType: columnsToShow[pivotColumnField || ''],
|
|
152
|
-
valueField: pivotValueField || '',
|
|
153
|
-
aggregationType: pivotAggregation || '',
|
|
154
187
|
};
|
|
155
|
-
|
|
156
|
-
const { rows, columns } = generatePivotTable(pivot, data, dateRange, false);
|
|
157
|
-
setSamplePivotTable({ pivot: pivot, rows, columns });
|
|
158
|
-
}
|
|
188
|
+
fetchPivotTables();
|
|
159
189
|
}, [
|
|
160
190
|
data,
|
|
161
191
|
columns,
|
|
@@ -184,17 +214,21 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
184
214
|
return map;
|
|
185
215
|
}, {});
|
|
186
216
|
}, [columns]);
|
|
187
|
-
const selectedPivotTable = (0, react_1.
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
217
|
+
const [selectedPivotTable, setSelectedPivotTable] = (0, react_1.useState)(null);
|
|
218
|
+
(0, react_1.useEffect)(() => {
|
|
219
|
+
const fetchPivotTables = async () => {
|
|
220
|
+
if (selectedPivotIndex === -1) {
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
const pivot = createdPivots[selectedPivotIndex];
|
|
224
|
+
const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false);
|
|
225
|
+
setSelectedPivotTable({
|
|
226
|
+
pivot: pivot,
|
|
227
|
+
rows: rows,
|
|
228
|
+
columns: columns,
|
|
229
|
+
});
|
|
197
230
|
};
|
|
231
|
+
fetchPivotTables();
|
|
198
232
|
}, [selectedPivotIndex, data, dateRange, createdPivots]);
|
|
199
233
|
const onSelectRecommendedPivot = (pivot, index) => {
|
|
200
234
|
if (showEditOnPivotClick) {
|
|
@@ -211,12 +245,12 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
211
245
|
setIsOpen(false);
|
|
212
246
|
};
|
|
213
247
|
const onSelectCreatedPivot = (pivot, index) => {
|
|
214
|
-
selectPivot(pivot);
|
|
248
|
+
selectPivot(pivot, pivot.columnField ? uniqueValues : undefined, dateRanges[pivot.rowField]?.dateRange);
|
|
215
249
|
setSelectedPivotType('created');
|
|
216
250
|
setIsOpen(false);
|
|
217
251
|
setPopUpTitle('Add pivot');
|
|
218
252
|
};
|
|
219
|
-
const onEditPivot = (pivot, index) => {
|
|
253
|
+
const onEditPivot = async (pivot, index) => {
|
|
220
254
|
setIsLoading(false);
|
|
221
255
|
setPivotRowField(pivot.rowField);
|
|
222
256
|
setPivotColumnField(pivot.columnField);
|
|
@@ -224,7 +258,11 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
224
258
|
setPivotAggregation(pivot.aggregationType);
|
|
225
259
|
setShowUpdatePivot(true);
|
|
226
260
|
if ((0, pivotProcessing_1.isValidPivot)(pivot)) {
|
|
227
|
-
|
|
261
|
+
let dateBucket = undefined;
|
|
262
|
+
if (pivotRowField && dateRanges[pivotRowField]) {
|
|
263
|
+
dateBucket = (0, dates_1.getDateBucketFromRange)(dateRanges[pivotRowField].dateRange);
|
|
264
|
+
}
|
|
265
|
+
const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false, -1, undefined, dateBucket, report, client, uniqueValues);
|
|
228
266
|
setSamplePivotTable({ pivot, rows, columns });
|
|
229
267
|
return;
|
|
230
268
|
}
|
|
@@ -326,26 +364,38 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
|
|
|
326
364
|
setSamplePivotTable(null);
|
|
327
365
|
return;
|
|
328
366
|
}
|
|
329
|
-
|
|
330
|
-
|
|
367
|
+
let dateBucket = undefined;
|
|
368
|
+
if (pivotRowField && dateRanges[pivotRowField]) {
|
|
369
|
+
dateBucket = (0, dates_1.getDateBucketFromRange)(dateRanges[pivotRowField].dateRange);
|
|
370
|
+
}
|
|
371
|
+
setTimeout(async () => {
|
|
372
|
+
const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false, -1, undefined, dateBucket, report, client, uniqueValues);
|
|
331
373
|
setSamplePivotTable({ pivot, rows, columns });
|
|
332
374
|
setIsLoading(false);
|
|
333
375
|
}, 500);
|
|
334
376
|
};
|
|
335
|
-
const recommendedPivotTables = (0, react_1.
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
377
|
+
const [recommendedPivotTables, setRecommendedPivotTables] = (0, react_1.useState)([]);
|
|
378
|
+
(0, react_1.useEffect)(() => {
|
|
379
|
+
const fetchPivotTables = async () => {
|
|
380
|
+
const pts = await Promise.all(recommendedPivots.map(async (p) => {
|
|
381
|
+
const { rows, columns } = await generatePivotTable(p, data, dateRange, false, 6);
|
|
382
|
+
return { pivot: p, rows, columns };
|
|
383
|
+
}));
|
|
384
|
+
setRecommendedPivotTables(pts);
|
|
385
|
+
};
|
|
386
|
+
fetchPivotTables();
|
|
387
|
+
}, [recommendedPivots, dateRange]);
|
|
388
|
+
const [createdPivotTables, setCreatedPivotTables] = (0, react_1.useState)([]);
|
|
389
|
+
(0, react_1.useEffect)(() => {
|
|
390
|
+
const fetchPivotTables = async () => {
|
|
391
|
+
const pts = await Promise.all(createdPivots.map(async (p) => {
|
|
392
|
+
const { rows, columns } = await generatePivotTable(p, data, dateRange, false, 6);
|
|
393
|
+
return { pivot: p, rows, columns };
|
|
394
|
+
}));
|
|
395
|
+
setCreatedPivotTables(pts);
|
|
396
|
+
};
|
|
397
|
+
fetchPivotTables();
|
|
398
|
+
}, [createdPivots, dateRange]);
|
|
349
399
|
return ((0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column' }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
350
400
|
position: 'relative',
|
|
351
401
|
display: 'inline-block',
|
|
@@ -639,6 +689,7 @@ function getDateBuckets(dateRange, column, data, dateBucket) {
|
|
|
639
689
|
const dayDifference = (0, date_fns_1.differenceInDays)(dateRange.end, dateRange.start);
|
|
640
690
|
return dayDifferenceToInterval(dayDifference, dateRange);
|
|
641
691
|
}
|
|
692
|
+
exports.getDateBuckets = getDateBuckets;
|
|
642
693
|
function getCompDateBuckets(dateRange, compDateRange, column, data) {
|
|
643
694
|
if (!dateRange) {
|
|
644
695
|
return (0, date_fns_1.eachMonthOfInterval)(getDateRange(undefined, column, data));
|
|
@@ -745,7 +796,31 @@ const fixBigQueryData = (data = []) => {
|
|
|
745
796
|
}
|
|
746
797
|
return newData;
|
|
747
798
|
};
|
|
748
|
-
function generatePivotTable(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = undefined, dateBucket) {
|
|
799
|
+
async function generatePivotTable(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = undefined, dateBucket, report, client, uniqueValues) {
|
|
800
|
+
try {
|
|
801
|
+
if (report &&
|
|
802
|
+
report.rowCount &&
|
|
803
|
+
report.rowCount !== data.length &&
|
|
804
|
+
client &&
|
|
805
|
+
client.databaseType.toLowerCase() === 'postgresql') {
|
|
806
|
+
let dateFilter = report
|
|
807
|
+
? report.filtersApplied.find((f) => f.filterType === 'date_range')
|
|
808
|
+
: undefined;
|
|
809
|
+
const pivotTable = await (0, pivotConstructor_1.generatePivotWithSQL)(pivot, report, client, dateBucket, dateFilter, pivot.columnField && uniqueValues
|
|
810
|
+
? Object.keys(uniqueValues[pivot.columnField])
|
|
811
|
+
: undefined);
|
|
812
|
+
if (pivotTable) {
|
|
813
|
+
return pivotTable;
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
}
|
|
817
|
+
catch (e) {
|
|
818
|
+
console.error('Error generating pivot table with SQL, using in memory process', e);
|
|
819
|
+
}
|
|
820
|
+
return generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLimit, compRange);
|
|
821
|
+
}
|
|
822
|
+
exports.generatePivotTable = generatePivotTable;
|
|
823
|
+
function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = undefined, dateBucket) {
|
|
749
824
|
// If there is no rowField, aggregate on the valueField
|
|
750
825
|
if (!pivot.rowField) {
|
|
751
826
|
return valueFieldAggregation(data, pivot.valueField, pivot.aggregationType, isComparison);
|
|
@@ -1095,7 +1170,7 @@ function generatePivotTable(pivot, data, dateRange, isComparison, rowLimit = -1,
|
|
|
1095
1170
|
}
|
|
1096
1171
|
return { rows: pivotRows, columns };
|
|
1097
1172
|
}
|
|
1098
|
-
exports.
|
|
1173
|
+
exports.generatePivotTableInMemory = generatePivotTableInMemory;
|
|
1099
1174
|
function valueFieldAggregation(data, valueField, aggregationType, isComparison) {
|
|
1100
1175
|
if (!data || data.length === 0) {
|
|
1101
1176
|
return {
|
|
@@ -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 (client && client.databaseType.toLowerCase() === 'postgresql') {
|
|
127
|
+
if (pivot && client && client.databaseType.toLowerCase() === 'postgresql') {
|
|
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 +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,gBAmGhB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,GAAG,EACX,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,gBAgChB"}
|
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getDataFromCloud = exports.getData = void 0;
|
|
4
|
+
function parseData(rows, queryType) {
|
|
5
|
+
if (!rows || rows.length === 0)
|
|
6
|
+
return [];
|
|
7
|
+
switch (queryType) {
|
|
8
|
+
case 'dateRange':
|
|
9
|
+
return {
|
|
10
|
+
start: new Date(rows[0]?.min_date),
|
|
11
|
+
end: new Date(rows[0]?.max_date),
|
|
12
|
+
};
|
|
13
|
+
case 'rowCount':
|
|
14
|
+
return parseInt(rows[0]?.count);
|
|
15
|
+
case 'distinctStrings':
|
|
16
|
+
return rows.map((row) => {
|
|
17
|
+
return row['column_field'];
|
|
18
|
+
});
|
|
19
|
+
default:
|
|
20
|
+
return rows;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
4
23
|
// this function gets the data either from the self hosted endpoint or
|
|
5
24
|
// our cloud server
|
|
6
25
|
async function getData(client, cloudQueryEndpoint, noCred, hostedRequestBody, cloudRequestBody, method = 'POST') {
|
|
@@ -21,21 +40,45 @@ async function getData(client, cloudQueryEndpoint, noCred, hostedRequestBody, cl
|
|
|
21
40
|
return { success: false, errorMessage: responseJson.error };
|
|
22
41
|
}
|
|
23
42
|
let result;
|
|
24
|
-
if (
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
43
|
+
if (hostedRequestBody &&
|
|
44
|
+
hostedRequestBody.metadata &&
|
|
45
|
+
hostedRequestBody.metadata.task === 'report') {
|
|
46
|
+
if (responseJson.data?.data) {
|
|
47
|
+
result = {
|
|
48
|
+
fields: responseJson?.data.queries?.queryResults[0]?.fields,
|
|
49
|
+
...responseJson.data.data,
|
|
50
|
+
};
|
|
51
|
+
responseJson.data.data.queryOrder.forEach((queryKey, index) => {
|
|
52
|
+
result[queryKey] = parseData(responseJson.queries.queryResults[index].rows, queryKey);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
result = {
|
|
57
|
+
fields: responseJson?.queries?.queryResults[0]?.fields,
|
|
58
|
+
...responseJson.data,
|
|
59
|
+
};
|
|
60
|
+
responseJson.data.queryOrder.forEach((queryKey, index) => {
|
|
61
|
+
result[queryKey] = parseData(responseJson.queries.queryResults[index].rows, queryKey);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
31
64
|
}
|
|
32
65
|
else {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
66
|
+
if (responseJson.data?.data) {
|
|
67
|
+
result = {
|
|
68
|
+
fields: responseJson?.data.queries?.queryResults[0]?.fields,
|
|
69
|
+
...responseJson.data.data,
|
|
70
|
+
rows: responseJson?.data.queries?.queryResults[0]?.rows,
|
|
71
|
+
compareRows: responseJson?.data.queries?.queryResults[1]?.rows,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
result = {
|
|
76
|
+
fields: responseJson?.queries?.queryResults[0]?.fields,
|
|
77
|
+
...responseJson.data,
|
|
78
|
+
rows: responseJson?.queries?.queryResults[0]?.rows,
|
|
79
|
+
compareRows: responseJson?.queries?.queryResults[1]?.rows,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
39
82
|
}
|
|
40
83
|
if (responseJson.data.columns &&
|
|
41
84
|
responseJson.data.fields &&
|
|
@@ -7,4 +7,12 @@ export declare function convertComparisonRange(primaryRange: string, comparisonR
|
|
|
7
7
|
* Returns whether the xAxisFormat is a date format.
|
|
8
8
|
*/
|
|
9
9
|
export declare function isDateFormat(xAxisFormat: string): boolean;
|
|
10
|
+
export declare function getComparisonInterval(comparisonRange: {
|
|
11
|
+
startDate: Date;
|
|
12
|
+
endDate: Date;
|
|
13
|
+
}, dateBucket?: string): string | undefined;
|
|
14
|
+
export declare function getDateBucketFromRange(dateRange: {
|
|
15
|
+
start: Date;
|
|
16
|
+
end: Date;
|
|
17
|
+
}): "month" | "week" | "day" | "year";
|
|
10
18
|
//# sourceMappingURL=dates.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../../src/utils/dates.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../../src/utils/dates.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,UAYxB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,WAa/C;AAED,wBAAgB,qBAAqB,CACnC,eAAe,EAAE;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;CACf,EACD,UAAU,CAAC,EAAE,MAAM,sBAepB;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,qCAW3E"}
|