@devgateway/dvz-wp-commons 1.2.0 → 1.3.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 (51) hide show
  1. package/build/APIConfig.cjs +479 -0
  2. package/build/APIConfig.d.ts +12 -0
  3. package/build/APIConfig.js +367 -283
  4. package/build/APIutils.cjs +54 -0
  5. package/build/APIutils.js +7 -1
  6. package/build/Blocks.cjs +672 -0
  7. package/build/Blocks.d.ts +14 -1
  8. package/build/Blocks.js +523 -330
  9. package/build/CSVSourceConfig.cjs +99 -0
  10. package/build/CSVSourceConfig.js +63 -46
  11. package/build/ChartColors.cjs +593 -0
  12. package/build/ChartColors.d.ts +0 -1
  13. package/build/ChartColors.js +430 -366
  14. package/build/ChartLegends.cjs +157 -0
  15. package/build/ChartLegends.d.ts +0 -1
  16. package/build/ChartLegends.js +173 -54
  17. package/build/ChartMeasures.cjs +192 -0
  18. package/build/ChartMeasures.d.ts +0 -1
  19. package/build/ChartMeasures.js +197 -109
  20. package/build/Constants.cjs +21 -0
  21. package/build/Constants.js +3 -1
  22. package/build/DataFilters.cjs +176 -0
  23. package/build/DataFilters.js +100 -89
  24. package/build/Format.cjs +1038 -0
  25. package/build/Format.js +428 -378
  26. package/build/MapCSVSourceConfig.cjs +36 -0
  27. package/build/MapCSVSourceConfig.js +19 -8
  28. package/build/Measures.cjs +196 -0
  29. package/build/Measures.js +204 -108
  30. package/build/MobileConfigUtils.cjs +92 -0
  31. package/build/MobileConfigUtils.js +19 -8
  32. package/build/Tooltip.cjs +63 -0
  33. package/build/Tooltip.d.ts +1 -3
  34. package/build/Tooltip.js +27 -51
  35. package/build/Util.cjs +29 -0
  36. package/build/Util.js +7 -7
  37. package/build/hooks/index.cjs +1 -0
  38. package/build/hooks/index.js +0 -3
  39. package/build/icons/Chart.cjs +49 -0
  40. package/build/icons/Chart.d.ts +1 -2
  41. package/build/icons/Chart.js +10 -11
  42. package/build/icons/Generic.cjs +24 -0
  43. package/build/icons/Generic.d.ts +1 -2
  44. package/build/icons/Generic.js +25 -4
  45. package/build/icons/index.cjs +19 -0
  46. package/build/icons/index.js +2 -2
  47. package/build/index.cjs +225 -0
  48. package/build/index.d.ts +1 -1
  49. package/build/index.js +47 -16
  50. package/package.json +16 -7
  51. package/build/tsconfig.tsbuildinfo +0 -1
@@ -1,116 +1,204 @@
1
- import { __ } from '@wordpress/i18n';
2
- import { CheckboxControl, PanelBody, PanelRow, SelectControl, ToggleControl, TextControl } from '@wordpress/components';
3
- import Format from './Format';
4
- import { togglePanel } from "./Util";
5
- import { getTranslation } from "./APIutils";
1
+ import { __ } from "@wordpress/i18n";
2
+ import { CheckboxControl, PanelBody, PanelRow, SelectControl, ToggleControl, TextControl } from "@wordpress/components";
3
+ import Format from "./Format.js";
4
+ import { togglePanel } from "./Util.js";
5
+ import { getTranslation } from "./APIutils.js";
6
6
  const defaultFormat = {
7
- "style": "percent",
8
- "minimumFractionDigits": 1,
9
- "maximumFractionDigits": 1,
10
- "currency": "USD"
7
+ "style": "percent",
8
+ "minimumFractionDigits": 1,
9
+ "maximumFractionDigits": 1,
10
+ "currency": "USD"
11
11
  };
