@redsift/dashboard 11.5.0 → 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.
Files changed (63) hide show
  1. package/_virtual/_rollupPluginBabelHelpers.js +93 -0
  2. package/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  3. package/components/ChartEmptyState/ChartEmptyState.d.ts +6 -0
  4. package/components/ChartEmptyState/ChartEmptyState.js +123 -0
  5. package/components/ChartEmptyState/ChartEmptyState.js.map +1 -0
  6. package/components/ChartEmptyState/styles.js +35 -0
  7. package/components/ChartEmptyState/styles.js.map +1 -0
  8. package/components/ChartEmptyState/types.d.ts +17 -0
  9. package/components/CrossfilterRegistry/CrossfilterRegistry.js +23 -0
  10. package/components/CrossfilterRegistry/CrossfilterRegistry.js.map +1 -0
  11. package/components/Dashboard/Dashboard.d.ts +6 -0
  12. package/components/Dashboard/Dashboard.js +46 -0
  13. package/components/Dashboard/Dashboard.js.map +1 -0
  14. package/components/Dashboard/context.d.ts +7 -0
  15. package/components/Dashboard/context.js +11 -0
  16. package/components/Dashboard/context.js.map +1 -0
  17. package/components/Dashboard/reducer.d.ts +5 -0
  18. package/components/Dashboard/reducer.js +61 -0
  19. package/components/Dashboard/reducer.js.map +1 -0
  20. package/components/Dashboard/types.d.ts +44 -0
  21. package/components/Dashboard/types.js +23 -0
  22. package/components/Dashboard/types.js.map +1 -0
  23. package/components/PdfExportButton/PdfDocument.js +173 -0
  24. package/components/PdfExportButton/PdfDocument.js.map +1 -0
  25. package/components/PdfExportButton/PdfExportButton.d.ts +6 -0
  26. package/components/PdfExportButton/PdfExportButton.js +110 -0
  27. package/components/PdfExportButton/PdfExportButton.js.map +1 -0
  28. package/components/PdfExportButton/styles.js +146 -0
  29. package/components/PdfExportButton/styles.js.map +1 -0
  30. package/components/PdfExportButton/types.d.ts +24 -0
  31. package/components/TimeSeriesBarChart/TimeSeriesBarChart.d.ts +6 -0
  32. package/components/TimeSeriesBarChart/TimeSeriesBarChart.js +365 -0
  33. package/components/TimeSeriesBarChart/TimeSeriesBarChart.js.map +1 -0
  34. package/components/TimeSeriesBarChart/styles.js +98 -0
  35. package/components/TimeSeriesBarChart/styles.js.map +1 -0
  36. package/components/TimeSeriesBarChart/types.d.ts +84 -0
  37. package/components/TimeSeriesBarChart/types.js +22 -0
  38. package/components/TimeSeriesBarChart/types.js.map +1 -0
  39. package/components/WithFilters/FilterableBarChart.js +152 -0
  40. package/components/WithFilters/FilterableBarChart.js.map +1 -0
  41. package/components/WithFilters/FilterableDataGrid.js +51 -0
  42. package/components/WithFilters/FilterableDataGrid.js.map +1 -0
  43. package/components/WithFilters/FilterablePieChart.js +160 -0
  44. package/components/WithFilters/FilterablePieChart.js.map +1 -0
  45. package/components/WithFilters/FilterableScatterPlot.js +252 -0
  46. package/components/WithFilters/FilterableScatterPlot.js.map +1 -0
  47. package/components/WithFilters/WithFilters.d.ts +6 -0
  48. package/components/WithFilters/WithFilters.js +36 -0
  49. package/components/WithFilters/WithFilters.js.map +1 -0
  50. package/components/WithFilters/types.d.ts +40 -0
  51. package/hooks/useCategoricalChartAsListbox.js +94 -0
  52. package/hooks/useCategoricalChartAsListbox.js.map +1 -0
  53. package/index.d.ts +14 -227
  54. package/index.js +11 -1956
  55. package/index.js.map +1 -1
  56. package/package.json +8 -8
  57. package/types.d.ts +16 -0
  58. package/utils/groupReducers/groupReduceCount.d.ts +6 -0
  59. package/utils/groupReducers/groupReduceCount.js +5 -0
  60. package/utils/groupReducers/groupReduceCount.js.map +1 -0
  61. package/utils/groupReducers/groupReduceSum.d.ts +7 -0
  62. package/utils/groupReducers/groupReduceSum.js +5 -0
  63. 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":"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"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { WithFiltersProps } from './types.js';
3
+
4
+ declare const WithFilters: React.FC<WithFiltersProps>;
5
+
6
+ export { WithFilters };
@@ -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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"}