@quillsql/react 2.12.26 → 2.12.27
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 +17 -2
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +110 -80
- package/dist/cjs/Context.d.ts +1 -0
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +17 -2
- package/dist/cjs/Table.d.ts +15 -1
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +134 -60
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.js +1 -1
- package/dist/cjs/utils/dashboard.d.ts +1 -0
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +20 -1
- package/dist/cjs/utils/filterProcessing.d.ts +2 -0
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/filterProcessing.js +129 -1
- package/dist/esm/Chart.d.ts +17 -2
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +113 -83
- package/dist/esm/Context.d.ts +1 -0
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +16 -1
- package/dist/esm/Table.d.ts +15 -1
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +137 -63
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardFilter.js +1 -1
- package/dist/esm/utils/dashboard.d.ts +1 -0
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +18 -0
- package/dist/esm/utils/filterProcessing.d.ts +2 -0
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/filterProcessing.js +126 -0
- package/package.json +1 -1
package/dist/esm/Table.js
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useContext, useEffect,
|
|
3
|
-
import { ClientContext, CustomFieldContext, DashboardContext, DashboardFiltersContext, } from './Context';
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useEffect, useState, } from 'react';
|
|
3
|
+
import { ClientContext, CustomFieldContext, DashboardContext, DashboardFiltersContext, ReportFiltersContext, } from './Context';
|
|
4
4
|
import { getData } from './utils/dataFetcher';
|
|
5
|
-
import { mergeComparisonRange } from './utils/merge';
|
|
6
5
|
import QuillTable from './components/QuillTable';
|
|
7
|
-
import { useMemoizedRows } from './hooks/useFormat';
|
|
8
6
|
import { useExport } from './hooks/useExport';
|
|
9
7
|
import { processFilterErrorList } from './utils/errorProcessing';
|
|
10
|
-
import {
|
|
8
|
+
import { cleanDashboardItem } from './utils/dashboard';
|
|
9
|
+
import { quillFormat } from './utils/valueFormatter';
|
|
10
|
+
import { processFilterFromBackend, updateFilter, } from './utils/filterProcessing';
|
|
11
|
+
import { QuillFilterContainerComponent, } from './components/UiComponents';
|
|
12
|
+
import { DashboardFilter } from './components/Dashboard/DashboardFilter';
|
|
13
|
+
import { QuillSelectComponent } from './components/QuillSelect';
|
|
14
|
+
import { QuillMultiSelectComponent } from './components/QuillMultiSelect';
|
|
15
|
+
import { QuillDateRangePicker, } from './DateRangePicker/QuillDateRangePicker';
|
|
16
|
+
import { useTheme } from './hooks';
|
|
11
17
|
/**
|
|
12
18
|
* ### Quill Table
|
|
13
19
|
*
|
|
@@ -47,69 +53,137 @@ const Table = (props) => {
|
|
|
47
53
|
if ('rows' in data && 'columns' in data) {
|
|
48
54
|
return (_jsx(QuillTable, { hideCSVDownloadButton: data.hideCSVDownloadButton, columns: data.columns, rows: data.rows, className: data.className, containerStyle: data.containerStyle, LoadingComponent: data.LoadingComponent, isLoading: data.isLoading, downloadCSV: data.downloadCSV }));
|
|
49
55
|
}
|
|
50
|
-
return (_jsx(ChartUpdater, { hideCSVDownloadButton: data.hideCSVDownloadButton, dispatch: dispatch,
|
|
56
|
+
return (_jsx(ChartUpdater, { hideCSVDownloadButton: data.hideCSVDownloadButton, dispatch: dispatch, dashboardContext: dashboard, reportId: data.reportId, className: data.className, containerStyle: data.containerStyle, dashboardFilters: dashboardFilters, client: client, csvFilename: data.csvFilename, LoadingComponent: data.LoadingComponent, SelectComponent: data.SelectComponent, MultiSelectComponent: data.MultiSelectComponent, DateRangePickerComponent: data.DateRangePickerComponent, FilterContainerComponent: data.FilterContainerComponent, hideFilters: data.hideFilters }));
|
|
51
57
|
};
|
|
52
|
-
const ChartUpdater = ({ reportId, containerStyle, className,
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
.sort((filter) => (filter.filterType === 'date_range' ? -1 : 1))
|
|
56
|
-
.filter((f) => dashboard &&
|
|
57
|
-
dashboard[reportId] &&
|
|
58
|
-
f &&
|
|
59
|
-
f.dashboardName === dashboard[reportId].dashboardName);
|
|
60
|
-
}, [dashboardFilters, dashboard]);
|
|
61
|
-
const { rows, loading } = useMemoizedRows(reportId);
|
|
58
|
+
const ChartUpdater = ({ reportId, containerStyle, className, dashboardContext, dispatch, client, dashboardFilters, csvFilename, hideCSVDownloadButton = true, hideFilters = true, LoadingComponent, SelectComponent = QuillSelectComponent, MultiSelectComponent = QuillMultiSelectComponent, DateRangePickerComponent = QuillDateRangePicker, FilterContainerComponent = QuillFilterContainerComponent, }) => {
|
|
59
|
+
const [loading, setLoading] = useState(false);
|
|
60
|
+
const [initialLoad, setInitialLoad] = useState(true);
|
|
62
61
|
const { downloadCSV } = useExport(reportId);
|
|
63
62
|
const [customFields] = useContext(CustomFieldContext);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
id: reportId,
|
|
96
|
-
data: {
|
|
97
|
-
...resp,
|
|
98
|
-
filtersApplied: specificDashboardFilter,
|
|
99
|
-
},
|
|
100
|
-
});
|
|
101
|
-
}
|
|
63
|
+
const [rows, setRows] = useState([]);
|
|
64
|
+
const [columns, setColumns] = useState([]);
|
|
65
|
+
const [tableFilters, setTableFilters] = useState([]);
|
|
66
|
+
const [filterUpdateIndex, setFilterUpdateIndex] = useState(0);
|
|
67
|
+
const { reportFiltersDispatch, reportFilters } = useContext(ReportFiltersContext);
|
|
68
|
+
const theme = useTheme();
|
|
69
|
+
const getChartData = async (reportFilterInfo) => {
|
|
70
|
+
try {
|
|
71
|
+
const filters = reportFilterInfo.filters;
|
|
72
|
+
setLoading(true);
|
|
73
|
+
const hostedBody = {
|
|
74
|
+
metadata: {
|
|
75
|
+
dashboardItemId: reportId,
|
|
76
|
+
orgId: client.customerId || '*',
|
|
77
|
+
clientId: client.publicKey,
|
|
78
|
+
task: 'item',
|
|
79
|
+
getDefaultDashboardFilters: filters ? false : true,
|
|
80
|
+
databaseType: client?.databaseType,
|
|
81
|
+
customFields,
|
|
82
|
+
filters,
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
const cloudBody = {
|
|
86
|
+
id: reportId,
|
|
87
|
+
};
|
|
88
|
+
const resp = await getData(client, 'itempost', 'same-origin', hostedBody, cloudBody);
|
|
89
|
+
processFilterErrorList(resp);
|
|
90
|
+
if (resp && resp.name !== 'error' && !resp.errorMessage) {
|
|
91
|
+
const cleanedReport = await cleanDashboardItem(resp, filters ? filters : resp.filters);
|
|
92
|
+
if (cleanedReport.chartType === 'table' && cleanedReport.pivot) {
|
|
93
|
+
cleanedReport.columns = cleanedReport.yAxisFields;
|
|
102
94
|
}
|
|
103
|
-
|
|
104
|
-
|
|
95
|
+
let filterArray = filters;
|
|
96
|
+
if (!filterArray) {
|
|
97
|
+
filterArray = resp.filters.map((filter) => {
|
|
98
|
+
return processFilterFromBackend(filter, resp.rows);
|
|
99
|
+
});
|
|
100
|
+
reportFiltersDispatch({
|
|
101
|
+
type: 'UPDATE_REPORT_FILTER',
|
|
102
|
+
id: reportId,
|
|
103
|
+
data: {
|
|
104
|
+
filters: filterArray,
|
|
105
|
+
updateIndex: reportFilterInfo.updateIndex,
|
|
106
|
+
},
|
|
107
|
+
});
|
|
105
108
|
}
|
|
109
|
+
setFilterUpdateIndex(reportFilterInfo.updateIndex);
|
|
110
|
+
setTableFilters(filterArray);
|
|
106
111
|
}
|
|
112
|
+
setRows(resp.rows.map((row) => {
|
|
113
|
+
return resp.columns.reduce((formattedRow, column) => {
|
|
114
|
+
// Apply the format function to each field in the row
|
|
115
|
+
const formattedValue = quillFormat({
|
|
116
|
+
value: row[column.field],
|
|
117
|
+
format: column.format,
|
|
118
|
+
});
|
|
119
|
+
formattedRow[column.field] = formattedValue;
|
|
120
|
+
return formattedRow;
|
|
121
|
+
}, {});
|
|
122
|
+
}));
|
|
123
|
+
setColumns(resp.columns);
|
|
124
|
+
setLoading(false);
|
|
125
|
+
}
|
|
126
|
+
catch (e) {
|
|
127
|
+
console.log('Error fetching chart: ', e);
|
|
128
|
+
setLoading(false);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
useEffect(() => {
|
|
132
|
+
// IF WE HAVE THE DATA IN DASHBOARD CONTEXT AND IT IS THE INITIAL LAOD DON'T FETCH DATA
|
|
133
|
+
if (initialLoad && dashboardContext[reportId]) {
|
|
134
|
+
setInitialLoad(false);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
setInitialLoad(false);
|
|
138
|
+
let parsedReportFilters = reportFilters[reportId]
|
|
139
|
+
? reportFilters[reportId]
|
|
140
|
+
: { updateIndex: 0 };
|
|
141
|
+
getChartData(parsedReportFilters);
|
|
142
|
+
}, [client.customerId, reportId, reportFilters[reportId]?.updateIndex]);
|
|
143
|
+
useEffect(() => {
|
|
144
|
+
if (!dashboardContext || !dashboardContext[reportId]) {
|
|
145
|
+
return;
|
|
107
146
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
147
|
+
setRows(dashboardContext[reportId].rows.map((row) => {
|
|
148
|
+
return dashboardContext[reportId].columns.reduce((formattedRow, column) => {
|
|
149
|
+
// Apply the format function to each field in the row
|
|
150
|
+
const formattedValue = quillFormat({
|
|
151
|
+
value: row[column.field],
|
|
152
|
+
format: column.format,
|
|
153
|
+
});
|
|
154
|
+
formattedRow[column.field] = formattedValue;
|
|
155
|
+
return formattedRow;
|
|
156
|
+
}, {});
|
|
157
|
+
}));
|
|
158
|
+
setColumns(dashboardContext[reportId].columns);
|
|
159
|
+
}, []);
|
|
160
|
+
return (_jsxs("div", { children: [!hideFilters && (_jsx("div", { style: {
|
|
161
|
+
display: 'flex',
|
|
162
|
+
boxSizing: 'content-box',
|
|
163
|
+
flexDirection: 'row',
|
|
164
|
+
alignItems: 'center',
|
|
165
|
+
}, children: _jsx(FilterContainerComponent, { children: tableFilters.map((filter, index) => (_jsx(DashboardFilter, { filter: filter, onChangeFilter: (filter, value = null, comparison = null) => {
|
|
166
|
+
const updatedFilters = tableFilters.map((f) => {
|
|
167
|
+
if (f.field === filter.field ||
|
|
168
|
+
(f.filterType === 'date_range' &&
|
|
169
|
+
filter.filterType === 'date_range')) {
|
|
170
|
+
return updateFilter(f, value, comparison);
|
|
171
|
+
}
|
|
172
|
+
return f;
|
|
173
|
+
});
|
|
174
|
+
setTableFilters(updatedFilters);
|
|
175
|
+
getChartData({
|
|
176
|
+
filters: updatedFilters,
|
|
177
|
+
updateIndex: filterUpdateIndex + 1,
|
|
178
|
+
});
|
|
179
|
+
reportFiltersDispatch({
|
|
180
|
+
type: 'UPDATE_REPORT_FILTER',
|
|
181
|
+
id: reportId,
|
|
182
|
+
data: {
|
|
183
|
+
filters: updatedFilters,
|
|
184
|
+
updateIndex: filterUpdateIndex + 1,
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
}, theme: theme, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, DateRangePickerComponent: DateRangePickerComponent }, index))) }) })), _jsx(QuillTable, { hideCSVDownloadButton: hideCSVDownloadButton, columns: columns ?? [], rows: rows ?? [], containerStyle: containerStyle, className: className, LoadingComponent: LoadingComponent, isLoading: loading, downloadCSV: downloadCSV })] }));
|
|
114
188
|
};
|
|
115
189
|
export default Table;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardFilter.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/DashboardFilter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAIhG,KAAK,mBAAmB,GAAG,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,KAAK,GACN,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;CACjE,KAAK,GAAG,CAAC,OAAO,CAAC;AAElB,KAAK,wBAAwB,GAAG,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,KAAK,GACN,EAAE;IACD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;CACjE,KAAK,GAAG,CAAC,OAAO,CAAC;AAElB,KAAK,4BAA4B,GAAG,CAAC,EACnC,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,MAAM,EACN,WAAW,GACZ,EAAE,6BAA6B,KAAK,GAAG,CAAC,OAAO,CAAC;AAEjD,UAAU,oBAAoB;IAC5B,MAAM,EAAE,GAAG,CAAC;IACZ,cAAc,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IACzC,eAAe,EACX,mBAAmB,GACnB,KAAK,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IACnD,oBAAoB,EAChB,wBAAwB,GACxB,KAAK,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;IACxD,wBAAwB,EACpB,4BAA4B,GAC5B,KAAK,CAAC,mBAAmB,CAAC,4BAA4B,CAAC,CAAC;IAC5D,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,cAAc,EACd,eAAsC,EACtC,oBAAgD,EAChD,wBAAwB,EACxB,KAAK,GACN,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"DashboardFilter.d.ts","sourceRoot":"","sources":["../../../../src/components/Dashboard/DashboardFilter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAIhG,KAAK,mBAAmB,GAAG,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,KAAK,GACN,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;CACjE,KAAK,GAAG,CAAC,OAAO,CAAC;AAElB,KAAK,wBAAwB,GAAG,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,KAAK,GACN,EAAE;IACD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;CACjE,KAAK,GAAG,CAAC,OAAO,CAAC;AAElB,KAAK,4BAA4B,GAAG,CAAC,EACnC,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,MAAM,EACN,WAAW,GACZ,EAAE,6BAA6B,KAAK,GAAG,CAAC,OAAO,CAAC;AAEjD,UAAU,oBAAoB;IAC5B,MAAM,EAAE,GAAG,CAAC;IACZ,cAAc,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IACzC,eAAe,EACX,mBAAmB,GACnB,KAAK,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IACnD,oBAAoB,EAChB,wBAAwB,GACxB,KAAK,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;IACxD,wBAAwB,EACpB,4BAA4B,GAC5B,KAAK,CAAC,mBAAmB,CAAC,4BAA4B,CAAC,CAAC;IAC5D,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,cAAc,EACd,eAAsC,EACtC,oBAAgD,EAChD,wBAAwB,EACxB,KAAK,GACN,EAAE,oBAAoB,kDAmItB"}
|
|
@@ -16,7 +16,7 @@ export function DashboardFilter({ filter, onChangeFilter, SelectComponent = Quil
|
|
|
16
16
|
}
|
|
17
17
|
}, [filter]);
|
|
18
18
|
if (filter.filterType === 'string') {
|
|
19
|
-
if (!filter.options) {
|
|
19
|
+
if (!filter.options || filter.options.length === 0) {
|
|
20
20
|
return null;
|
|
21
21
|
}
|
|
22
22
|
if (filter.stringFilterType === 'multiselect') {
|
|
@@ -9,4 +9,5 @@ import { QuillReportInternal } from '../Dashboard';
|
|
|
9
9
|
export declare function cleanDashboardItem(item: {
|
|
10
10
|
[key: string]: any;
|
|
11
11
|
} | undefined, dashboardFilters: any, client?: any, dateBucket?: string): Promise<QuillReportInternal>;
|
|
12
|
+
export declare function getDashboard(dashboardName: string, client: any): Promise<any>;
|
|
12
13
|
//# sourceMappingURL=dashboard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAkC5E;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,CAAC,EAAE,GAAG,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,CAAC,CA+C9B"}
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAkC5E;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,EACxC,gBAAgB,EAAE,GAAG,EACrB,MAAM,CAAC,EAAE,GAAG,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,CAAC,CA+C9B;AAwQD,wBAAsB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAI,OAAO,CAAC,GAAG,CAAC,CA0BpF"}
|
|
@@ -274,3 +274,21 @@ function extractPivotedYAxis(pivotTable, itemInfo, config = undefined) {
|
|
|
274
274
|
}
|
|
275
275
|
return fields;
|
|
276
276
|
}
|
|
277
|
+
export async function getDashboard(dashboardName, client) {
|
|
278
|
+
const searchParams = new URLSearchParams({
|
|
279
|
+
publicKey: client.publicKey,
|
|
280
|
+
orgId: client.customerId,
|
|
281
|
+
name: dashboardName,
|
|
282
|
+
}).toString();
|
|
283
|
+
const hostedBody = {
|
|
284
|
+
metadata: {
|
|
285
|
+
name: dashboardName,
|
|
286
|
+
task: 'config',
|
|
287
|
+
clientId: client.publicKey,
|
|
288
|
+
orgId: client.customerId || '*',
|
|
289
|
+
databaseType: client.databaseType,
|
|
290
|
+
},
|
|
291
|
+
};
|
|
292
|
+
const resp = await getData(client, `dashconfig?${searchParams}`, 'omit', hostedBody, null, 'GET');
|
|
293
|
+
return resp;
|
|
294
|
+
}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export declare function findAndProcessDateFilter(filters: any[]): any;
|
|
2
|
+
export declare function processFilterFromBackend(filter: any, rows: any[]): any;
|
|
3
|
+
export declare function updateFilter(filter: any, value?: any, comparison?: any): any;
|
|
2
4
|
//# sourceMappingURL=filterProcessing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"AAQA,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAoB5D;AAMD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OA4BhE;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,GAAG,EACX,KAAK,GAAE,GAAU,EACjB,UAAU,GAAE,GAAU,OAuGvB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { COMPARISON_RANGE, PRIMARY_RANGE, defaultOptionsV2, getRangeFromPresetOptions, } from '../DateRangePicker/dateRangePickerUtils';
|
|
1
2
|
export function findAndProcessDateFilter(filters) {
|
|
2
3
|
let dateFilter = filters.find((filter) => filter.filterType === 'date_range');
|
|
3
4
|
if (dateFilter) {
|
|
@@ -19,3 +20,128 @@ export function findAndProcessDateFilter(filters) {
|
|
|
19
20
|
function isValidDate(date) {
|
|
20
21
|
return !isNaN(Date.parse(date));
|
|
21
22
|
}
|
|
23
|
+
export function processFilterFromBackend(filter, rows) {
|
|
24
|
+
if (filter.filterType === 'date_range') {
|
|
25
|
+
return {
|
|
26
|
+
...filter,
|
|
27
|
+
startDate: new Date(filter.startDate),
|
|
28
|
+
endDate: new Date(filter.endDate),
|
|
29
|
+
options: defaultOptionsV2,
|
|
30
|
+
comparisonRange: {
|
|
31
|
+
...filter.comparisonRange,
|
|
32
|
+
value: filter.defaultComparisonRange,
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (filter.filterType === 'string') {
|
|
37
|
+
const options = rows.map((row) => row[filter.field]);
|
|
38
|
+
const distinctOptions = Array.from(new Set(options)).filter((value) => value !== undefined && value !== null);
|
|
39
|
+
return {
|
|
40
|
+
...filter,
|
|
41
|
+
options: distinctOptions.map((option) => ({
|
|
42
|
+
label: option,
|
|
43
|
+
value: option,
|
|
44
|
+
})),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return filter;
|
|
48
|
+
}
|
|
49
|
+
export function updateFilter(filter, value = null, comparison = null) {
|
|
50
|
+
//for dateObjects only, since values are arrays for dateObjects
|
|
51
|
+
const { selectedValue: _, operator, ...filterWithoutSelectedValue } = filter; // _ is a throwaway variable
|
|
52
|
+
if (filter.filterType === 'string') {
|
|
53
|
+
let selectedValue = {};
|
|
54
|
+
if (value) {
|
|
55
|
+
if (filter.stringFilterType === 'multiselect') {
|
|
56
|
+
const parsedValue = JSON.parse(value);
|
|
57
|
+
if (parsedValue.length === 0) {
|
|
58
|
+
selectedValue = { values: [] };
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
selectedValue = { values: parsedValue, operator: 'IN' };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
selectedValue = { selectedValue: value };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
...filterWithoutSelectedValue,
|
|
70
|
+
...selectedValue,
|
|
71
|
+
dashboardName: name,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if (filter.filterType === 'date' || filter.filterType === 'date_range') {
|
|
75
|
+
let presetsOptions = defaultOptionsV2;
|
|
76
|
+
if (filter.presetRanges) {
|
|
77
|
+
presetsOptions = filter.presetRanges.map((elem) => {
|
|
78
|
+
if (!elem.isStatic) {
|
|
79
|
+
return {
|
|
80
|
+
label: elem.label,
|
|
81
|
+
value: elem.value,
|
|
82
|
+
startDate: PRIMARY_RANGE[elem.value].start,
|
|
83
|
+
endDate: PRIMARY_RANGE[elem.value].end,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
label: elem.label,
|
|
88
|
+
value: elem.value,
|
|
89
|
+
startDate: new Date(elem.startDate),
|
|
90
|
+
endDate: new Date(elem.endDate),
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
if (comparison ||
|
|
95
|
+
(filter.comparison && filter.comparisonRange.value !== 'NO_COMPARISON')) {
|
|
96
|
+
let preset = '';
|
|
97
|
+
if (comparison) {
|
|
98
|
+
preset = filter.preset.label;
|
|
99
|
+
}
|
|
100
|
+
const key = comparison?.value || filter.comparisonRange.value;
|
|
101
|
+
let primaryRange = {
|
|
102
|
+
start: value ? value.startDate : filter.startDate,
|
|
103
|
+
end: value ? value.endDate : filter.endDate,
|
|
104
|
+
};
|
|
105
|
+
if (value && value.preset) {
|
|
106
|
+
preset = value.preset;
|
|
107
|
+
primaryRange = getRangeFromPresetOptions(value.preset, presetsOptions);
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
startDate: primaryRange.start,
|
|
111
|
+
endDate: primaryRange.end,
|
|
112
|
+
filterType: 'date_range',
|
|
113
|
+
label: 'Date',
|
|
114
|
+
field: 'date_range',
|
|
115
|
+
preset: { label: preset },
|
|
116
|
+
options: filter.options,
|
|
117
|
+
comparison: true,
|
|
118
|
+
comparisonRange: {
|
|
119
|
+
startDate: COMPARISON_RANGE[key](primaryRange)?.start,
|
|
120
|
+
endDate: COMPARISON_RANGE[key](primaryRange)?.end,
|
|
121
|
+
value: key,
|
|
122
|
+
},
|
|
123
|
+
dashboardName: name,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
const primaryRange = value && value.preset
|
|
128
|
+
? getRangeFromPresetOptions(value.preset, presetsOptions)
|
|
129
|
+
: {
|
|
130
|
+
start: value?.startDate || filter.startDate,
|
|
131
|
+
end: value?.endDate || filter.endDate,
|
|
132
|
+
};
|
|
133
|
+
const preset = value?.preset ? value.preset : '';
|
|
134
|
+
return {
|
|
135
|
+
...filter,
|
|
136
|
+
preset: { label: preset },
|
|
137
|
+
startDate: primaryRange.start,
|
|
138
|
+
endDate: primaryRange.end,
|
|
139
|
+
filterType: 'date_range',
|
|
140
|
+
field: 'date_range',
|
|
141
|
+
options: filter.options,
|
|
142
|
+
label: 'Date',
|
|
143
|
+
dashboardName: name,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|