@redsift/dashboard 11.5.0-muiv5 → 11.6.0-muiv5-alpha.0
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/_virtual/_rollupPluginBabelHelpers.js +93 -0
- package/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
- package/components/ChartEmptyState/ChartEmptyState.d.ts +6 -0
- package/components/ChartEmptyState/ChartEmptyState.js +123 -0
- package/components/ChartEmptyState/ChartEmptyState.js.map +1 -0
- package/components/ChartEmptyState/styles.js +35 -0
- package/components/ChartEmptyState/styles.js.map +1 -0
- package/components/ChartEmptyState/types.d.ts +17 -0
- package/components/CrossfilterRegistry/CrossfilterRegistry.js +23 -0
- package/components/CrossfilterRegistry/CrossfilterRegistry.js.map +1 -0
- package/components/Dashboard/Dashboard.d.ts +6 -0
- package/components/Dashboard/Dashboard.js +46 -0
- package/components/Dashboard/Dashboard.js.map +1 -0
- package/components/Dashboard/context.d.ts +7 -0
- package/components/Dashboard/context.js +11 -0
- package/components/Dashboard/context.js.map +1 -0
- package/components/Dashboard/reducer.d.ts +5 -0
- package/components/Dashboard/reducer.js +61 -0
- package/components/Dashboard/reducer.js.map +1 -0
- package/components/Dashboard/types.d.ts +44 -0
- package/components/Dashboard/types.js +23 -0
- package/components/Dashboard/types.js.map +1 -0
- package/components/PdfExportButton/PdfDocument.js +173 -0
- package/components/PdfExportButton/PdfDocument.js.map +1 -0
- package/components/PdfExportButton/PdfExportButton.d.ts +6 -0
- package/components/PdfExportButton/PdfExportButton.js +110 -0
- package/components/PdfExportButton/PdfExportButton.js.map +1 -0
- package/components/PdfExportButton/styles.js +146 -0
- package/components/PdfExportButton/styles.js.map +1 -0
- package/components/PdfExportButton/types.d.ts +24 -0
- package/components/TimeSeriesBarChart/TimeSeriesBarChart.d.ts +6 -0
- package/components/TimeSeriesBarChart/TimeSeriesBarChart.js +365 -0
- package/components/TimeSeriesBarChart/TimeSeriesBarChart.js.map +1 -0
- package/components/TimeSeriesBarChart/styles.js +98 -0
- package/components/TimeSeriesBarChart/styles.js.map +1 -0
- package/components/TimeSeriesBarChart/types.d.ts +84 -0
- package/components/TimeSeriesBarChart/types.js +22 -0
- package/components/TimeSeriesBarChart/types.js.map +1 -0
- package/components/WithFilters/FilterableBarChart.js +152 -0
- package/components/WithFilters/FilterableBarChart.js.map +1 -0
- package/components/WithFilters/FilterableDataGrid.js +51 -0
- package/components/WithFilters/FilterableDataGrid.js.map +1 -0
- package/components/WithFilters/FilterablePieChart.js +160 -0
- package/components/WithFilters/FilterablePieChart.js.map +1 -0
- package/components/WithFilters/FilterableScatterPlot.js +252 -0
- package/components/WithFilters/FilterableScatterPlot.js.map +1 -0
- package/components/WithFilters/WithFilters.d.ts +6 -0
- package/components/WithFilters/WithFilters.js +36 -0
- package/components/WithFilters/WithFilters.js.map +1 -0
- package/components/WithFilters/types.d.ts +40 -0
- package/hooks/useCategoricalChartAsListbox.js +94 -0
- package/hooks/useCategoricalChartAsListbox.js.map +1 -0
- package/index.d.ts +14 -227
- package/index.js +11 -1956
- package/index.js.map +1 -1
- package/package.json +6 -6
- package/types.d.ts +16 -0
- package/utils/groupReducers/groupReduceCount.d.ts +6 -0
- package/utils/groupReducers/groupReduceCount.js +5 -0
- package/utils/groupReducers/groupReduceCount.js.map +1 -0
- package/utils/groupReducers/groupReduceSum.d.ts +7 -0
- package/utils/groupReducers/groupReduceSum.js +5 -0
- package/utils/groupReducers/groupReduceSum.js.map +1 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import React, { useContext, useState, useEffect, isValidElement } from 'react';
|
|
3
|
+
import { useId } from '@redsift/design-system';
|
|
4
|
+
import { DashboardContext } from '../Dashboard/context.js';
|
|
5
|
+
import { CrossfilterRegistry } from '../CrossfilterRegistry/CrossfilterRegistry.js';
|
|
6
|
+
import { DashboardReducerActionType } from '../Dashboard/types.js';
|
|
7
|
+
import { ChartEmptyState } from '../ChartEmptyState/ChartEmptyState.js';
|
|
8
|
+
|
|
9
|
+
const filter = (legendFilters, brushFilters) => d => {
|
|
10
|
+
if (legendFilters && legendFilters.length && brushFilters) {
|
|
11
|
+
return d[0] >= brushFilters.minX && d[0] <= brushFilters.maxX && d[1] >= brushFilters.minY && d[1] <= brushFilters.maxY && legendFilters.includes(d[2]);
|
|
12
|
+
} else if (legendFilters && legendFilters.length) {
|
|
13
|
+
return legendFilters.includes(d[2]);
|
|
14
|
+
} else if (brushFilters) {
|
|
15
|
+
return d[0] >= brushFilters.minX && d[0] <= brushFilters.maxX && d[1] >= brushFilters.minY && d[1] <= brushFilters.maxY;
|
|
16
|
+
} else {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const isFiltered = (legendFilters, brushFilters) => datum => {
|
|
21
|
+
if (legendFilters && legendFilters.length && brushFilters) {
|
|
22
|
+
return datum.data.key[0] >= brushFilters.minX && datum.data.key[0] <= brushFilters.maxX && datum.data.key[1] >= brushFilters.minY && datum.data.key[1] <= brushFilters.maxY && legendFilters.includes(datum.data.key[2]);
|
|
23
|
+
} else if (legendFilters && legendFilters.length) {
|
|
24
|
+
return legendFilters.includes(datum.data.key[2]);
|
|
25
|
+
} else if (brushFilters) {
|
|
26
|
+
return datum.data.key[0] >= brushFilters.minX && datum.data.key[0] <= brushFilters.maxX && datum.data.key[1] >= brushFilters.minY && datum.data.key[1] <= brushFilters.maxY;
|
|
27
|
+
} else {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const FilterableScatterPlot = props => {
|
|
32
|
+
const {
|
|
33
|
+
children,
|
|
34
|
+
datagridCoordinatesCategoryDimFilter,
|
|
35
|
+
dimension,
|
|
36
|
+
group,
|
|
37
|
+
id: propsId,
|
|
38
|
+
isDimensionArray,
|
|
39
|
+
isResetable,
|
|
40
|
+
localeText,
|
|
41
|
+
onFilter
|
|
42
|
+
} = props;
|
|
43
|
+
const [_id] = useId();
|
|
44
|
+
const id = propsId !== null && propsId !== void 0 ? propsId : _id;
|
|
45
|
+
const {
|
|
46
|
+
emptyChartTitle,
|
|
47
|
+
emptyChartSubtitle,
|
|
48
|
+
emptyChartResetLabel
|
|
49
|
+
} = _objectSpread2({}, localeText);
|
|
50
|
+
const {
|
|
51
|
+
data,
|
|
52
|
+
dispatch,
|
|
53
|
+
toggleUpdateContext
|
|
54
|
+
// state: { tableFilters },
|
|
55
|
+
} = useContext(DashboardContext);
|
|
56
|
+
const [ndxDimension, setNdxDimension] = useState();
|
|
57
|
+
const [ndxGroup, setNdxGroup] = useState();
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
const computedNdxDimension = CrossfilterRegistry.get(data).dimension(dimension, isDimensionArray);
|
|
60
|
+
const computedNdxGroup = group ? group(computedNdxDimension) : computedNdxDimension.group();
|
|
61
|
+
setNdxDimension(computedNdxDimension);
|
|
62
|
+
setNdxGroup(computedNdxGroup);
|
|
63
|
+
return function cleanup() {
|
|
64
|
+
computedNdxDimension.filterAll();
|
|
65
|
+
};
|
|
66
|
+
}, [dimension, data, group]);
|
|
67
|
+
const [brushFilters, setBrushFilters] = useState();
|
|
68
|
+
const [legendFilters, setLegendFilters] = useState([]);
|
|
69
|
+
const handleBrushFilter = newFilters => {
|
|
70
|
+
setBrushFilters(newFilters);
|
|
71
|
+
ndxDimension.filter(d => filter(legendFilters, newFilters)(d));
|
|
72
|
+
toggleUpdateContext === null || toggleUpdateContext === void 0 ? void 0 : toggleUpdateContext();
|
|
73
|
+
if (datagridCoordinatesCategoryDimFilter) {
|
|
74
|
+
dispatch === null || dispatch === void 0 ? void 0 : dispatch({
|
|
75
|
+
type: DashboardReducerActionType.FilterTable,
|
|
76
|
+
filter: {
|
|
77
|
+
id: `${id}-x`,
|
|
78
|
+
columnField: datagridCoordinatesCategoryDimFilter[0].field,
|
|
79
|
+
operatorValue: datagridCoordinatesCategoryDimFilter[0].operator,
|
|
80
|
+
value: [newFilters.minX, newFilters.maxX]
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
dispatch === null || dispatch === void 0 ? void 0 : dispatch({
|
|
84
|
+
type: DashboardReducerActionType.FilterTable,
|
|
85
|
+
filter: {
|
|
86
|
+
id: `${id}-y`,
|
|
87
|
+
columnField: datagridCoordinatesCategoryDimFilter[1].field,
|
|
88
|
+
operatorValue: datagridCoordinatesCategoryDimFilter[1].operator,
|
|
89
|
+
value: [newFilters.minY, newFilters.maxY]
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (onFilter) {
|
|
94
|
+
onFilter(newFilters);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
const handleLegendFilter = category => {
|
|
98
|
+
let newFilters;
|
|
99
|
+
if (legendFilters.includes(category)) {
|
|
100
|
+
newFilters = legendFilters.filter(f => f !== category);
|
|
101
|
+
} else {
|
|
102
|
+
newFilters = [...legendFilters, category];
|
|
103
|
+
}
|
|
104
|
+
setLegendFilters(newFilters);
|
|
105
|
+
ndxDimension.filter(d => filter(newFilters, brushFilters)(d));
|
|
106
|
+
toggleUpdateContext === null || toggleUpdateContext === void 0 ? void 0 : toggleUpdateContext();
|
|
107
|
+
if ((datagridCoordinatesCategoryDimFilter === null || datagridCoordinatesCategoryDimFilter === void 0 ? void 0 : datagridCoordinatesCategoryDimFilter.length) === 3) {
|
|
108
|
+
dispatch === null || dispatch === void 0 ? void 0 : dispatch({
|
|
109
|
+
type: DashboardReducerActionType.FilterTable,
|
|
110
|
+
filter: {
|
|
111
|
+
id: `${id}-category`,
|
|
112
|
+
columnField: datagridCoordinatesCategoryDimFilter[2].field,
|
|
113
|
+
operatorValue: datagridCoordinatesCategoryDimFilter[2].operator,
|
|
114
|
+
value: newFilters
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
if (onFilter) {
|
|
119
|
+
onFilter(newFilters);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
const resetFilters = function () {
|
|
123
|
+
let brush = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
124
|
+
let legend = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
125
|
+
if (brush) {
|
|
126
|
+
setBrushFilters(undefined);
|
|
127
|
+
}
|
|
128
|
+
if (legend) {
|
|
129
|
+
setLegendFilters([]);
|
|
130
|
+
}
|
|
131
|
+
ndxDimension.filter(d => filter(legend ? [] : legendFilters, brush ? undefined : brushFilters)(d));
|
|
132
|
+
toggleUpdateContext === null || toggleUpdateContext === void 0 ? void 0 : toggleUpdateContext();
|
|
133
|
+
if (datagridCoordinatesCategoryDimFilter) {
|
|
134
|
+
if (brush) {
|
|
135
|
+
dispatch === null || dispatch === void 0 ? void 0 : dispatch({
|
|
136
|
+
type: DashboardReducerActionType.ResetFilter,
|
|
137
|
+
filter: {
|
|
138
|
+
id: `${id}-x`,
|
|
139
|
+
columnField: datagridCoordinatesCategoryDimFilter[0].field,
|
|
140
|
+
operatorValue: datagridCoordinatesCategoryDimFilter[0].operator
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
dispatch === null || dispatch === void 0 ? void 0 : dispatch({
|
|
144
|
+
type: DashboardReducerActionType.ResetFilter,
|
|
145
|
+
filter: {
|
|
146
|
+
id: `${id}-y`,
|
|
147
|
+
columnField: datagridCoordinatesCategoryDimFilter[1].field,
|
|
148
|
+
operatorValue: datagridCoordinatesCategoryDimFilter[1].operator
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
if (legend && datagridCoordinatesCategoryDimFilter.length === 3) {
|
|
153
|
+
dispatch === null || dispatch === void 0 ? void 0 : dispatch({
|
|
154
|
+
type: DashboardReducerActionType.ResetFilter,
|
|
155
|
+
filter: {
|
|
156
|
+
id: `${id}-category`,
|
|
157
|
+
columnField: datagridCoordinatesCategoryDimFilter[2].field,
|
|
158
|
+
operatorValue: datagridCoordinatesCategoryDimFilter[2].operator
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (onFilter) {
|
|
164
|
+
onFilter();
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
// useEffect(() => {
|
|
169
|
+
// if (!datagridCoordinatesCategoryDimFilter) {
|
|
170
|
+
// return;
|
|
171
|
+
// }
|
|
172
|
+
|
|
173
|
+
// const updatedXFilters = tableFilters.find(
|
|
174
|
+
// (filter) =>
|
|
175
|
+
// filter.columnField === datagridCoordinatesCategoryDimFilter[0].field &&
|
|
176
|
+
// filter.operatorValue ===
|
|
177
|
+
// datagridCoordinatesCategoryDimFilter[0].operator
|
|
178
|
+
// )?.value;
|
|
179
|
+
// const updatedYFilters = tableFilters.find(
|
|
180
|
+
// (filter) =>
|
|
181
|
+
// filter.columnField === datagridCoordinatesCategoryDimFilter[1].field &&
|
|
182
|
+
// filter.operatorValue ===
|
|
183
|
+
// datagridCoordinatesCategoryDimFilter[1].operator
|
|
184
|
+
// )?.value;
|
|
185
|
+
// console.log(updatedXFilters, updatedYFilters, brushFilters);
|
|
186
|
+
// const updatedFilters = {
|
|
187
|
+
// minX: Number(updatedXFilters[0]),
|
|
188
|
+
// maxX: Number(updatedXFilters[0]),
|
|
189
|
+
// minY: Number(updatedYFilters[1]),
|
|
190
|
+
// maxY: Number(updatedYFilters[1]),
|
|
191
|
+
// }
|
|
192
|
+
// if (updatedFilters && JSON.stringify(updatedFilters) !== JSON.stringify(brushFilters)) {
|
|
193
|
+
// }
|
|
194
|
+
// }, [tableFilters]);
|
|
195
|
+
|
|
196
|
+
const emptyComponent = /*#__PURE__*/React.createElement(ChartEmptyState, {
|
|
197
|
+
title: emptyChartTitle,
|
|
198
|
+
subtitle: emptyChartSubtitle,
|
|
199
|
+
resetLabel: emptyChartResetLabel,
|
|
200
|
+
onReset: resetFilters
|
|
201
|
+
});
|
|
202
|
+
const legendProps = {
|
|
203
|
+
onLegendItemClick: datum => {
|
|
204
|
+
handleLegendFilter(datum.data.key);
|
|
205
|
+
},
|
|
206
|
+
isLegendItemSelected: datum => {
|
|
207
|
+
return legendFilters.length === 0 || legendFilters.includes(datum.data.key);
|
|
208
|
+
},
|
|
209
|
+
legendItemRole: 'option',
|
|
210
|
+
role: 'group'
|
|
211
|
+
};
|
|
212
|
+
const filterProps = {
|
|
213
|
+
isBrushable: true,
|
|
214
|
+
data: ndxGroup ? JSON.parse(JSON.stringify(ndxGroup.all())) : undefined,
|
|
215
|
+
dotRole: 'option',
|
|
216
|
+
role: 'listbox',
|
|
217
|
+
emptyComponent,
|
|
218
|
+
id,
|
|
219
|
+
legendProps,
|
|
220
|
+
onBrush: (selection, scaleX, scaleY) => {
|
|
221
|
+
if (selection) {
|
|
222
|
+
setBrushFilters({
|
|
223
|
+
minX: scaleX.invert(selection[0][0]),
|
|
224
|
+
minY: scaleY.invert(selection[1][1]),
|
|
225
|
+
maxX: scaleX.invert(selection[1][0]),
|
|
226
|
+
maxY: scaleY.invert(selection[0][1])
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
onBrushEnd: (selection, scaleX, scaleY) => {
|
|
231
|
+
if (selection && scaleX && scaleY) {
|
|
232
|
+
handleBrushFilter({
|
|
233
|
+
minX: scaleX.invert(selection[0][0]),
|
|
234
|
+
minY: scaleY.invert(selection[1][1]),
|
|
235
|
+
maxX: scaleX.invert(selection[1][0]),
|
|
236
|
+
maxY: scaleY.invert(selection[0][1])
|
|
237
|
+
});
|
|
238
|
+
} else {
|
|
239
|
+
resetFilters(true, false);
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
onReset: isResetable ? resetFilters : undefined,
|
|
243
|
+
isDotSelected: datum => isFiltered(legendFilters, brushFilters)(datum)
|
|
244
|
+
};
|
|
245
|
+
if ( /*#__PURE__*/isValidElement(children)) {
|
|
246
|
+
return /*#__PURE__*/React.cloneElement(children, _objectSpread2({}, filterProps));
|
|
247
|
+
}
|
|
248
|
+
return null;
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
export { FilterableScatterPlot };
|
|
252
|
+
//# sourceMappingURL=FilterableScatterPlot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterableScatterPlot.js","sources":["../../../src/components/WithFilters/FilterableScatterPlot.tsx"],"sourcesContent":["import { DotDatum, LegendItemDatum } from '@redsift/charts';\nimport { Dimension, Group } from '../../types';\nimport React, { useEffect, useContext, useState, isValidElement } from 'react';\nimport { CrossfilterRegistry } from '../CrossfilterRegistry';\nimport { DashboardContext, DashboardReducerActionType } from '../Dashboard';\nimport { ChartEmptyState } from '../ChartEmptyState';\nimport { ScaleLinear as d3ScaleLinear } from 'd3';\nimport { ChartsWithFiltersProps } from './types';\nimport { useId } from '@redsift/design-system';\n\ntype BrushFilter = {\n minX: number;\n minY: number;\n maxX: number;\n maxY: number;\n};\n\nconst filter = (legendFilters?: string[], brushFilters?: BrushFilter) => (d: [number, number, string]) => {\n if (legendFilters && legendFilters.length && brushFilters) {\n return (\n d[0] >= brushFilters.minX &&\n d[0] <= brushFilters.maxX &&\n d[1] >= brushFilters.minY &&\n d[1] <= brushFilters.maxY &&\n legendFilters.includes(d[2])\n );\n } else if (legendFilters && legendFilters.length) {\n return legendFilters.includes(d[2]);\n } else if (brushFilters) {\n return (\n d[0] >= brushFilters.minX && d[0] <= brushFilters.maxX && d[1] >= brushFilters.minY && d[1] <= brushFilters.maxY\n );\n } else {\n return true;\n }\n};\n\nconst isFiltered = (legendFilters?: string[], brushFilters?: BrushFilter) => (datum: DotDatum) => {\n if (legendFilters && legendFilters.length && brushFilters) {\n return (\n (datum.data.key[0] as number) >= brushFilters.minX &&\n (datum.data.key[0] as number) <= brushFilters.maxX &&\n (datum.data.key[1] as number) >= brushFilters.minY &&\n (datum.data.key[1] as number) <= brushFilters.maxY &&\n legendFilters.includes(datum.data.key[2] as string)\n );\n } else if (legendFilters && legendFilters.length) {\n return legendFilters.includes(datum.data.key[2] as string);\n } else if (brushFilters) {\n return (\n (datum.data.key[0] as number) >= brushFilters.minX &&\n (datum.data.key[0] as number) <= brushFilters.maxX &&\n (datum.data.key[1] as number) >= brushFilters.minY &&\n (datum.data.key[1] as number) <= brushFilters.maxY\n );\n } else {\n return true;\n }\n};\n\nexport const FilterableScatterPlot: React.FC<ChartsWithFiltersProps> = (props) => {\n const {\n children,\n datagridCoordinatesCategoryDimFilter,\n dimension,\n group,\n id: propsId,\n isDimensionArray,\n isResetable,\n localeText,\n onFilter,\n } = props;\n const [_id] = useId();\n const id = propsId ?? _id;\n\n const { emptyChartTitle, emptyChartSubtitle, emptyChartResetLabel } = {\n ...localeText,\n };\n\n const {\n data,\n dispatch,\n toggleUpdateContext,\n // state: { tableFilters },\n } = useContext(DashboardContext);\n\n const [ndxDimension, setNdxDimension] = useState<Dimension>();\n const [ndxGroup, setNdxGroup] = useState<Group>();\n\n useEffect(() => {\n const computedNdxDimension = CrossfilterRegistry.get(data).dimension(dimension, isDimensionArray);\n const computedNdxGroup = group ? group(computedNdxDimension) : computedNdxDimension.group();\n setNdxDimension(computedNdxDimension);\n setNdxGroup(computedNdxGroup);\n return function cleanup() {\n computedNdxDimension.filterAll();\n };\n }, [dimension, data, group]);\n\n const [brushFilters, setBrushFilters] = useState<BrushFilter>();\n const [legendFilters, setLegendFilters] = useState<string[]>([]);\n\n const handleBrushFilter = (newFilters: BrushFilter) => {\n setBrushFilters(newFilters);\n ndxDimension!.filter((d) => filter(legendFilters, newFilters)(d as unknown as [number, number, string]));\n toggleUpdateContext?.();\n\n if (datagridCoordinatesCategoryDimFilter) {\n dispatch?.({\n type: DashboardReducerActionType.FilterTable,\n filter: {\n id: `${id}-x`,\n columnField: datagridCoordinatesCategoryDimFilter[0].field,\n operatorValue: datagridCoordinatesCategoryDimFilter[0].operator,\n value: [newFilters.minX, newFilters.maxX],\n },\n });\n dispatch?.({\n type: DashboardReducerActionType.FilterTable,\n filter: {\n id: `${id}-y`,\n columnField: datagridCoordinatesCategoryDimFilter[1].field,\n operatorValue: datagridCoordinatesCategoryDimFilter[1].operator,\n value: [newFilters.minY, newFilters.maxY],\n },\n });\n }\n\n if (onFilter) {\n onFilter(newFilters);\n }\n };\n\n const handleLegendFilter = (category: string) => {\n let newFilters: string[];\n if (legendFilters.includes(category)) {\n newFilters = legendFilters.filter((f) => f !== category);\n } else {\n newFilters = [...legendFilters, category];\n }\n\n setLegendFilters(newFilters);\n ndxDimension!.filter((d) => filter(newFilters, brushFilters)(d as unknown as [number, number, string]));\n toggleUpdateContext?.();\n\n if (datagridCoordinatesCategoryDimFilter?.length === 3) {\n dispatch?.({\n type: DashboardReducerActionType.FilterTable,\n filter: {\n id: `${id}-category`,\n columnField: datagridCoordinatesCategoryDimFilter[2].field,\n operatorValue: datagridCoordinatesCategoryDimFilter[2].operator,\n value: newFilters,\n },\n });\n }\n\n if (onFilter) {\n onFilter(newFilters);\n }\n };\n\n const resetFilters = (brush = true, legend = true) => {\n if (brush) {\n setBrushFilters(undefined);\n }\n if (legend) {\n setLegendFilters([]);\n }\n ndxDimension!.filter((d) =>\n filter(legend ? [] : legendFilters, brush ? undefined : brushFilters)(d as unknown as [number, number, string])\n );\n toggleUpdateContext?.();\n\n if (datagridCoordinatesCategoryDimFilter) {\n if (brush) {\n dispatch?.({\n type: DashboardReducerActionType.ResetFilter,\n filter: {\n id: `${id}-x`,\n columnField: datagridCoordinatesCategoryDimFilter[0].field,\n operatorValue: datagridCoordinatesCategoryDimFilter[0].operator,\n },\n });\n dispatch?.({\n type: DashboardReducerActionType.ResetFilter,\n filter: {\n id: `${id}-y`,\n columnField: datagridCoordinatesCategoryDimFilter[1].field,\n operatorValue: datagridCoordinatesCategoryDimFilter[1].operator,\n },\n });\n }\n if (legend && datagridCoordinatesCategoryDimFilter.length === 3) {\n dispatch?.({\n type: DashboardReducerActionType.ResetFilter,\n filter: {\n id: `${id}-category`,\n columnField: datagridCoordinatesCategoryDimFilter[2].field,\n operatorValue: datagridCoordinatesCategoryDimFilter[2].operator,\n },\n });\n }\n }\n\n if (onFilter) {\n onFilter();\n }\n };\n\n // useEffect(() => {\n // if (!datagridCoordinatesCategoryDimFilter) {\n // return;\n // }\n\n // const updatedXFilters = tableFilters.find(\n // (filter) =>\n // filter.columnField === datagridCoordinatesCategoryDimFilter[0].field &&\n // filter.operatorValue ===\n // datagridCoordinatesCategoryDimFilter[0].operator\n // )?.value;\n // const updatedYFilters = tableFilters.find(\n // (filter) =>\n // filter.columnField === datagridCoordinatesCategoryDimFilter[1].field &&\n // filter.operatorValue ===\n // datagridCoordinatesCategoryDimFilter[1].operator\n // )?.value;\n // console.log(updatedXFilters, updatedYFilters, brushFilters);\n // const updatedFilters = {\n // minX: Number(updatedXFilters[0]),\n // maxX: Number(updatedXFilters[0]),\n // minY: Number(updatedYFilters[1]),\n // maxY: Number(updatedYFilters[1]),\n // }\n // if (updatedFilters && JSON.stringify(updatedFilters) !== JSON.stringify(brushFilters)) {\n // }\n // }, [tableFilters]);\n\n const emptyComponent = (\n <ChartEmptyState\n title={emptyChartTitle!}\n subtitle={emptyChartSubtitle}\n resetLabel={emptyChartResetLabel}\n onReset={resetFilters}\n />\n );\n\n const legendProps = {\n onLegendItemClick: (datum: LegendItemDatum) => {\n handleLegendFilter(datum.data.key);\n },\n isLegendItemSelected: (datum: LegendItemDatum) => {\n return legendFilters.length === 0 || legendFilters.includes(datum.data.key);\n },\n legendItemRole: 'option',\n role: 'group',\n };\n\n const filterProps = {\n isBrushable: true,\n data: ndxGroup ? JSON.parse(JSON.stringify(ndxGroup.all())) : undefined,\n dotRole: 'option',\n role: 'listbox',\n emptyComponent,\n id,\n legendProps,\n onBrush: (\n selection: [[number, number], [number, number]],\n scaleX: d3ScaleLinear<number, number>,\n scaleY: d3ScaleLinear<number, number>\n ) => {\n if (selection) {\n setBrushFilters({\n minX: scaleX.invert(selection[0][0]),\n minY: scaleY.invert(selection[1][1]),\n maxX: scaleX.invert(selection[1][0]),\n maxY: scaleY.invert(selection[0][1]),\n });\n }\n },\n onBrushEnd: (\n selection: [[number, number], [number, number]],\n scaleX?: d3ScaleLinear<number, number>,\n scaleY?: d3ScaleLinear<number, number>\n ) => {\n if (selection && scaleX && scaleY) {\n handleBrushFilter({\n minX: scaleX.invert(selection[0][0]),\n minY: scaleY.invert(selection[1][1]),\n maxX: scaleX.invert(selection[1][0]),\n maxY: scaleY.invert(selection[0][1]),\n });\n } else {\n resetFilters(true, false);\n }\n },\n onReset: isResetable ? resetFilters : undefined,\n isDotSelected: (datum: DotDatum) => isFiltered(legendFilters, brushFilters)(datum),\n };\n\n if (isValidElement(children)) {\n return React.cloneElement(children, { ...filterProps });\n }\n\n return null;\n};\n"],"names":["filter","legendFilters","brushFilters","d","length","minX","maxX","minY","maxY","includes","isFiltered","datum","data","key","FilterableScatterPlot","props","children","datagridCoordinatesCategoryDimFilter","dimension","group","id","propsId","isDimensionArray","isResetable","localeText","onFilter","_id","useId","emptyChartTitle","emptyChartSubtitle","emptyChartResetLabel","_objectSpread","dispatch","toggleUpdateContext","useContext","DashboardContext","ndxDimension","setNdxDimension","useState","ndxGroup","setNdxGroup","useEffect","computedNdxDimension","CrossfilterRegistry","get","computedNdxGroup","cleanup","filterAll","setBrushFilters","setLegendFilters","handleBrushFilter","newFilters","type","DashboardReducerActionType","FilterTable","columnField","field","operatorValue","operator","value","handleLegendFilter","category","f","resetFilters","brush","arguments","undefined","legend","ResetFilter","emptyComponent","React","createElement","ChartEmptyState","title","subtitle","resetLabel","onReset","legendProps","onLegendItemClick","isLegendItemSelected","legendItemRole","role","filterProps","isBrushable","JSON","parse","stringify","all","dotRole","onBrush","selection","scaleX","scaleY","invert","onBrushEnd","isDotSelected","isValidElement","cloneElement"],"mappings":";;;;;;;;AAiBA,MAAMA,MAAM,GAAGA,CAACC,aAAwB,EAAEC,YAA0B,KAAMC,CAA2B,IAAK;AACxG,EAAA,IAAIF,aAAa,IAAIA,aAAa,CAACG,MAAM,IAAIF,YAAY,EAAE;IACzD,OACEC,CAAC,CAAC,CAAC,CAAC,IAAID,YAAY,CAACG,IAAI,IACzBF,CAAC,CAAC,CAAC,CAAC,IAAID,YAAY,CAACI,IAAI,IACzBH,CAAC,CAAC,CAAC,CAAC,IAAID,YAAY,CAACK,IAAI,IACzBJ,CAAC,CAAC,CAAC,CAAC,IAAID,YAAY,CAACM,IAAI,IACzBP,aAAa,CAACQ,QAAQ,CAACN,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEhC,GAAC,MAAM,IAAIF,aAAa,IAAIA,aAAa,CAACG,MAAM,EAAE;IAChD,OAAOH,aAAa,CAACQ,QAAQ,CAACN,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;GACpC,MAAM,IAAID,YAAY,EAAE;AACvB,IAAA,OACEC,CAAC,CAAC,CAAC,CAAC,IAAID,YAAY,CAACG,IAAI,IAAIF,CAAC,CAAC,CAAC,CAAC,IAAID,YAAY,CAACI,IAAI,IAAIH,CAAC,CAAC,CAAC,CAAC,IAAID,YAAY,CAACK,IAAI,IAAIJ,CAAC,CAAC,CAAC,CAAC,IAAID,YAAY,CAACM,IAAI,CAAA;AAEpH,GAAC,MAAM;AACL,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;AACF,CAAC,CAAA;AAED,MAAME,UAAU,GAAGA,CAACT,aAAwB,EAAEC,YAA0B,KAAMS,KAAe,IAAK;AAChG,EAAA,IAAIV,aAAa,IAAIA,aAAa,CAACG,MAAM,IAAIF,YAAY,EAAE;AACzD,IAAA,OACGS,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,IAAeX,YAAY,CAACG,IAAI,IACjDM,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,IAAeX,YAAY,CAACI,IAAI,IACjDK,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,IAAeX,YAAY,CAACK,IAAI,IACjDI,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,IAAeX,YAAY,CAACM,IAAI,IAClDP,aAAa,CAACQ,QAAQ,CAACE,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,CAAW,CAAC,CAAA;AAEvD,GAAC,MAAM,IAAIZ,aAAa,IAAIA,aAAa,CAACG,MAAM,EAAE;AAChD,IAAA,OAAOH,aAAa,CAACQ,QAAQ,CAACE,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,CAAW,CAAC,CAAA;GAC3D,MAAM,IAAIX,YAAY,EAAE;IACvB,OACGS,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,IAAeX,YAAY,CAACG,IAAI,IACjDM,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,IAAeX,YAAY,CAACI,IAAI,IACjDK,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,IAAeX,YAAY,CAACK,IAAI,IACjDI,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,IAAeX,YAAY,CAACM,IAAI,CAAA;AAEtD,GAAC,MAAM;AACL,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;AACF,CAAC,CAAA;AAEYM,MAAAA,qBAAuD,GAAIC,KAAK,IAAK;EAChF,MAAM;IACJC,QAAQ;IACRC,oCAAoC;IACpCC,SAAS;IACTC,KAAK;AACLC,IAAAA,EAAE,EAAEC,OAAO;IACXC,gBAAgB;IAChBC,WAAW;IACXC,UAAU;AACVC,IAAAA,QAAAA;AACF,GAAC,GAAGV,KAAK,CAAA;AACT,EAAA,MAAM,CAACW,GAAG,CAAC,GAAGC,KAAK,EAAE,CAAA;EACrB,MAAMP,EAAE,GAAGC,OAAO,KAAA,IAAA,IAAPA,OAAO,KAAPA,KAAAA,CAAAA,GAAAA,OAAO,GAAIK,GAAG,CAAA;EAEzB,MAAM;IAAEE,eAAe;IAAEC,kBAAkB;AAAEC,IAAAA,oBAAAA;AAAqB,GAAC,GAAAC,cAAA,CAC9DP,EAAAA,EAAAA,UAAU,CACd,CAAA;EAED,MAAM;IACJZ,IAAI;IACJoB,QAAQ;AACRC,IAAAA,mBAAAA;AACA;AACF,GAAC,GAAGC,UAAU,CAACC,gBAAgB,CAAC,CAAA;EAEhC,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGC,QAAQ,EAAa,CAAA;EAC7D,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGF,QAAQ,EAAS,CAAA;AAEjDG,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,MAAMC,oBAAoB,GAAGC,mBAAmB,CAACC,GAAG,CAAChC,IAAI,CAAC,CAACM,SAAS,CAACA,SAAS,EAAEI,gBAAgB,CAAC,CAAA;AACjG,IAAA,MAAMuB,gBAAgB,GAAG1B,KAAK,GAAGA,KAAK,CAACuB,oBAAoB,CAAC,GAAGA,oBAAoB,CAACvB,KAAK,EAAE,CAAA;IAC3FkB,eAAe,CAACK,oBAAoB,CAAC,CAAA;IACrCF,WAAW,CAACK,gBAAgB,CAAC,CAAA;IAC7B,OAAO,SAASC,OAAOA,GAAG;MACxBJ,oBAAoB,CAACK,SAAS,EAAE,CAAA;KACjC,CAAA;GACF,EAAE,CAAC7B,SAAS,EAAEN,IAAI,EAAEO,KAAK,CAAC,CAAC,CAAA;EAE5B,MAAM,CAACjB,YAAY,EAAE8C,eAAe,CAAC,GAAGV,QAAQ,EAAe,CAAA;EAC/D,MAAM,CAACrC,aAAa,EAAEgD,gBAAgB,CAAC,GAAGX,QAAQ,CAAW,EAAE,CAAC,CAAA;EAEhE,MAAMY,iBAAiB,GAAIC,UAAuB,IAAK;IACrDH,eAAe,CAACG,UAAU,CAAC,CAAA;AAC3Bf,IAAAA,YAAY,CAAEpC,MAAM,CAAEG,CAAC,IAAKH,MAAM,CAACC,aAAa,EAAEkD,UAAU,CAAC,CAAChD,CAAwC,CAAC,CAAC,CAAA;AACxG8B,IAAAA,mBAAmB,KAAnBA,IAAAA,IAAAA,mBAAmB,KAAnBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,mBAAmB,EAAI,CAAA;AAEvB,IAAA,IAAIhB,oCAAoC,EAAE;AACxCe,MAAAA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAG;QACToB,IAAI,EAAEC,0BAA0B,CAACC,WAAW;AAC5CtD,QAAAA,MAAM,EAAE;UACNoB,EAAE,EAAG,CAAEA,EAAAA,EAAG,CAAG,EAAA,CAAA;AACbmC,UAAAA,WAAW,EAAEtC,oCAAoC,CAAC,CAAC,CAAC,CAACuC,KAAK;AAC1DC,UAAAA,aAAa,EAAExC,oCAAoC,CAAC,CAAC,CAAC,CAACyC,QAAQ;UAC/DC,KAAK,EAAE,CAACR,UAAU,CAAC9C,IAAI,EAAE8C,UAAU,CAAC7C,IAAI,CAAA;AAC1C,SAAA;AACF,OAAC,CAAC,CAAA;AACF0B,MAAAA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAG;QACToB,IAAI,EAAEC,0BAA0B,CAACC,WAAW;AAC5CtD,QAAAA,MAAM,EAAE;UACNoB,EAAE,EAAG,CAAEA,EAAAA,EAAG,CAAG,EAAA,CAAA;AACbmC,UAAAA,WAAW,EAAEtC,oCAAoC,CAAC,CAAC,CAAC,CAACuC,KAAK;AAC1DC,UAAAA,aAAa,EAAExC,oCAAoC,CAAC,CAAC,CAAC,CAACyC,QAAQ;UAC/DC,KAAK,EAAE,CAACR,UAAU,CAAC5C,IAAI,EAAE4C,UAAU,CAAC3C,IAAI,CAAA;AAC1C,SAAA;AACF,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,IAAIiB,QAAQ,EAAE;MACZA,QAAQ,CAAC0B,UAAU,CAAC,CAAA;AACtB,KAAA;GACD,CAAA;EAED,MAAMS,kBAAkB,GAAIC,QAAgB,IAAK;AAC/C,IAAA,IAAIV,UAAoB,CAAA;AACxB,IAAA,IAAIlD,aAAa,CAACQ,QAAQ,CAACoD,QAAQ,CAAC,EAAE;MACpCV,UAAU,GAAGlD,aAAa,CAACD,MAAM,CAAE8D,CAAC,IAAKA,CAAC,KAAKD,QAAQ,CAAC,CAAA;AAC1D,KAAC,MAAM;AACLV,MAAAA,UAAU,GAAG,CAAC,GAAGlD,aAAa,EAAE4D,QAAQ,CAAC,CAAA;AAC3C,KAAA;IAEAZ,gBAAgB,CAACE,UAAU,CAAC,CAAA;AAC5Bf,IAAAA,YAAY,CAAEpC,MAAM,CAAEG,CAAC,IAAKH,MAAM,CAACmD,UAAU,EAAEjD,YAAY,CAAC,CAACC,CAAwC,CAAC,CAAC,CAAA;AACvG8B,IAAAA,mBAAmB,KAAnBA,IAAAA,IAAAA,mBAAmB,KAAnBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,mBAAmB,EAAI,CAAA;IAEvB,IAAI,CAAAhB,oCAAoC,KAAA,IAAA,IAApCA,oCAAoC,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAApCA,oCAAoC,CAAEb,MAAM,MAAK,CAAC,EAAE;AACtD4B,MAAAA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAG;QACToB,IAAI,EAAEC,0BAA0B,CAACC,WAAW;AAC5CtD,QAAAA,MAAM,EAAE;UACNoB,EAAE,EAAG,CAAEA,EAAAA,EAAG,CAAU,SAAA,CAAA;AACpBmC,UAAAA,WAAW,EAAEtC,oCAAoC,CAAC,CAAC,CAAC,CAACuC,KAAK;AAC1DC,UAAAA,aAAa,EAAExC,oCAAoC,CAAC,CAAC,CAAC,CAACyC,QAAQ;AAC/DC,UAAAA,KAAK,EAAER,UAAAA;AACT,SAAA;AACF,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,IAAI1B,QAAQ,EAAE;MACZA,QAAQ,CAAC0B,UAAU,CAAC,CAAA;AACtB,KAAA;GACD,CAAA;AAED,EAAA,MAAMY,YAAY,GAAG,YAAiC;AAAA,IAAA,IAAhCC,KAAK,GAAAC,SAAA,CAAA7D,MAAA,GAAA,CAAA,IAAA6D,SAAA,CAAA,CAAA,CAAA,KAAAC,SAAA,GAAAD,SAAA,CAAA,CAAA,CAAA,GAAG,IAAI,CAAA;AAAA,IAAA,IAAEE,MAAM,GAAAF,SAAA,CAAA7D,MAAA,GAAA,CAAA,IAAA6D,SAAA,CAAA,CAAA,CAAA,KAAAC,SAAA,GAAAD,SAAA,CAAA,CAAA,CAAA,GAAG,IAAI,CAAA;AAC/C,IAAA,IAAID,KAAK,EAAE;MACThB,eAAe,CAACkB,SAAS,CAAC,CAAA;AAC5B,KAAA;AACA,IAAA,IAAIC,MAAM,EAAE;MACVlB,gBAAgB,CAAC,EAAE,CAAC,CAAA;AACtB,KAAA;IACAb,YAAY,CAAEpC,MAAM,CAAEG,CAAC,IACrBH,MAAM,CAACmE,MAAM,GAAG,EAAE,GAAGlE,aAAa,EAAE+D,KAAK,GAAGE,SAAS,GAAGhE,YAAY,CAAC,CAACC,CAAwC,CAChH,CAAC,CAAA;AACD8B,IAAAA,mBAAmB,KAAnBA,IAAAA,IAAAA,mBAAmB,KAAnBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,mBAAmB,EAAI,CAAA;AAEvB,IAAA,IAAIhB,oCAAoC,EAAE;AACxC,MAAA,IAAI+C,KAAK,EAAE;AACThC,QAAAA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAG;UACToB,IAAI,EAAEC,0BAA0B,CAACe,WAAW;AAC5CpE,UAAAA,MAAM,EAAE;YACNoB,EAAE,EAAG,CAAEA,EAAAA,EAAG,CAAG,EAAA,CAAA;AACbmC,YAAAA,WAAW,EAAEtC,oCAAoC,CAAC,CAAC,CAAC,CAACuC,KAAK;AAC1DC,YAAAA,aAAa,EAAExC,oCAAoC,CAAC,CAAC,CAAC,CAACyC,QAAAA;AACzD,WAAA;AACF,SAAC,CAAC,CAAA;AACF1B,QAAAA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAG;UACToB,IAAI,EAAEC,0BAA0B,CAACe,WAAW;AAC5CpE,UAAAA,MAAM,EAAE;YACNoB,EAAE,EAAG,CAAEA,EAAAA,EAAG,CAAG,EAAA,CAAA;AACbmC,YAAAA,WAAW,EAAEtC,oCAAoC,CAAC,CAAC,CAAC,CAACuC,KAAK;AAC1DC,YAAAA,aAAa,EAAExC,oCAAoC,CAAC,CAAC,CAAC,CAACyC,QAAAA;AACzD,WAAA;AACF,SAAC,CAAC,CAAA;AACJ,OAAA;AACA,MAAA,IAAIS,MAAM,IAAIlD,oCAAoC,CAACb,MAAM,KAAK,CAAC,EAAE;AAC/D4B,QAAAA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAG;UACToB,IAAI,EAAEC,0BAA0B,CAACe,WAAW;AAC5CpE,UAAAA,MAAM,EAAE;YACNoB,EAAE,EAAG,CAAEA,EAAAA,EAAG,CAAU,SAAA,CAAA;AACpBmC,YAAAA,WAAW,EAAEtC,oCAAoC,CAAC,CAAC,CAAC,CAACuC,KAAK;AAC1DC,YAAAA,aAAa,EAAExC,oCAAoC,CAAC,CAAC,CAAC,CAACyC,QAAAA;AACzD,WAAA;AACF,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAA;AAEA,IAAA,IAAIjC,QAAQ,EAAE;AACZA,MAAAA,QAAQ,EAAE,CAAA;AACZ,KAAA;GACD,CAAA;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAA,MAAM4C,cAAc,gBAClBC,KAAA,CAAAC,aAAA,CAACC,eAAe,EAAA;AACdC,IAAAA,KAAK,EAAE7C,eAAiB;AACxB8C,IAAAA,QAAQ,EAAE7C,kBAAmB;AAC7B8C,IAAAA,UAAU,EAAE7C,oBAAqB;AACjC8C,IAAAA,OAAO,EAAEb,YAAAA;AAAa,GACvB,CACF,CAAA;AAED,EAAA,MAAMc,WAAW,GAAG;IAClBC,iBAAiB,EAAGnE,KAAsB,IAAK;AAC7CiD,MAAAA,kBAAkB,CAACjD,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAA;KACnC;IACDkE,oBAAoB,EAAGpE,KAAsB,IAAK;AAChD,MAAA,OAAOV,aAAa,CAACG,MAAM,KAAK,CAAC,IAAIH,aAAa,CAACQ,QAAQ,CAACE,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAA;KAC5E;AACDmE,IAAAA,cAAc,EAAE,QAAQ;AACxBC,IAAAA,IAAI,EAAE,OAAA;GACP,CAAA;AAED,EAAA,MAAMC,WAAW,GAAG;AAClBC,IAAAA,WAAW,EAAE,IAAI;AACjBvE,IAAAA,IAAI,EAAE2B,QAAQ,GAAG6C,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAAC/C,QAAQ,CAACgD,GAAG,EAAE,CAAC,CAAC,GAAGrB,SAAS;AACvEsB,IAAAA,OAAO,EAAE,QAAQ;AACjBP,IAAAA,IAAI,EAAE,SAAS;IACfZ,cAAc;IACdjD,EAAE;IACFyD,WAAW;AACXY,IAAAA,OAAO,EAAEA,CACPC,SAA+C,EAC/CC,MAAqC,EACrCC,MAAqC,KAClC;AACH,MAAA,IAAIF,SAAS,EAAE;AACb1C,QAAAA,eAAe,CAAC;AACd3C,UAAAA,IAAI,EAAEsF,MAAM,CAACE,MAAM,CAACH,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpCnF,UAAAA,IAAI,EAAEqF,MAAM,CAACC,MAAM,CAACH,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpCpF,UAAAA,IAAI,EAAEqF,MAAM,CAACE,MAAM,CAACH,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UACpClF,IAAI,EAAEoF,MAAM,CAACC,MAAM,CAACH,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACrC,SAAC,CAAC,CAAA;AACJ,OAAA;KACD;AACDI,IAAAA,UAAU,EAAEA,CACVJ,SAA+C,EAC/CC,MAAsC,EACtCC,MAAsC,KACnC;AACH,MAAA,IAAIF,SAAS,IAAIC,MAAM,IAAIC,MAAM,EAAE;AACjC1C,QAAAA,iBAAiB,CAAC;AAChB7C,UAAAA,IAAI,EAAEsF,MAAM,CAACE,MAAM,CAACH,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpCnF,UAAAA,IAAI,EAAEqF,MAAM,CAACC,MAAM,CAACH,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpCpF,UAAAA,IAAI,EAAEqF,MAAM,CAACE,MAAM,CAACH,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UACpClF,IAAI,EAAEoF,MAAM,CAACC,MAAM,CAACH,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACrC,SAAC,CAAC,CAAA;AACJ,OAAC,MAAM;AACL3B,QAAAA,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AAC3B,OAAA;KACD;AACDa,IAAAA,OAAO,EAAErD,WAAW,GAAGwC,YAAY,GAAGG,SAAS;IAC/C6B,aAAa,EAAGpF,KAAe,IAAKD,UAAU,CAACT,aAAa,EAAEC,YAAY,CAAC,CAACS,KAAK,CAAA;GAClF,CAAA;AAED,EAAA,kBAAIqF,cAAc,CAAChF,QAAQ,CAAC,EAAE;IAC5B,oBAAOsD,KAAK,CAAC2B,YAAY,CAACjF,QAAQ,EAAAe,cAAA,CAAA,EAAA,EAAOmD,WAAW,CAAE,CAAC,CAAA;AACzD,GAAA;AAEA,EAAA,OAAO,IAAI,CAAA;AACb;;;;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { isComponent } from '@redsift/design-system';
|
|
4
|
+
import { FilterableBarChart } from './FilterableBarChart.js';
|
|
5
|
+
import { FilterableDataGrid } from './FilterableDataGrid.js';
|
|
6
|
+
import { FilterablePieChart } from './FilterablePieChart.js';
|
|
7
|
+
import { FilterableScatterPlot } from './FilterableScatterPlot.js';
|
|
8
|
+
|
|
9
|
+
const WithFilters = props => {
|
|
10
|
+
if (isComponent('DataGrid')(props.children)) {
|
|
11
|
+
return /*#__PURE__*/React.createElement(FilterableDataGrid, props);
|
|
12
|
+
}
|
|
13
|
+
const {
|
|
14
|
+
dimension
|
|
15
|
+
} = props;
|
|
16
|
+
if (!dimension) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
if (isComponent('BarChart')(props.children)) {
|
|
20
|
+
return /*#__PURE__*/React.createElement(FilterableBarChart, _extends({}, props, {
|
|
21
|
+
dimension: dimension
|
|
22
|
+
}));
|
|
23
|
+
} else if (isComponent('PieChart')(props.children)) {
|
|
24
|
+
return /*#__PURE__*/React.createElement(FilterablePieChart, _extends({}, props, {
|
|
25
|
+
dimension: dimension
|
|
26
|
+
}));
|
|
27
|
+
} else if (isComponent('ScatterPlot')(props.children)) {
|
|
28
|
+
return /*#__PURE__*/React.createElement(FilterableScatterPlot, _extends({}, props, {
|
|
29
|
+
dimension: dimension
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
return /*#__PURE__*/React.isValidElement(props.children) ? props.children : null;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export { WithFilters };
|
|
36
|
+
//# sourceMappingURL=WithFilters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WithFilters.js","sources":["../../../src/components/WithFilters/WithFilters.tsx"],"sourcesContent":["import React from 'react';\nimport { isComponent } from '@redsift/design-system';\nimport { FilterableBarChart } from './FilterableBarChart';\nimport { FilterableDataGrid } from './FilterableDataGrid';\nimport { FilterablePieChart } from './FilterablePieChart';\nimport { FilterableScatterPlot } from './FilterableScatterPlot';\nimport { WithFiltersProps } from './types';\n\nexport const WithFilters: React.FC<WithFiltersProps> = (props) => {\n if (isComponent('DataGrid')(props.children)) {\n return <FilterableDataGrid {...props} />;\n }\n\n const { dimension } = props;\n\n if (!dimension) {\n return null;\n }\n\n if (isComponent('BarChart')(props.children)) {\n return <FilterableBarChart {...props} dimension={dimension} />;\n } else if (isComponent('PieChart')(props.children)) {\n return <FilterablePieChart {...props} dimension={dimension} />;\n } else if (isComponent('ScatterPlot')(props.children)) {\n return <FilterableScatterPlot {...props} dimension={dimension} />;\n }\n\n return React.isValidElement(props.children) ? props.children : null;\n};\n"],"names":["WithFilters","props","isComponent","children","React","createElement","FilterableDataGrid","dimension","FilterableBarChart","_extends","FilterablePieChart","FilterableScatterPlot","isValidElement"],"mappings":";;;;;;;;AAQaA,MAAAA,WAAuC,GAAIC,KAAK,IAAK;EAChE,IAAIC,WAAW,CAAC,UAAU,CAAC,CAACD,KAAK,CAACE,QAAQ,CAAC,EAAE;AAC3C,IAAA,oBAAOC,KAAA,CAAAC,aAAA,CAACC,kBAAkB,EAAKL,KAAQ,CAAC,CAAA;AAC1C,GAAA;EAEA,MAAM;AAAEM,IAAAA,SAAAA;AAAU,GAAC,GAAGN,KAAK,CAAA;EAE3B,IAAI,CAACM,SAAS,EAAE;AACd,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;EAEA,IAAIL,WAAW,CAAC,UAAU,CAAC,CAACD,KAAK,CAACE,QAAQ,CAAC,EAAE;IAC3C,oBAAOC,KAAA,CAAAC,aAAA,CAACG,kBAAkB,EAAAC,QAAA,KAAKR,KAAK,EAAA;AAAEM,MAAAA,SAAS,EAAEA,SAAAA;AAAU,KAAA,CAAE,CAAC,CAAA;GAC/D,MAAM,IAAIL,WAAW,CAAC,UAAU,CAAC,CAACD,KAAK,CAACE,QAAQ,CAAC,EAAE;IAClD,oBAAOC,KAAA,CAAAC,aAAA,CAACK,kBAAkB,EAAAD,QAAA,KAAKR,KAAK,EAAA;AAAEM,MAAAA,SAAS,EAAEA,SAAAA;AAAU,KAAA,CAAE,CAAC,CAAA;GAC/D,MAAM,IAAIL,WAAW,CAAC,aAAa,CAAC,CAACD,KAAK,CAACE,QAAQ,CAAC,EAAE;IACrD,oBAAOC,KAAA,CAAAC,aAAA,CAACM,qBAAqB,EAAAF,QAAA,KAAKR,KAAK,EAAA;AAAEM,MAAAA,SAAS,EAAEA,SAAAA;AAAU,KAAA,CAAE,CAAC,CAAA;AACnE,GAAA;AAEA,EAAA,oBAAOH,KAAK,CAACQ,cAAc,CAACX,KAAK,CAACE,QAAQ,CAAC,GAAGF,KAAK,CAACE,QAAQ,GAAG,IAAI,CAAA;AACrE;;;;"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ComponentProps } from 'react';
|
|
2
|
+
import { DimensionSelector, Dimension, Group } from '../../types.js';
|
|
3
|
+
import { NaturallyOrderedValue } from 'crossfilter2';
|
|
4
|
+
|
|
5
|
+
interface LocaleText {
|
|
6
|
+
emptyChartTitle?: string;
|
|
7
|
+
emptyChartSubtitle?: string;
|
|
8
|
+
emptyChartResetLabel?: string;
|
|
9
|
+
resetLabel?: string;
|
|
10
|
+
}
|
|
11
|
+
type CategoryFilterType = {
|
|
12
|
+
field: string;
|
|
13
|
+
operator: 'containsAnyOf' | 'endsWithAnyOf' | 'isAnyOf' | 'startsWithAnyOf';
|
|
14
|
+
};
|
|
15
|
+
type CoordinateFilterType = {
|
|
16
|
+
field: string;
|
|
17
|
+
operator: 'isBetween';
|
|
18
|
+
};
|
|
19
|
+
interface WithFiltersProps extends ComponentProps<'div'> {
|
|
20
|
+
/** In case of a chart based on one dimension (category), which datagrid column the chart is filtering and using which operator. */
|
|
21
|
+
datagridCategoryDimFilter?: CategoryFilterType;
|
|
22
|
+
/** In case of a chart based on two dimension coordinates (x, y), which datagrid columns the chart is filtering. */
|
|
23
|
+
datagridCoordinatesCategoryDimFilter?: [CoordinateFilterType, CoordinateFilterType] | [CoordinateFilterType, CoordinateFilterType, CategoryFilterType];
|
|
24
|
+
/** Method that will be used by crossfilter to compute the dimensions of the charts. */
|
|
25
|
+
dimension?: DimensionSelector;
|
|
26
|
+
/** Method that will be used by crossfilter to compute the groups of the charts. */
|
|
27
|
+
group?: (d: Dimension) => Group;
|
|
28
|
+
/** Whether the dimension field is an array or not. */
|
|
29
|
+
isDimensionArray?: boolean;
|
|
30
|
+
/** Whether the reset button is hidden or not. */
|
|
31
|
+
isResetable?: boolean;
|
|
32
|
+
/** Overriden values for internal labels and texts. */
|
|
33
|
+
localeText?: LocaleText;
|
|
34
|
+
/** Method to call when a filter occured on the chart. */
|
|
35
|
+
onFilter?: (filters?: NaturallyOrderedValue[] | any) => void;
|
|
36
|
+
}
|
|
37
|
+
interface ChartsWithFiltersProps extends Required<Pick<WithFiltersProps, 'dimension'>>, Omit<WithFiltersProps, 'dimension'> {
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export { ChartsWithFiltersProps, WithFiltersProps };
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { useRef, useMemo } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Hook to give to a chart the roles, events and attributes of a listbox.
|
|
5
|
+
*/
|
|
6
|
+
const useCategoricalChartAsListbox = _ref => {
|
|
7
|
+
let {
|
|
8
|
+
id,
|
|
9
|
+
ref,
|
|
10
|
+
type,
|
|
11
|
+
ndxGroup,
|
|
12
|
+
orientation = 'horizontal'
|
|
13
|
+
} = _ref;
|
|
14
|
+
const currentIndexRef = useRef(0);
|
|
15
|
+
const props = useMemo(() => {
|
|
16
|
+
const numberOfGroups = ndxGroup === null || ndxGroup === void 0 ? void 0 : ndxGroup.all().filter(datum => datum.value).length;
|
|
17
|
+
if (ref && numberOfGroups) {
|
|
18
|
+
const getCurrentOption = () => ref.current.querySelector(`._${currentIndexRef.current}`);
|
|
19
|
+
const next = () => {
|
|
20
|
+
getCurrentOption().classList.remove('focused');
|
|
21
|
+
const index = currentIndexRef.current === numberOfGroups - 1 ? 0 : currentIndexRef.current + 1;
|
|
22
|
+
currentIndexRef.current = index;
|
|
23
|
+
ref.current.setAttribute('aria-activedescendant', `id${id}__${type}-${currentIndexRef.current}`);
|
|
24
|
+
getCurrentOption().classList.add('focused');
|
|
25
|
+
};
|
|
26
|
+
const previous = () => {
|
|
27
|
+
getCurrentOption().classList.remove('focused');
|
|
28
|
+
const index = currentIndexRef.current === 0 ? numberOfGroups - 1 : currentIndexRef.current - 1;
|
|
29
|
+
currentIndexRef.current = index;
|
|
30
|
+
ref.current.setAttribute('aria-activedescendant', `id${id}__${type}-${currentIndexRef.current}`);
|
|
31
|
+
getCurrentOption().classList.add('focused');
|
|
32
|
+
};
|
|
33
|
+
const focus = () => {
|
|
34
|
+
ref.current.setAttribute('aria-activedescendant', `id${id}__${type}-0`);
|
|
35
|
+
getCurrentOption().classList.add('focused');
|
|
36
|
+
};
|
|
37
|
+
const blur = () => {
|
|
38
|
+
getCurrentOption().classList.remove('focused');
|
|
39
|
+
currentIndexRef.current = 0;
|
|
40
|
+
ref.current.setAttribute('aria-activedescendant', '');
|
|
41
|
+
};
|
|
42
|
+
const keydown = e => {
|
|
43
|
+
e.stopPropagation();
|
|
44
|
+
switch (e.code) {
|
|
45
|
+
case 'ArrowRight':
|
|
46
|
+
if (orientation === 'horizontal') {
|
|
47
|
+
e.preventDefault();
|
|
48
|
+
next();
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
case 'ArrowLeft':
|
|
52
|
+
if (orientation === 'horizontal') {
|
|
53
|
+
e.preventDefault();
|
|
54
|
+
previous();
|
|
55
|
+
}
|
|
56
|
+
break;
|
|
57
|
+
case 'ArrowDown':
|
|
58
|
+
if (orientation === 'vertical') {
|
|
59
|
+
e.preventDefault();
|
|
60
|
+
next();
|
|
61
|
+
}
|
|
62
|
+
break;
|
|
63
|
+
case 'ArrowUp':
|
|
64
|
+
if (orientation === 'vertical') {
|
|
65
|
+
e.preventDefault();
|
|
66
|
+
previous();
|
|
67
|
+
}
|
|
68
|
+
break;
|
|
69
|
+
case 'Enter':
|
|
70
|
+
case 'Space':
|
|
71
|
+
e.preventDefault();
|
|
72
|
+
getCurrentOption().dispatchEvent(new Event('click'));
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
return {
|
|
77
|
+
'aria-activedescendant': '',
|
|
78
|
+
'aria-multiselectable': 'true',
|
|
79
|
+
'aria-orientation': orientation,
|
|
80
|
+
role: 'listbox',
|
|
81
|
+
tabIndex: 0,
|
|
82
|
+
onFocus: focus,
|
|
83
|
+
onBlur: blur,
|
|
84
|
+
onMouseDown: event => event.preventDefault(),
|
|
85
|
+
onMouseLeave: blur,
|
|
86
|
+
onKeyDown: keydown
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}, [ref, ref.current, ndxGroup, JSON.parse(JSON.stringify((ndxGroup === null || ndxGroup === void 0 ? void 0 : ndxGroup.all()) || ''))]);
|
|
90
|
+
return props;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export { useCategoricalChartAsListbox };
|
|
94
|
+
//# sourceMappingURL=useCategoricalChartAsListbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCategoricalChartAsListbox.js","sources":["../../src/hooks/useCategoricalChartAsListbox.ts"],"sourcesContent":["import { BaseMixin } from 'dc';\nimport { useRef, KeyboardEvent, useMemo, MutableRefObject } from 'react';\nimport { Group } from '../types';\n\ntype UseCategoricalChartAsListboxProps = <T extends BaseMixin<T>>(props: {\n id: string;\n ref: MutableRefObject<HTMLDivElement>;\n type: 'bar' | 'slice';\n ndxGroup?: Group;\n orientation?: 'horizontal' | 'vertical';\n}) => void;\n\n/**\n * Hook to give to a chart the roles, events and attributes of a listbox.\n */\nexport const useCategoricalChartAsListbox: UseCategoricalChartAsListboxProps =\n ({ id, ref, type, ndxGroup, orientation = 'horizontal' }) => {\n const currentIndexRef = useRef(0);\n\n const props = useMemo(() => {\n const numberOfGroups = ndxGroup\n ?.all()\n .filter((datum) => datum.value).length;\n if (ref && numberOfGroups) {\n const getCurrentOption = () =>\n ref.current.querySelector(\n `._${currentIndexRef.current}`\n ) as HTMLElement;\n\n const next = () => {\n getCurrentOption().classList.remove('focused');\n const index =\n currentIndexRef.current === numberOfGroups - 1\n ? 0\n : currentIndexRef.current + 1;\n currentIndexRef.current = index;\n ref.current.setAttribute(\n 'aria-activedescendant',\n `id${id}__${type}-${currentIndexRef.current}`\n );\n getCurrentOption().classList.add('focused');\n };\n\n const previous = () => {\n getCurrentOption().classList.remove('focused');\n const index =\n currentIndexRef.current === 0\n ? numberOfGroups - 1\n : currentIndexRef.current - 1;\n currentIndexRef.current = index;\n ref.current.setAttribute(\n 'aria-activedescendant',\n `id${id}__${type}-${currentIndexRef.current}`\n );\n getCurrentOption().classList.add('focused');\n };\n\n const focus = () => {\n ref.current.setAttribute(\n 'aria-activedescendant',\n `id${id}__${type}-0`\n );\n getCurrentOption().classList.add('focused');\n };\n\n const blur = () => {\n getCurrentOption().classList.remove('focused');\n currentIndexRef.current = 0;\n ref.current.setAttribute('aria-activedescendant', '');\n };\n\n const keydown = (e: Event) => {\n e.stopPropagation();\n\n switch ((e as unknown as KeyboardEvent).code) {\n case 'ArrowRight':\n if (orientation === 'horizontal') {\n e.preventDefault();\n next();\n }\n break;\n case 'ArrowLeft':\n if (orientation === 'horizontal') {\n e.preventDefault();\n previous();\n }\n break;\n case 'ArrowDown':\n if (orientation === 'vertical') {\n e.preventDefault();\n next();\n }\n break;\n case 'ArrowUp':\n if (orientation === 'vertical') {\n e.preventDefault();\n previous();\n }\n break;\n case 'Enter':\n case 'Space':\n e.preventDefault();\n getCurrentOption().dispatchEvent(new Event('click'));\n break;\n default:\n break;\n }\n };\n\n return {\n 'aria-activedescendant': '',\n 'aria-multiselectable': 'true',\n 'aria-orientation': orientation,\n role: 'listbox',\n tabIndex: 0,\n onFocus: focus,\n onBlur: blur,\n onMouseDown: (event: MouseEvent) => event.preventDefault(),\n onMouseLeave: blur,\n onKeyDown: keydown,\n };\n }\n }, [\n ref,\n ref.current,\n ndxGroup,\n JSON.parse(JSON.stringify(ndxGroup?.all() || '')),\n ]);\n\n return props;\n };\n"],"names":["useCategoricalChartAsListbox","_ref","id","ref","type","ndxGroup","orientation","currentIndexRef","useRef","props","useMemo","numberOfGroups","all","filter","datum","value","length","getCurrentOption","current","querySelector","next","classList","remove","index","setAttribute","add","previous","focus","blur","keydown","e","stopPropagation","code","preventDefault","dispatchEvent","Event","role","tabIndex","onFocus","onBlur","onMouseDown","event","onMouseLeave","onKeyDown","JSON","parse","stringify"],"mappings":"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"}
|