12
12
  export const ChartMeasures = (props) => {
13
- const { onMeasuresChange, onFormatChange, onUseCustomAxisFormatChange, onSetSingleMeasure, onCustomLabelToggleChange, onCustomLabelChange, allMeasures, setAttributes, title, attributes: { panelStatus, measures, dimension1, dimension2, type, app } } = props;
14
- const MToggle = ({ measure }) => {
15
- const userMeasure = measures[app] ? measures[app][measure.value] : {};
16
- return (React.createElement(ToggleControl, { label: getTranslation(measure), checked: userMeasure ? userMeasure.selected : false, onChange: (value) => onMeasuresChange(measure.value) }));
17
- };
18
- const MCheckbox = ({ measure }) => {
19
- const userMeasure = measures[app] ? measures[app][measure.value] : {};
20
- return React.createElement(CheckboxControl, { label: getTranslation(measure), checked: userMeasure ? userMeasure.selected : false, onChange: (value) => onSetSingleMeasure(measure.value) });
21
- };
22
- const MeasureOptions = ({ measure, single }) => {
23
- return React.createElement(PanelRow, null,
24
- single && React.createElement(MCheckbox, { measure: measure }),
25
- !single && React.createElement(MToggle, { measure: measure }));
26
- };
27
- const countSelected = (g) => {
28
- if (measures[app]) {
29
- const mG = allMeasures.filter(f => getTranslation(f.group) === g);
30
- let count = 0;
31
- Object.keys(measures[app]).filter(l => mG.map(m => m.value).indexOf(l) > -1).forEach(k => {
32
- if (measures[app][k].selected) {
33
- count++;
34
- }
35
- });
36
- return count;
13
+ const {
14
+ onMeasuresChange,
15
+ onFormatChange,
16
+ onUseCustomAxisFormatChange,
17
+ onSetSingleMeasure,
18
+ onCustomLabelToggleChange,
19
+ onCustomLabelChange,
20
+ allMeasures,
21
+ setAttributes,
22
+ title,
23
+ attributes: {
24
+ panelStatus,
25
+ measures,
26
+ dimension1,
27
+ dimension2,
28
+ type,
29
+ app
30
+ }
31
+ } = props;
32
+ const MToggle = ({ measure }) => {
33
+ const userMeasure = measures[app] ? measures[app][measure.value] : {};
34
+ return /* @__PURE__ */ React.createElement(
35
+ ToggleControl,
36
+ {
37
+ label: getTranslation(measure),
38
+ checked: userMeasure ? userMeasure.selected : false,
39
+ onChange: (value) => onMeasuresChange(measure.value)
40
+ }
41
+ );
42
+ };
43
+ const MCheckbox = ({ measure }) => {
44
+ const userMeasure = measures[app] ? measures[app][measure.value] : {};
45
+ return /* @__PURE__ */ React.createElement(
46
+ CheckboxControl,
47
+ {
48
+ label: getTranslation(measure),
49
+ checked: userMeasure ? userMeasure.selected : false,
50
+ onChange: (value) => onSetSingleMeasure(measure.value)
51
+ }
52
+ );
53
+ };
54
+ const MeasureOptions = ({ measure, single }) => {
55
+ return /* @__PURE__ */ React.createElement(PanelRow, null, single && /* @__PURE__ */ React.createElement(MCheckbox, { measure }), !single && /* @__PURE__ */ React.createElement(MToggle, { measure }));
56
+ };
57
+ const countSelected = (g) => {
58
+ if (measures[app]) {
59
+ const mG = allMeasures.filter((f) => getTranslation(f.group) === g);
60
+ let count = 0;
61
+ Object.keys(measures[app]).filter((l) => mG.map((m) => m.value).indexOf(l) > -1).forEach((k) => {
62
+ if (measures[app][k].selected) {
63
+ count++;
37
64
  }
38
- return 0;
39
- };
40
- const countTotal = (g) => {
41
- if (g) {
42
- return allMeasures.filter(f => getTranslation(f.group) === g).length;
43
- }
44
- return 0;
45
- };
46
- const getSelectedMeasures = () => {
47
- if (measures[app] && allMeasures) {
48
- return Object.keys(measures[app]).filter(k => measures[app][k].selected).map(k => {
49
- return allMeasures.filter(m => m.value === k)[0];
50
- }).filter(m => m);
51
- }
52
- return [];
53
- };
54
- const selectedMeasures = getSelectedMeasures();
55
- return React.createElement(React.Fragment, null,
56
- React.createElement(PanelBody, { title: title ? title : __("Measures"), initialOpen: panelStatus["MEASURES"], onToggle: e => togglePanel("MEASURES", panelStatus, setAttributes) },
57
- /*
58
- Multiple measures conditions
59
-
60
- Bar:
61
- no dimensions selected
62
- one dimension is selected
63
- - not available when second dimension gets selected
64
-
65
+ });
66
+ return count;
67
+ }
68
+ return 0;
69
+ };
70
+ const countTotal = (g) => {
71
+ if (g) {
72
+ return allMeasures.filter((f) => getTranslation(f.group) === g).length;
73
+ }
74
+ return 0;
75
+ };
76
+ const getSelectedMeasures = () => {
77
+ if (measures[app] && allMeasures) {
78
+ return Object.keys(measures[app]).filter((k) => measures[app][k].selected).map((k) => {
79
+ return allMeasures.filter((m) => m.value === k)[0];
80
+ }).filter((m) => m);
81
+ }
82
+ return [];
83
+ };
84
+ const selectedMeasures = getSelectedMeasures();
85
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
86
+ PanelBody,
87
+ {
88
+ title: title ? title : __("Measures"),
89
+ initialOpen: panelStatus["MEASURES"],
90
+ onToggle: (e) => togglePanel("MEASURES", panelStatus, setAttributes)
91
+ },
92
+ /*
93
+ Multiple measures conditions
94
+
95
+ Bar:
96
+ no dimensions selected
97
+ one dimension is selected
98
+ - not available when second dimension gets selected
99
+
100
+ Line:
101
+ - Always multi measure as measures represents line series, one dimension should always be selected
102
+
103
+ Pie:
104
+ no dimensions selected
105
+ - not available when any dimension is selected
106
+ */
107
+ (type == "line" || type == "bar" && dimension2 == "none" || type == "pie" && dimension1 == "none" && dimension2 == "none") && allMeasures && [...new Set(allMeasures.map((p) => getTranslation(p.group)))].map(
108
+ (g) => {
109
+ return /* @__PURE__ */ React.createElement(
110
+ PanelBody,
111
+ {
112
+ initialOpen: panelStatus[g],
113
+ onToggle: (e) => togglePanel(g, panelStatus, setAttributes),
114
+ title: `${g} (${countSelected(g)} / ${countTotal(g)} ) `
115
+ },
116
+ allMeasures.filter((f) => getTranslation(f.group) === g).map((m) => /* @__PURE__ */ React.createElement(PanelRow, null, /* @__PURE__ */ React.createElement(MeasureOptions, { single: false, measure: m })))
117
+ );
118
+ }
119
+ ),
120
+ /*Single measure conditions
121
+
122
+ Bar:
123
+ 2 dimensions selected
65
124
  Line:
66
- - Always multi measure as measures represents line series, one dimension should always be selected
67
-
125
+ never
68
126
  Pie:
69
- no dimensions selected
70
- - not available when any dimension is selected
71
- */
72
- ((type == 'line') ||
73
- (type == 'bar' && dimension2 == 'none') ||
74
- (type == 'pie' && dimension1 == 'none' && dimension2 == 'none')) && allMeasures && [...new Set(allMeasures.map(p => getTranslation(p.group)))].map(g => {
75
- return (React.createElement(PanelBody, { initialOpen: panelStatus[g], onToggle: e => togglePanel(g, panelStatus, setAttributes), title: `${g} (${countSelected(g)} / ${countTotal(g)} ) ` }, allMeasures.filter(f => getTranslation(f.group) === g)
76
- .map(m => React.createElement(PanelRow, null,
77
- React.createElement(MeasureOptions, { single: false, measure: m })))));
78
- }),
79
- /*Single measure conditions
80
-
81
- Bar:
82
- 2 dimensions selected
83
- Line:
84
- never
85
- Pie:
86
- any dimensions selected
87
-
88
- */
89
- ((type == 'bar' && dimension2 != 'none') || (type == 'pie' && (dimension1 != 'none' || dimension2 != 'none'))) && allMeasures && [...new Set(allMeasures.map(p => getTranslation(p.group)))].map(g => {
90
- return (React.createElement(PanelBody, { initialOpen: panelStatus[g], onToggle: e => togglePanel(g, panelStatus, setAttributes), title: `${g} (${countSelected(g)} / ${allMeasures.filter(f => f.group === g).length} ) ` }, allMeasures.filter(f => getTranslation(f.group) === g)
91
- .map(m => React.createElement(PanelRow, null,
92
- React.createElement(MeasureOptions, { single: true, measure: m })))));
93
- }),
94
- (type == 'overlay') && allMeasures && React.createElement(SelectControl, { label: "Measure", value: selectedMeasures && selectedMeasures[0] ? selectedMeasures[0].value : null, options: [{ value: '', label: 'Select Measure' }, ...allMeasures], onChange: (measure) => onSetSingleMeasure(measure), __nextHasNoMarginBottom: true }),
95
- (type != 'overlay') && React.createElement(PanelBody, { title: __("Format"), initialOpen: panelStatus["FORMAT"], onToggle: e => togglePanel("FORMAT", panelStatus, setAttributes) },
96
- React.createElement(Format, { format: measures[app] && measures[app].format ? measures[app].format : defaultFormat, customFormat: measures[app] && measures[app].customFormat ? measures[app].customFormat : defaultFormat, useCustomAxisFormat: measures[app] ? measures[app].useCustomAxisFormat : false, onFormatChange: (format, field) => {
97
- onFormatChange(format, field);
98
- }, onUseCustomAxisFormatChange: value => {
99
- onUseCustomAxisFormatChange(value);
100
- } }))),
101
- (type != 'overlay') && selectedMeasures && selectedMeasures.length > 0 &&
102
- React.createElement(PanelBody, { title: __("Measure Label Customization"), initialOpen: panelStatus["MEASURES_LABEL_CUSTOMIZATION"], onToggle: e => togglePanel("MEASURES_LABEL_CUSTOMIZATION", panelStatus, setAttributes) }, selectedMeasures && [...new Set(selectedMeasures.map(p => getTranslation(p.group)))].map(g => {
103
- return (React.createElement(PanelBody, { initialOpen: panelStatus[g + "_LABEL_CUSTOMIZATION"], onToggle: e => togglePanel(g + "_LABEL_CUSTOMIZATION", panelStatus, setAttributes), title: `${g}` }, selectedMeasures.filter(f => getTranslation(f.group) === g)
104
- .map(m => {
105
- const userMeasure = measures[app] ? measures[app][m.value] : {};
106
- return (React.createElement(React.Fragment, null,
107
- React.createElement(PanelRow, null,
108
- React.createElement(ToggleControl, { label: getTranslation(m), checked: userMeasure ? userMeasure.hasCustomLabel : false, onChange: (value) => onCustomLabelToggleChange(m.value) }),
109
- " "),
110
- userMeasure.hasCustomLabel &&
111
- React.createElement(PanelRow, null,
112
- React.createElement(TextControl, { label: __("Custom Label"), value: userMeasure ? userMeasure.customLabel : "", onChange: (value) => onCustomLabelChange(m.value, value) }))));
113
- })));
114
- })));
127
+ any dimensions selected
128
+
129
+ */
130
+ (type == "bar" && dimension2 != "none" || type == "pie" && (dimension1 != "none" || dimension2 != "none")) && allMeasures && [...new Set(allMeasures.map((p) => getTranslation(p.group)))].map((g) => {
131
+ return /* @__PURE__ */ React.createElement(
132
+ PanelBody,
133
+ {
134
+ initialOpen: panelStatus[g],
135
+ onToggle: (e) => togglePanel(g, panelStatus, setAttributes),
136
+ title: `${g} (${countSelected(g)} / ${allMeasures.filter((f) => f.group === g).length} ) `
137
+ },
138
+ allMeasures.filter((f) => getTranslation(f.group) === g).map((m) => /* @__PURE__ */ React.createElement(PanelRow, null, /* @__PURE__ */ React.createElement(MeasureOptions, { single: true, measure: m })))
139
+ );
140
+ }),
141
+ type == "overlay" && allMeasures && /* @__PURE__ */ React.createElement(
142
+ SelectControl,
143
+ {
144
+ label: "Measure",
145
+ value: selectedMeasures && selectedMeasures[0] ? selectedMeasures[0].value : null,
146
+ options: [{ value: "", label: "Select Measure" }, ...allMeasures],
147
+ onChange: (measure) => onSetSingleMeasure(measure),
148
+ __nextHasNoMarginBottom: true
149
+ }
150
+ ),
151
+ type != "overlay" && /* @__PURE__ */ React.createElement(
152
+ PanelBody,
153
+ {
154
+ title: __("Format"),
155
+ initialOpen: panelStatus["FORMAT"],
156
+ onToggle: (e) => togglePanel("FORMAT", panelStatus, setAttributes)
157
+ },
158
+ /* @__PURE__ */ React.createElement(
159
+ Format,
160
+ {
161
+ format: measures[app] && measures[app].format ? measures[app].format : defaultFormat,
162
+ customFormat: measures[app] && measures[app].customFormat ? measures[app].customFormat : defaultFormat,
163
+ useCustomAxisFormat: measures[app] ? measures[app].useCustomAxisFormat : false,
164
+ onFormatChange: (format, field) => {
165
+ onFormatChange(format, field);
166
+ },
167
+ onUseCustomAxisFormatChange: (value) => {
168
+ onUseCustomAxisFormatChange(value);
169
+ }
170
+ }
171
+ )
172
+ )
173
+ ), type != "overlay" && selectedMeasures && selectedMeasures.length > 0 && /* @__PURE__ */ React.createElement(
174
+ PanelBody,
175
+ {
176
+ title: __("Measure Label Customization"),
177
+ initialOpen: panelStatus["MEASURES_LABEL_CUSTOMIZATION"],
178
+ onToggle: (e) => togglePanel("MEASURES_LABEL_CUSTOMIZATION", panelStatus, setAttributes)
179
+ },
180
+ selectedMeasures && [...new Set(selectedMeasures.map((p) => getTranslation(p.group)))].map(
181
+ (g) => {
182
+ return /* @__PURE__ */ React.createElement(
183
+ PanelBody,
184
+ {
185
+ initialOpen: panelStatus[g + "_LABEL_CUSTOMIZATION"],
186
+ onToggle: (e) => togglePanel(g + "_LABEL_CUSTOMIZATION", panelStatus, setAttributes),
187
+ title: `${g}`
188
+ },
189
+ selectedMeasures.filter((f) => getTranslation(f.group) === g).map((m) => {
190
+ const userMeasure = measures[app] ? measures[app][m.value] : {};
191
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(PanelRow, null, /* @__PURE__ */ React.createElement(
192
+ ToggleControl,
193
+ {
194
+ label: getTranslation(m),
195
+ checked: userMeasure ? userMeasure.hasCustomLabel : false,
196
+ onChange: (value) => onCustomLabelToggleChange(m.value)
197
+ }
198
+ ), " "), userMeasure.hasCustomLabel && /* @__PURE__ */ React.createElement(PanelRow, null, /* @__PURE__ */ React.createElement(TextControl, { label: __("Custom Label"), value: userMeasure ? userMeasure.customLabel : "", onChange: (value) => onCustomLabelChange(m.value, value) })));
199
+ })
200
+ );
201
+ }
202
+ )
203
+ ));
115
204
  };
116
- export default ChartMeasures;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DEFAULT_FORMAT_SETTINGS = exports.BLOCKS_NS = exports.BLOCKS_CATEGORY = void 0;
7
+ const DEFAULT_FORMAT_SETTINGS = exports.DEFAULT_FORMAT_SETTINGS = {
8
+ format: {
9
+ style: "percent",
10
+ minimumFractionDigits: 2,
11
+ maximumFractionDigits: 2
12
+ },
13
+ customFormat: {
14
+ style: "percent",
15
+ minimumFractionDigits: 2,
16
+ maximumFractionDigits: 2
17
+ },
18
+ useCustomAxisFormat: false
19
+ };
20
+ const BLOCKS_CATEGORY = exports.BLOCKS_CATEGORY = 'wp-react-lib-blocks';
21
+ const BLOCKS_NS = exports.BLOCKS_NS = 'viz';
@@ -11,5 +11,7 @@ export const DEFAULT_FORMAT_SETTINGS = {
11
11
  },
12
12
  useCustomAxisFormat: false
13
13
  };
14
+
15
+
14
16
  export const BLOCKS_CATEGORY = 'wp-react-lib-blocks';
15
- export const BLOCKS_NS = 'viz';
17
+ export const BLOCKS_NS = 'viz';
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ module.exports = exports.DataFilters = void 0;
7
+ var _components = require("@wordpress/components");
8
+ var _i18n = require("@wordpress/i18n");
9
+ const DataFilters = props => {
10
+ const updateFilterParam = (param, idx) => {
11
+ const {
12
+ attributes: {
13
+ filters: filters2
14
+ },
15
+ setAttributes,
16
+ allFilters: allFilters2
17
+ } = props;
18
+ const newFilters = filters2.slice();
19
+ const selected = allFilters2.filter(f => f.param === param)[0];
20
+ newFilters[idx] = {
21
+ ...selected,
22
+ value: []
23
+ };
24
+ setAttributes({
25
+ filters: newFilters
26
+ });
27
+ };
28
+ const updateFilterValue = (value, idx) => {
29
+ const {
30
+ attributes: {
31
+ filters: filters2
32
+ },
33
+ setAttributes,
34
+ onChange
35
+ } = props;
36
+ const selected = filters2[idx];
37
+ let values = selected.value;
38
+ if (values.indexOf(value) > -1) {
39
+ values = values.filter(v => v != value);
40
+ } else {
41
+ values.push(value);
42
+ }
43
+ const newFilters = filters2.slice();
44
+ newFilters[idx].value = values;
45
+ setAttributes({
46
+ filters: newFilters
47
+ });
48
+ onChange();
49
+ };
50
+ const addFilter = () => {
51
+ const {
52
+ attributes: {
53
+ filters: filters2
54
+ },
55
+ setAttributes,
56
+ allFilters: allFilters2
57
+ } = props;
58
+ let index = filters2.length > allFilters2.length ? allFilters2.length : filters2.length;
59
+ const newFilter = allFilters2 && allFilters2.length > 0 ? {
60
+ ...allFilters2[index],
61
+ "value": []
62
+ } : null;
63
+ let newFilters = filters2.slice();
64
+ newFilters.push(newFilter);
65
+ setAttributes({
66
+ filters: newFilters
67
+ });
68
+ };
69
+ const removeFilter = f => {
70
+ const {
71
+ attributes: {
72
+ filters: filters2
73
+ },
74
+ setAttributes
75
+ } = props;
76
+ let newFilters = filters2.slice(0, -1);
77
+ setAttributes({
78
+ filters: newFilters
79
+ });
80
+ };
81
+ const items = type => {
82
+ const values = props.allCategories ? props.allCategories.filter(c => c.type === type) : [];
83
+ const cat = values.length > 0 ? values[0] : null;
84
+ let items2 = null;
85
+ if (type === "Boolean") {
86
+ items2 = [{
87
+ "value": "Yes",
88
+ id: true
89
+ }, {
90
+ "value": "No",
91
+ id: false
92
+ }];
93
+ } else if (cat) {
94
+ items2 = cat.items;
95
+ }
96
+ return items2;
97
+ };
98
+ const FilterSelector = ({
99
+ param,
100
+ index,
101
+ options,
102
+ onUpdateFilterParam
103
+ }) => {
104
+ const sortedOptions = options.sort(function (a, b) {
105
+ var aLabel = a.label ? a.label.toLowerCase() : "";
106
+ var bLabel = b.label ? b.label.toLowerCase() : "";
107
+ return aLabel < bLabel ? -1 : aLabel > bLabel ? 1 : 0;
108
+ });
109
+ return /* @__PURE__ */React.createElement(_components.SelectControl, {
110
+ onChange: value => {
111
+ onUpdateFilterParam(value, index);
112
+ },
113
+ value: param,
114
+ options: sortedOptions
115
+ });
116
+ };
117
+ const CategoricalFilter = ({
118
+ value,
119
+ index,
120
+ items: items2,
121
+ onUpdateFilterValue
122
+ }) => {
123
+ if (items2) {
124
+ const sortedItems = items2.sort(function (a, b) {
125
+ if (a.position !== void 0 && b.position !== void 0 && a.position !== b.position) {
126
+ return a.position - b.position;
127
+ }
128
+ let aValue = a.value ? a.value.toLowerCase() : "";
129
+ let bValue = b.value ? b.value.toLowerCase() : "";
130
+ return aValue < bValue ? -1 : aValue > bValue ? 1 : 0;
131
+ });
132
+ return sortedItems.map(v => /* @__PURE__ */React.createElement(_components.PanelRow, null, /* @__PURE__ */React.createElement(_components.ToggleControl, {
133
+ label: v.value,
134
+ checked: value.indexOf(v.id) > -1,
135
+ onChange: e => {
136
+ onUpdateFilterValue(v.id, index);
137
+ }
138
+ })));
139
+ } else {
140
+ return null;
141
+ }
142
+ };
143
+ const {
144
+ allFilters,
145
+ attributes: {
146
+ filters
147
+ }
148
+ } = props;
149
+ return /* @__PURE__ */React.createElement(_components.PanelBody, {
150
+ initialOpen: false,
151
+ title: (0, _i18n.__)("Filters")
152
+ }, filters.map((f, index) => {
153
+ return /* @__PURE__ */React.createElement(_components.PanelBody, {
154
+ initialOpen: true,
155
+ title: (0, _i18n.__)(`Filter - ${f.label}`)
156
+ }, /* @__PURE__ */React.createElement(FilterSelector, {
157
+ param: f.param,
158
+ index,
159
+ options: allFilters,
160
+ onUpdateFilterParam: updateFilterParam
161
+ }), /* @__PURE__ */React.createElement(CategoricalFilter, {
162
+ value: f.value,
163
+ index,
164
+ items: items(f.type),
165
+ onUpdateFilterValue: updateFilterValue
166
+ }));
167
+ }), /* @__PURE__ */React.createElement(_components.PanelRow, null, /* @__PURE__ */React.createElement(_components.Button, {
168
+ variant: "link",
169
+ onClick: addFilter
170
+ }, (0, _i18n.__)("Add Filter")), /* @__PURE__ */React.createElement(_components.Button, {
171
+ variant: "link",
172
+ onClick: removeFilter
173
+ }, (0, _i18n.__)("Remove"))));
174
+ };
175
+ exports.DataFilters = DataFilters;
176
+ module.exports = DataFilters;