@quillsql/react 2.13.4 → 2.13.6
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.js +1 -1
- package/dist/cjs/ChartBuilder.d.ts +1 -1
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +6 -22
- package/dist/cjs/ChartEditor.d.ts +1 -1
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/Context.d.ts +21 -6
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +196 -18
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +9 -9
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +7 -7
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +0 -1
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
- package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +0 -22
- package/dist/cjs/QuillProvider.d.ts.map +1 -1
- package/dist/cjs/QuillProvider.js +2 -1
- package/dist/cjs/ReportBuilder.d.ts +0 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +4 -182
- package/dist/cjs/SQLEditor.d.ts +1 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +12 -8
- package/dist/cjs/components/Dashboard/DashboardTemplate.js +2 -2
- package/dist/cjs/components/Dashboard/DataLoader.js +1 -1
- package/dist/cjs/components/QuillMultiSelect.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelect.js +4 -3
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +4 -3
- package/dist/cjs/components/QuillSelect.js +3 -3
- package/dist/cjs/components/QuillSelectWithCombo.js +4 -4
- package/dist/cjs/components/QuillTable.d.ts.map +1 -1
- package/dist/cjs/components/QuillTable.js +46 -44
- package/dist/cjs/components/ReportBuilder/FilterModal.js +10 -10
- package/dist/cjs/components/ReportBuilder/FilterStack.js +2 -2
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +4 -3
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +19 -5
- package/dist/cjs/hooks/useDashboard.d.ts +22 -3
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +201 -127
- package/dist/cjs/hooks/useExport.d.ts.map +1 -1
- package/dist/cjs/hooks/useExport.js +12 -5
- package/dist/cjs/hooks/useOnClickOutside.d.ts +1 -1
- package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
- package/dist/cjs/hooks/useOnClickOutside.js +10 -6
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +3 -3
- package/dist/cjs/lib/utils.d.ts +1 -0
- package/dist/cjs/lib/utils.d.ts.map +1 -1
- package/dist/cjs/lib/utils.js +9 -1
- package/dist/cjs/models/Dashboard.d.ts +6 -1
- package/dist/cjs/models/Dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.js +3 -3
- package/dist/cjs/utils/columnProcessing.js +4 -4
- package/dist/cjs/utils/constants.d.ts +2 -1
- package/dist/cjs/utils/constants.d.ts.map +1 -1
- package/dist/cjs/utils/constants.js +3 -2
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +1 -2
- package/dist/cjs/utils/pivotConstructor.js +1 -1
- package/dist/esm/Chart.js +1 -1
- package/dist/esm/ChartBuilder.d.ts +1 -1
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +6 -22
- package/dist/esm/ChartEditor.d.ts +1 -1
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/Context.d.ts +21 -6
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +193 -18
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +9 -9
- package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/QuillDateRangePicker.js +7 -7
- package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +0 -1
- package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
- package/dist/esm/DateRangePicker/dateRangePickerUtils.js +0 -22
- package/dist/esm/QuillProvider.d.ts.map +1 -1
- package/dist/esm/QuillProvider.js +2 -1
- package/dist/esm/ReportBuilder.d.ts +0 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +3 -180
- package/dist/esm/SQLEditor.d.ts +1 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +13 -9
- package/dist/esm/components/Dashboard/DashboardTemplate.js +2 -2
- package/dist/esm/components/Dashboard/DataLoader.js +1 -1
- package/dist/esm/components/QuillMultiSelect.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelect.js +4 -3
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +4 -3
- package/dist/esm/components/QuillSelect.js +3 -3
- package/dist/esm/components/QuillSelectWithCombo.js +4 -4
- package/dist/esm/components/QuillTable.d.ts.map +1 -1
- package/dist/esm/components/QuillTable.js +46 -44
- package/dist/esm/components/ReportBuilder/FilterModal.js +10 -10
- package/dist/esm/components/ReportBuilder/FilterStack.js +1 -1
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +4 -3
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +19 -5
- package/dist/esm/hooks/useDashboard.d.ts +22 -3
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +200 -124
- package/dist/esm/hooks/useExport.d.ts.map +1 -1
- package/dist/esm/hooks/useExport.js +12 -5
- package/dist/esm/hooks/useOnClickOutside.d.ts +1 -1
- package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
- package/dist/esm/hooks/useOnClickOutside.js +10 -6
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +3 -3
- package/dist/esm/lib/utils.d.ts +1 -0
- package/dist/esm/lib/utils.d.ts.map +1 -1
- package/dist/esm/lib/utils.js +7 -0
- package/dist/esm/models/Dashboard.d.ts +6 -1
- package/dist/esm/models/Dashboard.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.js +3 -3
- package/dist/esm/utils/columnProcessing.js +4 -4
- package/dist/esm/utils/constants.d.ts +2 -1
- package/dist/esm/utils/constants.d.ts.map +1 -1
- package/dist/esm/utils/constants.js +2 -1
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +1 -2
- package/dist/esm/utils/pivotConstructor.js +1 -1
- package/package.json +20 -7
- package/dist/cjs/components/BigModal/BigModal.d.ts +0 -15
- package/dist/cjs/components/BigModal/BigModal.d.ts.map +0 -1
- package/dist/cjs/components/BigModal/BigModal.js +0 -81
- package/dist/esm/components/BigModal/BigModal.d.ts +0 -15
- package/dist/esm/components/BigModal/BigModal.d.ts.map +0 -1
- package/dist/esm/components/BigModal/BigModal.js +0 -56
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.useDashboard = exports.useReports = void 0;
|
|
3
|
+
exports.useDashboards = exports.useDashboard = exports.useReports = void 0;
|
|
7
4
|
const react_1 = require("react");
|
|
8
5
|
const Context_1 = require("../Context");
|
|
9
|
-
const dashboard_1 = require("../utils/dashboard");
|
|
10
6
|
const dateRangePickerUtils_1 = require("../DateRangePicker/dateRangePickerUtils");
|
|
11
|
-
const
|
|
7
|
+
const Filter_1 = require("../models/Filter");
|
|
12
8
|
const useReports = () => {
|
|
13
9
|
const [dashboard, dispatch] = (0, react_1.useContext)(Context_1.DashboardContext);
|
|
14
10
|
const reloadReport = (id) => {
|
|
@@ -31,17 +27,19 @@ const useReports = () => {
|
|
|
31
27
|
};
|
|
32
28
|
exports.useReports = useReports;
|
|
33
29
|
const useDashboard = (dashboardName) => {
|
|
34
|
-
const
|
|
30
|
+
const { dashboardConfig, loadDashboard } = (0, react_1.useContext)(Context_1.DashboardConfigContext);
|
|
35
31
|
const { dashboardFilters, loadFiltersForDashboard } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
|
|
36
|
-
|
|
37
|
-
const [
|
|
38
|
-
const [
|
|
39
|
-
const
|
|
40
|
-
const loading = (0, react_1.useMemo)(() => isLoading ||
|
|
32
|
+
//TODO: handle error states
|
|
33
|
+
// const [error, setError] = useState<any>(null);
|
|
34
|
+
const [, isClientLoading] = (0, react_1.useContext)(Context_1.ClientContext);
|
|
35
|
+
const loading = (0, react_1.useMemo)(() => !dashboardName ||
|
|
41
36
|
isClientLoading ||
|
|
37
|
+
dashboardConfig[dashboardName]?.loading ||
|
|
42
38
|
(dashboardConfig[dashboardName] &&
|
|
43
|
-
!dashboardConfig[dashboardName]?.sections), [
|
|
39
|
+
!dashboardConfig[dashboardName]?.config.sections), [isClientLoading, dashboardConfig, dashboardName]);
|
|
44
40
|
const handleReload = async (overrideDashboardName, fetchFromServer = false, reportAction, overrideFilters) => {
|
|
41
|
+
if (!dashboardName)
|
|
42
|
+
return;
|
|
45
43
|
if (overrideFilters) {
|
|
46
44
|
// Pull the date filter out of the override filters, process it, and append it to the filters
|
|
47
45
|
const dateFilter = overrideFilters.filters.find((f) => f.filterType === 'date_range');
|
|
@@ -52,7 +50,7 @@ const useDashboard = (dashboardName) => {
|
|
|
52
50
|
...dateFilter,
|
|
53
51
|
dateField: [
|
|
54
52
|
...new Map(Object.values(dashboardConfig[overrideDashboardName ?? dashboardName]
|
|
55
|
-
?.sections ?? {})
|
|
53
|
+
?.config.sections ?? {})
|
|
56
54
|
.flat()
|
|
57
55
|
.map((report) => {
|
|
58
56
|
const key = JSON.stringify(report.dateField);
|
|
@@ -66,16 +64,29 @@ const useDashboard = (dashboardName) => {
|
|
|
66
64
|
], overrideFilters.editedFilterLabel);
|
|
67
65
|
return;
|
|
68
66
|
}
|
|
69
|
-
const dashboard = await
|
|
67
|
+
const dashboard = await loadDashboard(overrideDashboardName ?? dashboardName, fetchFromServer, reportAction);
|
|
70
68
|
if (!fetchFromServer &&
|
|
71
|
-
Object.keys(dashboardFilters[dashboardName] ?? {}).length)
|
|
69
|
+
Object.keys(dashboardFilters[dashboardName] ?? {}).length) {
|
|
72
70
|
return;
|
|
71
|
+
}
|
|
72
|
+
const comparisonRangeStart = dashboard?.dateFilter?.comparisonRange?.startDate ??
|
|
73
|
+
dateRangePickerUtils_1.COMPARISON_RANGE[dashboard?.dateFilter?.defaultComparisonRange ??
|
|
74
|
+
'NO_COMPARISON']({
|
|
75
|
+
start: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter?.primaryRange?.value ?? 'LAST_30_DAYS']?.start,
|
|
76
|
+
end: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter?.primaryRange?.value ?? 'LAST_30_DAYS']?.end,
|
|
77
|
+
})?.start;
|
|
78
|
+
const comparisonRangeEnd = dashboard?.dateFilter?.comparisonRange?.endDate ??
|
|
79
|
+
dateRangePickerUtils_1.COMPARISON_RANGE[dashboard?.dateFilter?.defaultComparisonRange ??
|
|
80
|
+
'NO_COMPARISON']({
|
|
81
|
+
start: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter?.primaryRange?.value ?? 'LAST_30_DAYS']?.start,
|
|
82
|
+
end: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter?.primaryRange?.value ?? 'LAST_30_DAYS']?.end,
|
|
83
|
+
})?.end;
|
|
73
84
|
const dateFilter = dashboard?.dateFilter
|
|
74
85
|
? {
|
|
75
86
|
...dashboard?.dateFilter,
|
|
76
|
-
startDate: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ?? 'LAST_30_DAYS']
|
|
77
|
-
endDate: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ?? 'LAST_30_DAYS']
|
|
78
|
-
filterType:
|
|
87
|
+
startDate: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ?? 'LAST_30_DAYS'].start,
|
|
88
|
+
endDate: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ?? 'LAST_30_DAYS'].end,
|
|
89
|
+
filterType: Filter_1.DashboardFilterType.Date,
|
|
79
90
|
dateField: [
|
|
80
91
|
...new Map(Object.values(dashboard?.sections ?? {})
|
|
81
92
|
.flat()
|
|
@@ -86,28 +97,15 @@ const useDashboard = (dashboardName) => {
|
|
|
86
97
|
],
|
|
87
98
|
preset: dashboard?.dateFilter.primaryRange,
|
|
88
99
|
dashboardName: overrideDashboardName ?? dashboardName,
|
|
89
|
-
comparisonRange: dashboard?.dateFilter.comparison
|
|
100
|
+
comparisonRange: dashboard?.dateFilter.comparison &&
|
|
101
|
+
comparisonRangeStart &&
|
|
102
|
+
comparisonRangeEnd
|
|
90
103
|
? {
|
|
91
|
-
startDate:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
'LAST_30_DAYS']?.start,
|
|
97
|
-
end: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ??
|
|
98
|
-
'LAST_30_DAYS']?.end,
|
|
99
|
-
})?.start,
|
|
100
|
-
endDate: dashboard?.dateFilter.comparsionRange?.endDate ??
|
|
101
|
-
dateRangePickerUtils_1.COMPARISON_RANGE[dashboard?.dateFilter
|
|
102
|
-
.defaultComparisonRange ??
|
|
103
|
-
'NO_COMPARISON']({
|
|
104
|
-
start: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ??
|
|
105
|
-
'LAST_30_DAYS']?.start,
|
|
106
|
-
end: dateRangePickerUtils_1.PRIMARY_RANGE[dashboard?.dateFilter.primaryRange?.value ??
|
|
107
|
-
'LAST_30_DAYS']?.end,
|
|
108
|
-
})?.end,
|
|
109
|
-
value: dashboard?.dateFilter.comparsionRange?.value ??
|
|
110
|
-
dashboard.dateFilter?.defaultComparisonRange,
|
|
104
|
+
startDate: comparisonRangeStart,
|
|
105
|
+
endDate: comparisonRangeEnd,
|
|
106
|
+
value: dashboard?.dateFilter.comparisonRange?.value ??
|
|
107
|
+
dashboard.dateFilter?.defaultComparisonRange ??
|
|
108
|
+
'NO_COMPARISON',
|
|
111
109
|
}
|
|
112
110
|
: undefined,
|
|
113
111
|
}
|
|
@@ -118,102 +116,178 @@ const useDashboard = (dashboardName) => {
|
|
|
118
116
|
...(dashboard?.filters ?? []),
|
|
119
117
|
]);
|
|
120
118
|
};
|
|
121
|
-
async function getDashboards(dashboardName, fetchFromServer = false, reportAction) {
|
|
122
|
-
let curDashboardConfig = dashboardConfig[dashboardName];
|
|
123
|
-
if (!fetchFromServer && curDashboardConfig?.sections) {
|
|
124
|
-
if (reportAction?.action === 'delete') {
|
|
125
|
-
curDashboardConfig = {
|
|
126
|
-
...curDashboardConfig,
|
|
127
|
-
sections: Object.fromEntries(Object.entries(curDashboardConfig?.sections ?? {}).map(([sectionKey, reports]) => [
|
|
128
|
-
sectionKey,
|
|
129
|
-
reports.filter((report) => report.id !== reportAction.report.id),
|
|
130
|
-
])),
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
else if (reportAction?.action === 'upsert') {
|
|
134
|
-
const containsReport = Object.values(curDashboardConfig?.sections ?? {})
|
|
135
|
-
.flat()
|
|
136
|
-
.some((report) => report.id === reportAction?.report.id);
|
|
137
|
-
curDashboardConfig = {
|
|
138
|
-
...curDashboardConfig,
|
|
139
|
-
sections: Object.fromEntries(Object.entries(curDashboardConfig?.sections ?? {}).map(([sectionKey, reports]) => [
|
|
140
|
-
sectionKey,
|
|
141
|
-
containsReport
|
|
142
|
-
? reports.map((report) => {
|
|
143
|
-
return {
|
|
144
|
-
report,
|
|
145
|
-
...(reportAction?.report.id === report.id
|
|
146
|
-
? reportAction?.report
|
|
147
|
-
: dashboard[report.id]),
|
|
148
|
-
_id: report.id,
|
|
149
|
-
id: report.id,
|
|
150
|
-
};
|
|
151
|
-
})
|
|
152
|
-
: [
|
|
153
|
-
...(reports ?? []),
|
|
154
|
-
{
|
|
155
|
-
report: reportAction?.report,
|
|
156
|
-
...dashboard[reportAction?.report.id],
|
|
157
|
-
id: reportAction?.report.id,
|
|
158
|
-
_id: reportAction?.report.id,
|
|
159
|
-
},
|
|
160
|
-
],
|
|
161
|
-
])),
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
dashboardConfigContext({
|
|
165
|
-
type: 'UPDATE_DASHBOARD',
|
|
166
|
-
id: dashboardName,
|
|
167
|
-
data: curDashboardConfig,
|
|
168
|
-
});
|
|
169
|
-
setIsLoading(false);
|
|
170
|
-
return curDashboardConfig;
|
|
171
|
-
}
|
|
172
|
-
if (!fetchFromServer &&
|
|
173
|
-
curDashboardConfig &&
|
|
174
|
-
curDashboardConfig.newQueries) {
|
|
175
|
-
setIsLoading(false);
|
|
176
|
-
return curDashboardConfig;
|
|
177
|
-
}
|
|
178
|
-
if (!client || !client.publicKey || !client.organizationId) {
|
|
179
|
-
return curDashboardConfig;
|
|
180
|
-
}
|
|
181
|
-
if (dashboardName === null || dashboardName === undefined)
|
|
182
|
-
return curDashboardConfig;
|
|
183
|
-
try {
|
|
184
|
-
setIsLoading(true);
|
|
185
|
-
const resp = await (0, dashboard_1.getDashboard)(dashboardName, client);
|
|
186
|
-
// if dashboard has changed
|
|
187
|
-
if (!(0, fast_deep_equal_1.default)(resp, curDashboardConfig)) {
|
|
188
|
-
dashboardConfigContext({
|
|
189
|
-
type: 'ADD_DASHBOARD',
|
|
190
|
-
id: dashboardName,
|
|
191
|
-
data: { ...resp },
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
setError(null);
|
|
195
|
-
return resp;
|
|
196
|
-
}
|
|
197
|
-
catch (error) {
|
|
198
|
-
setError(error);
|
|
199
|
-
console.error('Error fetching data:', error);
|
|
200
|
-
}
|
|
201
|
-
finally {
|
|
202
|
-
setIsLoading(false);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
119
|
function isDashboardFilterLoading(filterName) {
|
|
120
|
+
if (!dashboardName)
|
|
121
|
+
return true;
|
|
206
122
|
return dashboardFilters[dashboardName]?.[filterName]?.loading;
|
|
207
123
|
}
|
|
208
124
|
return {
|
|
209
|
-
data: loading
|
|
210
|
-
|
|
125
|
+
data: loading || !dashboardName
|
|
126
|
+
? null
|
|
127
|
+
: (dashboardConfig[dashboardName]?.config ?? null),
|
|
128
|
+
dashboardFilters: dashboardName && dashboardFilters[dashboardName] !== undefined
|
|
211
129
|
? Object.values(dashboardFilters[dashboardName] ?? {}).map((f) => f.filter)
|
|
212
130
|
: null,
|
|
213
131
|
isLoading: loading,
|
|
214
132
|
isDashboardFilterLoading,
|
|
215
|
-
error,
|
|
216
133
|
reload: handleReload,
|
|
217
134
|
};
|
|
218
135
|
};
|
|
219
136
|
exports.useDashboard = useDashboard;
|
|
137
|
+
const useDashboards = () => {
|
|
138
|
+
const { dashboardConfig, dashboardConfigDispatch } = (0, react_1.useContext)(Context_1.DashboardConfigContext);
|
|
139
|
+
const { loadFiltersForDashboard, dispatch: dashboardFiltersDispatch } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
|
|
140
|
+
const [client, isLoading] = (0, react_1.useContext)(Context_1.ClientContext);
|
|
141
|
+
const dashboards = (0, react_1.useMemo)(() => {
|
|
142
|
+
return Object.values(dashboardConfig).map((dashboard) => {
|
|
143
|
+
return {
|
|
144
|
+
name: dashboard.config.name,
|
|
145
|
+
id: dashboard.config.dashboardId,
|
|
146
|
+
reports: Object.values(dashboard.config.sections ?? {}).flat(),
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
}, [dashboardConfig]);
|
|
150
|
+
const createDashboard = async ({ name, filters, dateFilter, }) => {
|
|
151
|
+
if (!client)
|
|
152
|
+
return;
|
|
153
|
+
dashboardConfigDispatch({
|
|
154
|
+
type: 'UPDATE_DASHBOARD',
|
|
155
|
+
id: name,
|
|
156
|
+
data: {
|
|
157
|
+
config: {
|
|
158
|
+
dashboardId: name,
|
|
159
|
+
name,
|
|
160
|
+
filters,
|
|
161
|
+
dateFilter,
|
|
162
|
+
},
|
|
163
|
+
loading: true,
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
const body = {
|
|
167
|
+
newDashboardName: name.trim(),
|
|
168
|
+
filters,
|
|
169
|
+
dateFilter,
|
|
170
|
+
name: name.trim(),
|
|
171
|
+
task: 'edit-dashboard',
|
|
172
|
+
clientId: client.clientId,
|
|
173
|
+
};
|
|
174
|
+
try {
|
|
175
|
+
const response = await fetch(client.queryEndpoint, {
|
|
176
|
+
method: 'POST',
|
|
177
|
+
headers: {
|
|
178
|
+
...client.queryHeaders,
|
|
179
|
+
'Content-Type': 'application/json',
|
|
180
|
+
},
|
|
181
|
+
body: JSON.stringify({ metadata: body }),
|
|
182
|
+
});
|
|
183
|
+
const updated = await response.json();
|
|
184
|
+
dashboardConfigDispatch({
|
|
185
|
+
type: 'UPDATE_DASHBOARD',
|
|
186
|
+
id: name,
|
|
187
|
+
data: { config: updated.data.dashboard, loading: false },
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
catch (e) {
|
|
191
|
+
console.error(e);
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
const updateDashboard = async (name, { newName, filters, dateFilter, }) => {
|
|
195
|
+
if (!client)
|
|
196
|
+
return;
|
|
197
|
+
const dashboard = dashboardConfig[name]?.config;
|
|
198
|
+
dashboardConfigDispatch({
|
|
199
|
+
type: 'DELETE_DASHBOARD',
|
|
200
|
+
id: name,
|
|
201
|
+
});
|
|
202
|
+
dashboardFiltersDispatch({
|
|
203
|
+
type: 'DELETE_DASHBOARD_FILTERS',
|
|
204
|
+
dashboardName: name,
|
|
205
|
+
});
|
|
206
|
+
const body = {
|
|
207
|
+
newDashboardName: newName.trim(),
|
|
208
|
+
filters,
|
|
209
|
+
dateFilter,
|
|
210
|
+
name: name.trim(),
|
|
211
|
+
task: 'edit-dashboard',
|
|
212
|
+
clientId: client.clientId,
|
|
213
|
+
};
|
|
214
|
+
try {
|
|
215
|
+
const response = await fetch(client.queryEndpoint, {
|
|
216
|
+
method: 'POST',
|
|
217
|
+
headers: {
|
|
218
|
+
...client.queryHeaders,
|
|
219
|
+
'Content-Type': 'application/json',
|
|
220
|
+
},
|
|
221
|
+
body: JSON.stringify({ metadata: body }),
|
|
222
|
+
});
|
|
223
|
+
const updated = await response.json();
|
|
224
|
+
dashboardConfigDispatch({
|
|
225
|
+
type: 'ADD_DASHBOARD',
|
|
226
|
+
id: updated.data.dashboard.name,
|
|
227
|
+
data: {
|
|
228
|
+
...dashboard,
|
|
229
|
+
...updated.data.dashboard,
|
|
230
|
+
},
|
|
231
|
+
});
|
|
232
|
+
const updatedDateFilter = updated.data.dashboard.dateFilter
|
|
233
|
+
? {
|
|
234
|
+
...updated.data.dashboard.dateFilter,
|
|
235
|
+
dashboardName: updated.data.dashboard.name,
|
|
236
|
+
preset: updated.data.dashboard.dateFilter.primaryRange,
|
|
237
|
+
filterType: Filter_1.DashboardFilterType.Date,
|
|
238
|
+
dateField: [
|
|
239
|
+
...new Map(Object.values(dashboardConfig[updated.data.dashboard.name]?.config
|
|
240
|
+
.sections ?? {})
|
|
241
|
+
.flat()
|
|
242
|
+
.map((report) => {
|
|
243
|
+
const key = JSON.stringify(report.dateField);
|
|
244
|
+
return [key, report.dateField];
|
|
245
|
+
})).values(),
|
|
246
|
+
],
|
|
247
|
+
startDate: dateRangePickerUtils_1.PRIMARY_RANGE[updated.data.dashboard.dateFilter.primaryRange?.value ??
|
|
248
|
+
'LAST_30_DAYS'].start,
|
|
249
|
+
endDate: dateRangePickerUtils_1.PRIMARY_RANGE[updated.data.dashboard.dateFilter.primaryRange?.value ??
|
|
250
|
+
'LAST_30_DAYS'].end,
|
|
251
|
+
}
|
|
252
|
+
: undefined;
|
|
253
|
+
loadFiltersForDashboard(updated.data.dashboard.name, [
|
|
254
|
+
...(updatedDateFilter ? [updatedDateFilter] : []),
|
|
255
|
+
...(updated.data.dashboard.filters ?? []),
|
|
256
|
+
]);
|
|
257
|
+
}
|
|
258
|
+
catch (e) {
|
|
259
|
+
console.error(e);
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
const deleteDashboard = async (name) => {
|
|
263
|
+
if (!client)
|
|
264
|
+
return;
|
|
265
|
+
await fetch(client.queryEndpoint, {
|
|
266
|
+
method: 'POST',
|
|
267
|
+
headers: {
|
|
268
|
+
...client.queryHeaders,
|
|
269
|
+
'Content-Type': 'application/json',
|
|
270
|
+
},
|
|
271
|
+
body: JSON.stringify({
|
|
272
|
+
metadata: {
|
|
273
|
+
task: 'delete-dashboard',
|
|
274
|
+
clientId: client.clientId,
|
|
275
|
+
databaseType: client.databaseType,
|
|
276
|
+
name,
|
|
277
|
+
},
|
|
278
|
+
}),
|
|
279
|
+
});
|
|
280
|
+
dashboardConfigDispatch({
|
|
281
|
+
type: 'DELETE_DASHBOARD',
|
|
282
|
+
id: name,
|
|
283
|
+
});
|
|
284
|
+
};
|
|
285
|
+
return {
|
|
286
|
+
dashboards: isLoading ? null : dashboards,
|
|
287
|
+
isLoading,
|
|
288
|
+
createDashboard,
|
|
289
|
+
updateDashboard,
|
|
290
|
+
deleteDashboard,
|
|
291
|
+
};
|
|
292
|
+
};
|
|
293
|
+
exports.useDashboards = useDashboards;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useExport.d.ts","sourceRoot":"","sources":["../../../src/hooks/useExport.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAwD/C,eAAO,MAAM,SAAS,cACT,MAAM;uCAOmB,aAAa,KAAK,WAAW;;;;;;;
|
|
1
|
+
{"version":3,"file":"useExport.d.ts","sourceRoot":"","sources":["../../../src/hooks/useExport.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAwD/C,eAAO,MAAM,SAAS,cACT,MAAM;uCAOmB,aAAa,KAAK,WAAW;;;;;;;CAqMlE,CAAC;AAEF,UAAU,aAAa;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B"}
|
|
@@ -57,11 +57,18 @@ sectionField, } = {}) => {
|
|
|
57
57
|
const { dashboardFilters } = (0, react_1.useContext)(Context_1.DashboardFiltersContext);
|
|
58
58
|
const [dashboard] = (0, react_1.useContext)(Context_1.DashboardContext);
|
|
59
59
|
const specificDashboardFilters = (0, react_1.useMemo)(() => {
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
if (!reportId) {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
const dashboardName = dashboard[reportId]?.dashboardName;
|
|
64
|
+
if (!dashboardName || !dashboardFilters[dashboardName]) {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
// @ts-ignore
|
|
68
|
+
return Object.values(dashboardFilters[dashboardName]).map((dashboardFilter) => {
|
|
62
69
|
return dashboardFilter.filter;
|
|
63
70
|
});
|
|
64
|
-
}, [dashboardFilters]);
|
|
71
|
+
}, [dashboardFilters, dashboard, reportId]);
|
|
65
72
|
// const [theme] = useContext(ThemeContext);
|
|
66
73
|
const [client] = (0, react_1.useContext)(Context_1.ClientContext);
|
|
67
74
|
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
@@ -76,8 +83,8 @@ sectionField, } = {}) => {
|
|
|
76
83
|
setIsLoading(true);
|
|
77
84
|
const resp = await getExportData(client, specificDashboardFilters, reportId);
|
|
78
85
|
(0, csv_1.downloadCSV)({
|
|
79
|
-
rows: resp.rows,
|
|
80
|
-
fields: resp.columns,
|
|
86
|
+
rows: resp.pivot && resp.pivotRows ? resp.pivotRows : resp.rows,
|
|
87
|
+
fields: resp.pivot && resp.pivotColumns ? resp.pivotColumns : resp.columns,
|
|
81
88
|
name: resp.name,
|
|
82
89
|
});
|
|
83
90
|
setIsLoading(false);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
declare const useOnClickOutside: (ref: React.RefObject<HTMLDivElement>, handler: (event: any) => void) => void;
|
|
1
|
+
declare const useOnClickOutside: (ref: React.RefObject<HTMLDivElement>, handler: (event: any) => void, listening?: boolean) => void;
|
|
2
2
|
export default useOnClickOutside;
|
|
3
3
|
//# sourceMappingURL=useOnClickOutside.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOnClickOutside.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOnClickOutside.tsx"],"names":[],"mappings":"AAEA,QAAA,MAAM,iBAAiB,QAChB,MAAM,SAAS,CAAC,cAAc,CAAC,mBACjB,GAAG,KAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"useOnClickOutside.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOnClickOutside.tsx"],"names":[],"mappings":"AAEA,QAAA,MAAM,iBAAiB,QAChB,MAAM,SAAS,CAAC,cAAc,CAAC,mBACjB,GAAG,KAAG,IAAI,cACjB,OAAO,SAqBpB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const react_1 = require("react");
|
|
4
|
-
const useOnClickOutside = (ref, handler) => {
|
|
4
|
+
const useOnClickOutside = (ref, handler, listening) => {
|
|
5
5
|
(0, react_1.useEffect)(() => {
|
|
6
6
|
const listener = (event) => {
|
|
7
7
|
if (!ref.current || ref.current.contains(event.target)) {
|
|
@@ -9,14 +9,18 @@ const useOnClickOutside = (ref, handler) => {
|
|
|
9
9
|
}
|
|
10
10
|
handler(event);
|
|
11
11
|
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
if (listening !== false) {
|
|
13
|
+
document.addEventListener('mousedown', listener);
|
|
14
|
+
document.addEventListener('touchstart', listener);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
document.removeEventListener('mousedown', listener);
|
|
18
|
+
document.removeEventListener('touchstart', listener);
|
|
19
|
+
}
|
|
15
20
|
return () => {
|
|
16
|
-
// document.removeEventListener('click', listener);
|
|
17
21
|
document.removeEventListener('mousedown', listener);
|
|
18
22
|
document.removeEventListener('touchstart', listener);
|
|
19
23
|
};
|
|
20
|
-
}, [ref, handler]);
|
|
24
|
+
}, [ref, handler, listening]);
|
|
21
25
|
};
|
|
22
26
|
exports.default = useOnClickOutside;
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export type { ReportBuilderProps } from './ReportBuilder';
|
|
|
14
14
|
export { default as ChartEditor } from './ChartEditor';
|
|
15
15
|
export type { ChartEditorProps } from './ChartEditor';
|
|
16
16
|
export { quillFormat as format } from './utils/valueFormatter';
|
|
17
|
-
export { useDashboard, useReports } from './hooks/useDashboard';
|
|
17
|
+
export { useDashboard, useReports, useDashboards } from './hooks/useDashboard';
|
|
18
18
|
export { useQuill, usePivot } from './hooks/useQuill';
|
|
19
19
|
export { useExport } from './hooks/useExport';
|
|
20
20
|
export { useMemoizedRows } from './hooks/useFormat';
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChF,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACxE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,WAAW,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChF,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACxE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,WAAW,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,MAAM,EACN,mBAAmB,EACnB,WAAW,GACZ,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,YAAY,EACV,6BAA6B,EAC7B,qBAAqB,EACrB,SAAS,GACV,MAAM,wCAAwC,CAAC;AAChD,YAAY,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Calculation = exports.ThemeContext = exports.downloadCSV = exports.useVirtualTables = exports.useAskQuill = exports.useMemoizedRows = exports.useExport = exports.usePivot = exports.useQuill = exports.useReports = exports.useDashboard = exports.format = exports.ChartEditor = exports.ReportBuilder = exports.SchemaListComponent = exports.SQLEditor = exports.Table = exports.Chart = exports.QuillProvider = exports.Dashboard = void 0;
|
|
6
|
+
exports.Calculation = exports.ThemeContext = exports.downloadCSV = exports.useVirtualTables = exports.useAskQuill = exports.useMemoizedRows = exports.useExport = exports.usePivot = exports.useQuill = exports.useDashboards = exports.useReports = exports.useDashboard = exports.format = exports.ChartEditor = exports.ReportBuilder = exports.SchemaListComponent = exports.SQLEditor = exports.Table = exports.Chart = exports.QuillProvider = exports.Dashboard = void 0;
|
|
7
7
|
// src/index.ts
|
|
8
8
|
var Dashboard_1 = require("./Dashboard");
|
|
9
9
|
Object.defineProperty(exports, "Dashboard", { enumerable: true, get: function () { return __importDefault(Dashboard_1).default; } });
|
|
@@ -25,6 +25,7 @@ Object.defineProperty(exports, "format", { enumerable: true, get: function () {
|
|
|
25
25
|
var useDashboard_1 = require("./hooks/useDashboard");
|
|
26
26
|
Object.defineProperty(exports, "useDashboard", { enumerable: true, get: function () { return useDashboard_1.useDashboard; } });
|
|
27
27
|
Object.defineProperty(exports, "useReports", { enumerable: true, get: function () { return useDashboard_1.useReports; } });
|
|
28
|
+
Object.defineProperty(exports, "useDashboards", { enumerable: true, get: function () { return useDashboard_1.useDashboards; } });
|
|
28
29
|
var useQuill_1 = require("./hooks/useQuill");
|
|
29
30
|
Object.defineProperty(exports, "useQuill", { enumerable: true, get: function () { return useQuill_1.useQuill; } });
|
|
30
31
|
Object.defineProperty(exports, "usePivot", { enumerable: true, get: function () { return useQuill_1.usePivot; } });
|
|
@@ -928,11 +928,11 @@ function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLim
|
|
|
928
928
|
let value;
|
|
929
929
|
const nextRowValue = isDateField(pivot.rowFieldType || '')
|
|
930
930
|
? // @ts-ignore
|
|
931
|
-
uniqueRows[rowIndex + 1] ?? (0, date_fns_1.endOfDay)(rowDateRange.end)
|
|
931
|
+
(uniqueRows[rowIndex + 1] ?? (0, date_fns_1.endOfDay)(rowDateRange.end))
|
|
932
932
|
: null;
|
|
933
933
|
const compRowValue = compUniqueRows[rowIndex];
|
|
934
934
|
const compNextRowValue = isDateField(pivot.rowFieldType || '')
|
|
935
|
-
? compUniqueRows[rowIndex + 1] ?? (0, date_fns_1.endOfDay)(compRowDateRange.end)
|
|
935
|
+
? (compUniqueRows[rowIndex + 1] ?? (0, date_fns_1.endOfDay)(compRowDateRange.end))
|
|
936
936
|
: null;
|
|
937
937
|
if (pivot.columnField) {
|
|
938
938
|
const columnDateRange = getDateRange(dateRange, pivot.columnField, data);
|
|
@@ -1150,7 +1150,7 @@ function generatePivotTableInMemory(pivot, data, dateRange, isComparison, rowLim
|
|
|
1150
1150
|
index === 1
|
|
1151
1151
|
? `comparison Count`
|
|
1152
1152
|
: isDateField(pivot.columnFieldType || '')
|
|
1153
|
-
? COL_DATE_MAP[getDateString(column, dateRange, dateBucket)] ?? 'comparison'
|
|
1153
|
+
? (COL_DATE_MAP[getDateString(column, dateRange, dateBucket)] ?? 'comparison')
|
|
1154
1154
|
: `comparison ${(0, textProcessing_1.snakeAndCamelCaseToTitleCase)(columnName)}`,
|
|
1155
1155
|
field: `comparison_${columnName}`,
|
|
1156
1156
|
};
|
package/dist/cjs/lib/utils.d.ts
CHANGED
|
@@ -7,4 +7,5 @@ export declare const isValueInArray: (value: any, array: any[]) => boolean;
|
|
|
7
7
|
export declare const stringIsNumeric: (str: string | undefined) => boolean;
|
|
8
8
|
export declare const stringEndsWithNumber: (str: string) => boolean;
|
|
9
9
|
export declare function mergeRefs<T = any>(refs: Array<React.MutableRefObject<T> | React.LegacyRef<T>>): React.RefCallback<T>;
|
|
10
|
+
export declare const createDebounce: (func: any, delay: number) => (...args: any) => void;
|
|
10
11
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,eAAO,MAAM,qBAAqB,EAAE,cAClB,CAAC;AAEnB,eAAO,MAAM,eAAe,QAAS,MAAM,EAAE,WACO,CAAC;AAErD,eAAO,MAAM,oBAAoB,UAAW,GAAG,SAAS,GAAG,EAAE,KAAG,GAAG,EAMlE,CAAC;AAEF,eAAO,MAAM,cAAc,UAAW,GAAG,SAAS,GAAG,EAAE,KAAG,OAOzD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAS,MAAM,GAAG,SAAS,KAAG,OAEzD,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAAS,MAAM,KAAG,OAElD,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,GAAG,GAAG,EAC/B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAC1D,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAUtB"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,eAAO,MAAM,qBAAqB,EAAE,cAClB,CAAC;AAEnB,eAAO,MAAM,eAAe,QAAS,MAAM,EAAE,WACO,CAAC;AAErD,eAAO,MAAM,oBAAoB,UAAW,GAAG,SAAS,GAAG,EAAE,KAAG,GAAG,EAMlE,CAAC;AAEF,eAAO,MAAM,cAAc,UAAW,GAAG,SAAS,GAAG,EAAE,KAAG,OAOzD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAS,MAAM,GAAG,SAAS,KAAG,OAEzD,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAAS,MAAM,KAAG,OAElD,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,GAAG,GAAG,EAC/B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAC1D,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAUtB;AAED,eAAO,MAAM,cAAc,SAAU,GAAG,SAAS,MAAM,eAEpC,GAAG,SAIrB,CAAC"}
|
package/dist/cjs/lib/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.mergeRefs = exports.stringEndsWithNumber = exports.stringIsNumeric = exports.isValueInArray = exports.removeValueFromArray = exports.sumNumericArray = exports.defaultValueFormatter = void 0;
|
|
3
|
+
exports.createDebounce = exports.mergeRefs = exports.stringEndsWithNumber = exports.stringIsNumeric = exports.isValueInArray = exports.removeValueFromArray = exports.sumNumericArray = exports.defaultValueFormatter = void 0;
|
|
4
4
|
const defaultValueFormatter = (value) => value.toString();
|
|
5
5
|
exports.defaultValueFormatter = defaultValueFormatter;
|
|
6
6
|
const sumNumericArray = (arr) => arr.reduce((prefixSum, num) => prefixSum + num, 0);
|
|
@@ -43,3 +43,11 @@ function mergeRefs(refs) {
|
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
45
|
exports.mergeRefs = mergeRefs;
|
|
46
|
+
const createDebounce = (func, delay) => {
|
|
47
|
+
let timeoutId;
|
|
48
|
+
return (...args) => {
|
|
49
|
+
clearTimeout(timeoutId);
|
|
50
|
+
timeoutId = setTimeout(() => func(...args), delay);
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
exports.createDebounce = createDebounce;
|
|
@@ -4,11 +4,16 @@ export type DashboardConfig = {
|
|
|
4
4
|
dashboardId: string;
|
|
5
5
|
name: string;
|
|
6
6
|
filters: DashboardStringFilter[];
|
|
7
|
-
dateFilter
|
|
7
|
+
dateFilter?: DashboardDateFilter;
|
|
8
8
|
customFiltersEnabled?: boolean;
|
|
9
9
|
sections?: {
|
|
10
10
|
[key: string]: QuillReport[];
|
|
11
11
|
};
|
|
12
12
|
newQueries?: QuillReport[];
|
|
13
13
|
};
|
|
14
|
+
export type Dashboard = {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
reports: QuillReport[];
|
|
18
|
+
};
|
|
14
19
|
//# sourceMappingURL=Dashboard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../../src/models/Dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,UAAU,EAAE,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../../src/models/Dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,EAAE;QACT,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;KAC9B,CAAC;IACF,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB,CAAC"}
|
|
@@ -284,7 +284,7 @@ const queryPatterns = [
|
|
|
284
284
|
WHERE transaction_date >= DATEADD(day, -90, GETDATE())
|
|
285
285
|
`,
|
|
286
286
|
value: function (astWhere) {
|
|
287
|
-
return -astWhere.right?.args?.value[1]?.value
|
|
287
|
+
return -astWhere.right?.args?.value[1]?.value;
|
|
288
288
|
},
|
|
289
289
|
unit: function (astWhere) {
|
|
290
290
|
return astWhere.right?.args?.value[0]?.column?.expr?.value ?? null;
|
|
@@ -393,7 +393,7 @@ const queryPatterns = [
|
|
|
393
393
|
WHERE transaction_date >= DATEADD(day, -90, CURRENT_DATE)
|
|
394
394
|
`,
|
|
395
395
|
value: function (astWhere) {
|
|
396
|
-
return -astWhere.right?.args?.value[1]?.value
|
|
396
|
+
return -astWhere.right?.args?.value[1]?.value;
|
|
397
397
|
},
|
|
398
398
|
unit: function (astWhere) {
|
|
399
399
|
return astWhere.right?.args?.value[0]?.column?.expr?.value ?? null;
|
|
@@ -600,7 +600,7 @@ const queryPatterns = [
|
|
|
600
600
|
WHERE transaction_date >= DATEADD(DAY, -90, CURRENT_DATE())
|
|
601
601
|
`,
|
|
602
602
|
value: function (astWhere) {
|
|
603
|
-
return -astWhere.right?.args?.value[1]?.value
|
|
603
|
+
return -astWhere.right?.args?.value[1]?.value;
|
|
604
604
|
},
|
|
605
605
|
unit: function (astWhere) {
|
|
606
606
|
return astWhere.right?.args?.value[0]?.column.toLowerCase() ?? null;
|
|
@@ -136,10 +136,10 @@ function convertPostgresColumn(field) {
|
|
|
136
136
|
jsType = 'string';
|
|
137
137
|
}
|
|
138
138
|
return {
|
|
139
|
-
label: 'field' in field
|
|
139
|
+
label: ('field' in field
|
|
140
140
|
? (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(field.field)
|
|
141
|
-
: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(field.name),
|
|
142
|
-
field: 'field' in field ? field.field : field.name,
|
|
141
|
+
: (0, textProcessing_1.snakeAndCamelCaseToTitleCase)(field.name)) ?? '',
|
|
142
|
+
field: ('field' in field ? field.field : field.name) ?? '',
|
|
143
143
|
format,
|
|
144
144
|
fieldType,
|
|
145
145
|
dataTypeID: field.dataTypeID,
|
|
@@ -324,7 +324,7 @@ const getYAxisFields = (report) => {
|
|
|
324
324
|
}
|
|
325
325
|
else {
|
|
326
326
|
if (curDateFilter?.comparison &&
|
|
327
|
-
curDateFilter.comparisonRange
|
|
327
|
+
curDateFilter.comparisonRange?.value !== 'NO_COMPARISON') {
|
|
328
328
|
const comparisonYAxisFields = report.yAxisFields?.map((field) => {
|
|
329
329
|
return {
|
|
330
330
|
...field,
|