@quillsql/react 2.12.25 → 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/cjs/Table.js
CHANGED
|
@@ -7,12 +7,18 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
7
7
|
const react_1 = require("react");
|
|
8
8
|
const Context_1 = require("./Context");
|
|
9
9
|
const dataFetcher_1 = require("./utils/dataFetcher");
|
|
10
|
-
const merge_1 = require("./utils/merge");
|
|
11
10
|
const QuillTable_1 = __importDefault(require("./components/QuillTable"));
|
|
12
|
-
const useFormat_1 = require("./hooks/useFormat");
|
|
13
11
|
const useExport_1 = require("./hooks/useExport");
|
|
14
12
|
const errorProcessing_1 = require("./utils/errorProcessing");
|
|
15
|
-
const
|
|
13
|
+
const dashboard_1 = require("./utils/dashboard");
|
|
14
|
+
const valueFormatter_1 = require("./utils/valueFormatter");
|
|
15
|
+
const filterProcessing_1 = require("./utils/filterProcessing");
|
|
16
|
+
const UiComponents_1 = require("./components/UiComponents");
|
|
17
|
+
const DashboardFilter_1 = require("./components/Dashboard/DashboardFilter");
|
|
18
|
+
const QuillSelect_1 = require("./components/QuillSelect");
|
|
19
|
+
const QuillMultiSelect_1 = require("./components/QuillMultiSelect");
|
|
20
|
+
const QuillDateRangePicker_1 = require("./DateRangePicker/QuillDateRangePicker");
|
|
21
|
+
const hooks_1 = require("./hooks");
|
|
16
22
|
/**
|
|
17
23
|
* ### Quill Table
|
|
18
24
|
*
|
|
@@ -52,69 +58,137 @@ const Table = (props) => {
|
|
|
52
58
|
if ('rows' in data && 'columns' in data) {
|
|
53
59
|
return ((0, jsx_runtime_1.jsx)(QuillTable_1.default, { hideCSVDownloadButton: data.hideCSVDownloadButton, columns: data.columns, rows: data.rows, className: data.className, containerStyle: data.containerStyle, LoadingComponent: data.LoadingComponent, isLoading: data.isLoading, downloadCSV: data.downloadCSV }));
|
|
54
60
|
}
|
|
55
|
-
return ((0, jsx_runtime_1.jsx)(ChartUpdater, { hideCSVDownloadButton: data.hideCSVDownloadButton, dispatch: dispatch,
|
|
61
|
+
return ((0, jsx_runtime_1.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 }));
|
|
56
62
|
};
|
|
57
|
-
const ChartUpdater = ({ reportId, containerStyle, className,
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
.sort((filter) => (filter.filterType === 'date_range' ? -1 : 1))
|
|
61
|
-
.filter((f) => dashboard &&
|
|
62
|
-
dashboard[reportId] &&
|
|
63
|
-
f &&
|
|
64
|
-
f.dashboardName === dashboard[reportId].dashboardName);
|
|
65
|
-
}, [dashboardFilters, dashboard]);
|
|
66
|
-
const { rows, loading } = (0, useFormat_1.useMemoizedRows)(reportId);
|
|
63
|
+
const ChartUpdater = ({ reportId, containerStyle, className, dashboardContext, dispatch, client, dashboardFilters, csvFilename, hideCSVDownloadButton = true, hideFilters = true, LoadingComponent, SelectComponent = QuillSelect_1.QuillSelectComponent, MultiSelectComponent = QuillMultiSelect_1.QuillMultiSelectComponent, DateRangePickerComponent = QuillDateRangePicker_1.QuillDateRangePicker, FilterContainerComponent = UiComponents_1.QuillFilterContainerComponent, }) => {
|
|
64
|
+
const [loading, setLoading] = (0, react_1.useState)(false);
|
|
65
|
+
const [initialLoad, setInitialLoad] = (0, react_1.useState)(true);
|
|
67
66
|
const { downloadCSV } = (0, useExport_1.useExport)(reportId);
|
|
68
67
|
const [customFields] = (0, react_1.useContext)(Context_1.CustomFieldContext);
|
|
69
|
-
(0, react_1.
|
|
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
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
id: reportId,
|
|
101
|
-
data: {
|
|
102
|
-
...resp,
|
|
103
|
-
filtersApplied: specificDashboardFilter,
|
|
104
|
-
},
|
|
105
|
-
});
|
|
106
|
-
}
|
|
68
|
+
const [rows, setRows] = (0, react_1.useState)([]);
|
|
69
|
+
const [columns, setColumns] = (0, react_1.useState)([]);
|
|
70
|
+
const [tableFilters, setTableFilters] = (0, react_1.useState)([]);
|
|
71
|
+
const [filterUpdateIndex, setFilterUpdateIndex] = (0, react_1.useState)(0);
|
|
72
|
+
const { reportFiltersDispatch, reportFilters } = (0, react_1.useContext)(Context_1.ReportFiltersContext);
|
|
73
|
+
const theme = (0, hooks_1.useTheme)();
|
|
74
|
+
const getChartData = async (reportFilterInfo) => {
|
|
75
|
+
try {
|
|
76
|
+
const filters = reportFilterInfo.filters;
|
|
77
|
+
setLoading(true);
|
|
78
|
+
const hostedBody = {
|
|
79
|
+
metadata: {
|
|
80
|
+
dashboardItemId: reportId,
|
|
81
|
+
orgId: client.customerId || '*',
|
|
82
|
+
clientId: client.publicKey,
|
|
83
|
+
task: 'item',
|
|
84
|
+
getDefaultDashboardFilters: filters ? false : true,
|
|
85
|
+
databaseType: client?.databaseType,
|
|
86
|
+
customFields,
|
|
87
|
+
filters,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
const cloudBody = {
|
|
91
|
+
id: reportId,
|
|
92
|
+
};
|
|
93
|
+
const resp = await (0, dataFetcher_1.getData)(client, 'itempost', 'same-origin', hostedBody, cloudBody);
|
|
94
|
+
(0, errorProcessing_1.processFilterErrorList)(resp);
|
|
95
|
+
if (resp && resp.name !== 'error' && !resp.errorMessage) {
|
|
96
|
+
const cleanedReport = await (0, dashboard_1.cleanDashboardItem)(resp, filters ? filters : resp.filters);
|
|
97
|
+
if (cleanedReport.chartType === 'table' && cleanedReport.pivot) {
|
|
98
|
+
cleanedReport.columns = cleanedReport.yAxisFields;
|
|
107
99
|
}
|
|
108
|
-
|
|
109
|
-
|
|
100
|
+
let filterArray = filters;
|
|
101
|
+
if (!filterArray) {
|
|
102
|
+
filterArray = resp.filters.map((filter) => {
|
|
103
|
+
return (0, filterProcessing_1.processFilterFromBackend)(filter, resp.rows);
|
|
104
|
+
});
|
|
105
|
+
reportFiltersDispatch({
|
|
106
|
+
type: 'UPDATE_REPORT_FILTER',
|
|
107
|
+
id: reportId,
|
|
108
|
+
data: {
|
|
109
|
+
filters: filterArray,
|
|
110
|
+
updateIndex: reportFilterInfo.updateIndex,
|
|
111
|
+
},
|
|
112
|
+
});
|
|
110
113
|
}
|
|
114
|
+
setFilterUpdateIndex(reportFilterInfo.updateIndex);
|
|
115
|
+
setTableFilters(filterArray);
|
|
111
116
|
}
|
|
117
|
+
setRows(resp.rows.map((row) => {
|
|
118
|
+
return resp.columns.reduce((formattedRow, column) => {
|
|
119
|
+
// Apply the format function to each field in the row
|
|
120
|
+
const formattedValue = (0, valueFormatter_1.quillFormat)({
|
|
121
|
+
value: row[column.field],
|
|
122
|
+
format: column.format,
|
|
123
|
+
});
|
|
124
|
+
formattedRow[column.field] = formattedValue;
|
|
125
|
+
return formattedRow;
|
|
126
|
+
}, {});
|
|
127
|
+
}));
|
|
128
|
+
setColumns(resp.columns);
|
|
129
|
+
setLoading(false);
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
console.log('Error fetching chart: ', e);
|
|
133
|
+
setLoading(false);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
(0, react_1.useEffect)(() => {
|
|
137
|
+
// IF WE HAVE THE DATA IN DASHBOARD CONTEXT AND IT IS THE INITIAL LAOD DON'T FETCH DATA
|
|
138
|
+
if (initialLoad && dashboardContext[reportId]) {
|
|
139
|
+
setInitialLoad(false);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
setInitialLoad(false);
|
|
143
|
+
let parsedReportFilters = reportFilters[reportId]
|
|
144
|
+
? reportFilters[reportId]
|
|
145
|
+
: { updateIndex: 0 };
|
|
146
|
+
getChartData(parsedReportFilters);
|
|
147
|
+
}, [client.customerId, reportId, reportFilters[reportId]?.updateIndex]);
|
|
148
|
+
(0, react_1.useEffect)(() => {
|
|
149
|
+
if (!dashboardContext || !dashboardContext[reportId]) {
|
|
150
|
+
return;
|
|
112
151
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
152
|
+
setRows(dashboardContext[reportId].rows.map((row) => {
|
|
153
|
+
return dashboardContext[reportId].columns.reduce((formattedRow, column) => {
|
|
154
|
+
// Apply the format function to each field in the row
|
|
155
|
+
const formattedValue = (0, valueFormatter_1.quillFormat)({
|
|
156
|
+
value: row[column.field],
|
|
157
|
+
format: column.format,
|
|
158
|
+
});
|
|
159
|
+
formattedRow[column.field] = formattedValue;
|
|
160
|
+
return formattedRow;
|
|
161
|
+
}, {});
|
|
162
|
+
}));
|
|
163
|
+
setColumns(dashboardContext[reportId].columns);
|
|
164
|
+
}, []);
|
|
165
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [!hideFilters && ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
166
|
+
display: 'flex',
|
|
167
|
+
boxSizing: 'content-box',
|
|
168
|
+
flexDirection: 'row',
|
|
169
|
+
alignItems: 'center',
|
|
170
|
+
}, children: (0, jsx_runtime_1.jsx)(FilterContainerComponent, { children: tableFilters.map((filter, index) => ((0, jsx_runtime_1.jsx)(DashboardFilter_1.DashboardFilter, { filter: filter, onChangeFilter: (filter, value = null, comparison = null) => {
|
|
171
|
+
const updatedFilters = tableFilters.map((f) => {
|
|
172
|
+
if (f.field === filter.field ||
|
|
173
|
+
(f.filterType === 'date_range' &&
|
|
174
|
+
filter.filterType === 'date_range')) {
|
|
175
|
+
return (0, filterProcessing_1.updateFilter)(f, value, comparison);
|
|
176
|
+
}
|
|
177
|
+
return f;
|
|
178
|
+
});
|
|
179
|
+
setTableFilters(updatedFilters);
|
|
180
|
+
getChartData({
|
|
181
|
+
filters: updatedFilters,
|
|
182
|
+
updateIndex: filterUpdateIndex + 1,
|
|
183
|
+
});
|
|
184
|
+
reportFiltersDispatch({
|
|
185
|
+
type: 'UPDATE_REPORT_FILTER',
|
|
186
|
+
id: reportId,
|
|
187
|
+
data: {
|
|
188
|
+
filters: updatedFilters,
|
|
189
|
+
updateIndex: filterUpdateIndex + 1,
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
}, theme: theme, SelectComponent: SelectComponent, MultiSelectComponent: MultiSelectComponent, DateRangePickerComponent: DateRangePickerComponent }, index))) }) })), (0, jsx_runtime_1.jsx)(QuillTable_1.default, { hideCSVDownloadButton: hideCSVDownloadButton, columns: columns ?? [], rows: rows ?? [], containerStyle: containerStyle, className: className, LoadingComponent: LoadingComponent, isLoading: loading, downloadCSV: downloadCSV })] }));
|
|
119
193
|
};
|
|
120
194
|
exports.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"}
|
|
@@ -19,7 +19,7 @@ function DashboardFilter({ filter, onChangeFilter, SelectComponent = QuillSelect
|
|
|
19
19
|
}
|
|
20
20
|
}, [filter]);
|
|
21
21
|
if (filter.filterType === 'string') {
|
|
22
|
-
if (!filter.options) {
|
|
22
|
+
if (!filter.options || filter.options.length === 0) {
|
|
23
23
|
return null;
|
|
24
24
|
}
|
|
25
25
|
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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.cleanDashboardItem = void 0;
|
|
3
|
+
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");
|
|
@@ -278,3 +278,22 @@ function extractPivotedYAxis(pivotTable, itemInfo, config = undefined) {
|
|
|
278
278
|
}
|
|
279
279
|
return fields;
|
|
280
280
|
}
|
|
281
|
+
async function getDashboard(dashboardName, client) {
|
|
282
|
+
const searchParams = new URLSearchParams({
|
|
283
|
+
publicKey: client.publicKey,
|
|
284
|
+
orgId: client.customerId,
|
|
285
|
+
name: dashboardName,
|
|
286
|
+
}).toString();
|
|
287
|
+
const hostedBody = {
|
|
288
|
+
metadata: {
|
|
289
|
+
name: dashboardName,
|
|
290
|
+
task: 'config',
|
|
291
|
+
clientId: client.publicKey,
|
|
292
|
+
orgId: client.customerId || '*',
|
|
293
|
+
databaseType: client.databaseType,
|
|
294
|
+
},
|
|
295
|
+
};
|
|
296
|
+
const resp = await (0, dataFetcher_1.getData)(client, `dashconfig?${searchParams}`, 'omit', hostedBody, null, 'GET');
|
|
297
|
+
return resp;
|
|
298
|
+
}
|
|
299
|
+
exports.getDashboard = getDashboard;
|
|
@@ -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,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.findAndProcessDateFilter = void 0;
|
|
3
|
+
exports.updateFilter = exports.processFilterFromBackend = exports.findAndProcessDateFilter = void 0;
|
|
4
|
+
const dateRangePickerUtils_1 = require("../DateRangePicker/dateRangePickerUtils");
|
|
4
5
|
function findAndProcessDateFilter(filters) {
|
|
5
6
|
let dateFilter = filters.find((filter) => filter.filterType === 'date_range');
|
|
6
7
|
if (dateFilter) {
|
|
@@ -23,3 +24,130 @@ exports.findAndProcessDateFilter = findAndProcessDateFilter;
|
|
|
23
24
|
function isValidDate(date) {
|
|
24
25
|
return !isNaN(Date.parse(date));
|
|
25
26
|
}
|
|
27
|
+
function processFilterFromBackend(filter, rows) {
|
|
28
|
+
if (filter.filterType === 'date_range') {
|
|
29
|
+
return {
|
|
30
|
+
...filter,
|
|
31
|
+
startDate: new Date(filter.startDate),
|
|
32
|
+
endDate: new Date(filter.endDate),
|
|
33
|
+
options: dateRangePickerUtils_1.defaultOptionsV2,
|
|
34
|
+
comparisonRange: {
|
|
35
|
+
...filter.comparisonRange,
|
|
36
|
+
value: filter.defaultComparisonRange,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
if (filter.filterType === 'string') {
|
|
41
|
+
const options = rows.map((row) => row[filter.field]);
|
|
42
|
+
const distinctOptions = Array.from(new Set(options)).filter((value) => value !== undefined && value !== null);
|
|
43
|
+
return {
|
|
44
|
+
...filter,
|
|
45
|
+
options: distinctOptions.map((option) => ({
|
|
46
|
+
label: option,
|
|
47
|
+
value: option,
|
|
48
|
+
})),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return filter;
|
|
52
|
+
}
|
|
53
|
+
exports.processFilterFromBackend = processFilterFromBackend;
|
|
54
|
+
function updateFilter(filter, value = null, comparison = null) {
|
|
55
|
+
//for dateObjects only, since values are arrays for dateObjects
|
|
56
|
+
const { selectedValue: _, operator, ...filterWithoutSelectedValue } = filter; // _ is a throwaway variable
|
|
57
|
+
if (filter.filterType === 'string') {
|
|
58
|
+
let selectedValue = {};
|
|
59
|
+
if (value) {
|
|
60
|
+
if (filter.stringFilterType === 'multiselect') {
|
|
61
|
+
const parsedValue = JSON.parse(value);
|
|
62
|
+
if (parsedValue.length === 0) {
|
|
63
|
+
selectedValue = { values: [] };
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
selectedValue = { values: parsedValue, operator: 'IN' };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
selectedValue = { selectedValue: value };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
...filterWithoutSelectedValue,
|
|
75
|
+
...selectedValue,
|
|
76
|
+
dashboardName: name,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (filter.filterType === 'date' || filter.filterType === 'date_range') {
|
|
80
|
+
let presetsOptions = dateRangePickerUtils_1.defaultOptionsV2;
|
|
81
|
+
if (filter.presetRanges) {
|
|
82
|
+
presetsOptions = filter.presetRanges.map((elem) => {
|
|
83
|
+
if (!elem.isStatic) {
|
|
84
|
+
return {
|
|
85
|
+
label: elem.label,
|
|
86
|
+
value: elem.value,
|
|
87
|
+
startDate: dateRangePickerUtils_1.PRIMARY_RANGE[elem.value].start,
|
|
88
|
+
endDate: dateRangePickerUtils_1.PRIMARY_RANGE[elem.value].end,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
label: elem.label,
|
|
93
|
+
value: elem.value,
|
|
94
|
+
startDate: new Date(elem.startDate),
|
|
95
|
+
endDate: new Date(elem.endDate),
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
if (comparison ||
|
|
100
|
+
(filter.comparison && filter.comparisonRange.value !== 'NO_COMPARISON')) {
|
|
101
|
+
let preset = '';
|
|
102
|
+
if (comparison) {
|
|
103
|
+
preset = filter.preset.label;
|
|
104
|
+
}
|
|
105
|
+
const key = comparison?.value || filter.comparisonRange.value;
|
|
106
|
+
let primaryRange = {
|
|
107
|
+
start: value ? value.startDate : filter.startDate,
|
|
108
|
+
end: value ? value.endDate : filter.endDate,
|
|
109
|
+
};
|
|
110
|
+
if (value && value.preset) {
|
|
111
|
+
preset = value.preset;
|
|
112
|
+
primaryRange = (0, dateRangePickerUtils_1.getRangeFromPresetOptions)(value.preset, presetsOptions);
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
startDate: primaryRange.start,
|
|
116
|
+
endDate: primaryRange.end,
|
|
117
|
+
filterType: 'date_range',
|
|
118
|
+
label: 'Date',
|
|
119
|
+
field: 'date_range',
|
|
120
|
+
preset: { label: preset },
|
|
121
|
+
options: filter.options,
|
|
122
|
+
comparison: true,
|
|
123
|
+
comparisonRange: {
|
|
124
|
+
startDate: dateRangePickerUtils_1.COMPARISON_RANGE[key](primaryRange)?.start,
|
|
125
|
+
endDate: dateRangePickerUtils_1.COMPARISON_RANGE[key](primaryRange)?.end,
|
|
126
|
+
value: key,
|
|
127
|
+
},
|
|
128
|
+
dashboardName: name,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
const primaryRange = value && value.preset
|
|
133
|
+
? (0, dateRangePickerUtils_1.getRangeFromPresetOptions)(value.preset, presetsOptions)
|
|
134
|
+
: {
|
|
135
|
+
start: value?.startDate || filter.startDate,
|
|
136
|
+
end: value?.endDate || filter.endDate,
|
|
137
|
+
};
|
|
138
|
+
const preset = value?.preset ? value.preset : '';
|
|
139
|
+
return {
|
|
140
|
+
...filter,
|
|
141
|
+
preset: { label: preset },
|
|
142
|
+
startDate: primaryRange.start,
|
|
143
|
+
endDate: primaryRange.end,
|
|
144
|
+
filterType: 'date_range',
|
|
145
|
+
field: 'date_range',
|
|
146
|
+
options: filter.options,
|
|
147
|
+
label: 'Date',
|
|
148
|
+
dashboardName: name,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
exports.updateFilter = updateFilter;
|
package/dist/esm/Chart.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
2
|
import { QuillTheme } from './QuillProvider';
|
|
3
3
|
import { type QuillReport } from './Dashboard';
|
|
4
4
|
import { Filter } from './models/Filter';
|
|
5
|
+
import { MultiSelectComponentProps, SelectComponentProps } from './components/UiComponents';
|
|
6
|
+
import { DateRangePickerComponentProps } from './DateRangePicker/QuillDateRangePicker';
|
|
5
7
|
interface BaseChartProps {
|
|
6
8
|
colors?: string[];
|
|
7
9
|
containerStyle?: React.CSSProperties;
|
|
@@ -99,6 +101,8 @@ export interface ChartProps {
|
|
|
99
101
|
* Whether the date range filter has been disabled.
|
|
100
102
|
*/
|
|
101
103
|
hideDateRangeFilter?: boolean;
|
|
104
|
+
/** Whether to hide the table filters component, deafulted to true */
|
|
105
|
+
hideFilters?: boolean;
|
|
102
106
|
/**
|
|
103
107
|
* Whether the comparison range shows as dashed for date comparison line
|
|
104
108
|
* charts (as opposed to the default solid line).
|
|
@@ -143,6 +147,16 @@ export interface ChartProps {
|
|
|
143
147
|
* A loading component to show when the chart is loading.
|
|
144
148
|
*/
|
|
145
149
|
LoadingComponent?: () => JSX.Element;
|
|
150
|
+
/** A select component prop for the table filters */
|
|
151
|
+
SelectComponent?: (props: SelectComponentProps) => JSX.Element;
|
|
152
|
+
/** A multi select component prop for the table filters */
|
|
153
|
+
MultiSelectComponent?: (props: MultiSelectComponentProps) => JSX.Element;
|
|
154
|
+
/** A date range picker component prop for the table filters */
|
|
155
|
+
DateRangePickerComponent?: (props: DateRangePickerComponentProps) => JSX.Element;
|
|
156
|
+
/** A filter container component component prop for the table filters */
|
|
157
|
+
FilterContainerComponent?: ({ children, }: {
|
|
158
|
+
children: ReactNode;
|
|
159
|
+
}) => JSX.Element;
|
|
146
160
|
/**
|
|
147
161
|
* Styles the top-level container of the Chart.
|
|
148
162
|
*
|
|
@@ -199,7 +213,8 @@ interface ChartDisplayProps extends WithConfig {
|
|
|
199
213
|
onClickChartElement?: (data: any) => void;
|
|
200
214
|
dateBucket?: string;
|
|
201
215
|
overrideTheme?: QuillTheme;
|
|
216
|
+
initialDateFilter?: any;
|
|
202
217
|
}
|
|
203
|
-
export declare const ChartDisplay: ({ reportId, config, colors, className, containerStyle, hideXAxis, hideYAxis, hideCartesianGrid, hideDateRangeFilter, hideHorizontalCartesianGrid, hideVerticalCartesianGrid, hideSubsequentXAxisTicks, cartesianGridLineStyle, cartesianGridLineColor, comparisonLineStyle, isAnimationActive, loading, paginating, error, isComparison, colorMap, LoadingComponent, onPageChange, onSortChange, onClickChartElement, dateBucket, overrideTheme, }: ChartDisplayProps) => import("react/jsx-runtime").JSX.Element;
|
|
218
|
+
export declare const ChartDisplay: ({ reportId, config, colors, className, containerStyle, hideXAxis, hideYAxis, hideCartesianGrid, hideDateRangeFilter, hideHorizontalCartesianGrid, hideVerticalCartesianGrid, hideSubsequentXAxisTicks, cartesianGridLineStyle, cartesianGridLineColor, comparisonLineStyle, isAnimationActive, loading, paginating, error, isComparison, colorMap, LoadingComponent, onPageChange, onSortChange, onClickChartElement, dateBucket, overrideTheme, initialDateFilter, }: ChartDisplayProps) => import("react/jsx-runtime").JSX.Element;
|
|
204
219
|
export default Chart;
|
|
205
220
|
//# sourceMappingURL=Chart.d.ts.map
|
package/dist/esm/Chart.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../src/Chart.tsx"],"names":[],"mappings":"AACA,OAAO,EAA4C,SAAS,EAAE,MAAM,OAAO,CAAC;AAa5E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkB7C,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAQzC,OAAO,EACL,yBAAyB,EAEzB,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EACL,6BAA6B,EAE9B,MAAM,wCAAwC,CAAC;AAEhD,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,sBAAsB,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC5C,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,mBAAmB,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzC,iBAAiB,CAAC,EAAE,CAClB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,KACf,YAAY,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CAC3C;AAiBD,UAAU,UAAW,SAAQ,cAAc;IACzC,MAAM,EAAE,WAAW,GAAG,GAAG,CAAC;CAC3B;AA0BD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,WA4F5D;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,WAKlE;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC;CACH,CAAC;AAeF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,WAAW,GAAG,GAAG,CAAC;IAE3B;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;IAEtC;;OAEG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC;;OAEG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAEnC;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAEzC;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAE5C;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,KAAK,YAAY,CAAC;IAE7E;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IAErC,oDAAoD;IACpD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,GAAG,CAAC,OAAO,CAAC;IAE/D,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,GAAG,CAAC,OAAO,CAAC;IAEzE,+DAA+D;IAC/D,wBAAwB,CAAC,EAAE,CACzB,KAAK,EAAE,6BAA6B,KACjC,GAAG,CAAC,OAAO,CAAC;IAEjB,wEAAwE;IACxE,wBAAwB,CAAC,EAAE,CAAC,EAC1B,QAAQ,GACT,EAAE;QACD,QAAQ,EAAE,SAAS,CAAC;KACrB,KAAK,GAAG,CAAC,OAAO,CAAC;IAElB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAErC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,qEAAqE;IACrE,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAE1C,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,KAAK,UAAW,UAAU,4CAqD/B,CAAC;AAqWF,UAAU,iBAAkB,SAAQ,UAAU;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC5E,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACpE,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,iBAAiB,CAAC,EAAE,GAAG,CAAC;CACzB;AAED,eAAO,MAAM,YAAY,0cA6BtB,iBAAiB,4CA4dnB,CAAC;AAWF,eAAe,KAAK,CAAC"}
|