@carbon/ibm-products 1.45.0 → 1.46.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. package/css/index-full-carbon.css +28 -17
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +1 -1
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon.css +28 -17
  6. package/css/index-without-carbon.css.map +1 -1
  7. package/css/index-without-carbon.min.css +1 -1
  8. package/css/index-without-carbon.min.css.map +1 -1
  9. package/css/index.css +28 -17
  10. package/css/index.css.map +1 -1
  11. package/css/index.min.css +1 -1
  12. package/css/index.min.css.map +1 -1
  13. package/es/components/Datagrid/Datagrid/DatagridContent.js +2 -2
  14. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +18 -228
  15. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +39 -268
  16. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +4 -4
  17. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +2 -1
  18. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +276 -0
  19. package/es/components/Datagrid/Datagrid/addons/Filtering/utils.js +6 -6
  20. package/es/components/Datagrid/useSortableColumns.js +16 -10
  21. package/es/components/Datagrid/utils/DatagridActions.js +2 -2
  22. package/lib/components/Datagrid/Datagrid/DatagridContent.js +2 -2
  23. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +22 -224
  24. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +44 -265
  25. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +4 -4
  26. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +8 -1
  27. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +280 -0
  28. package/lib/components/Datagrid/Datagrid/addons/Filtering/utils.js +5 -5
  29. package/lib/components/Datagrid/useSortableColumns.js +9 -3
  30. package/lib/components/Datagrid/utils/DatagridActions.js +2 -2
  31. package/package.json +8 -8
  32. package/scss/components/Datagrid/styles/_useSortableColumns.scss +33 -17
@@ -0,0 +1,276 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
5
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7
+ /*
8
+ * Licensed Materials - Property of IBM
9
+ * 5724-Q36
10
+ * (c) Copyright IBM Corp. 2023
11
+ * US Government Users Restricted Rights - Use, duplication or disclosure
12
+ * restricted by GSA ADP Schedule Contract with IBM Corp.
13
+ */
14
+ import React, { useState, useRef } from 'react';
15
+ import { Checkbox, DatePicker, DatePickerInput, Dropdown, FormGroup, NumberInput, RadioButton, RadioButtonGroup } from 'carbon-components-react';
16
+ import { INSTANT, DATE, CHECKBOX, NUMBER, RADIO, DROPDOWN, PANEL } from '../constants';
17
+ import useInitialStateFromFilters from './useInitialStateFromFilters';
18
+ import { getInitialStateFromFilters } from '../utils';
19
+ var useFilters = function useFilters(_ref) {
20
+ var updateMethod = _ref.updateMethod,
21
+ _ref$filters = _ref.filters,
22
+ filters = _ref$filters === void 0 ? [] : _ref$filters,
23
+ setAllFilters = _ref.setAllFilters,
24
+ variation = _ref.variation;
25
+ /** State */
26
+ var _useInitialStateFromF = useInitialStateFromFilters(filters, variation),
27
+ _useInitialStateFromF2 = _slicedToArray(_useInitialStateFromF, 2),
28
+ filtersState = _useInitialStateFromF2[0],
29
+ setFiltersState = _useInitialStateFromF2[1];
30
+ var _useState = useState([]),
31
+ _useState2 = _slicedToArray(_useState, 2),
32
+ filtersObjectArray = _useState2[0],
33
+ setFiltersObjectArray = _useState2[1];
34
+
35
+ // When using batch actions we have to store the filters to then apply them later
36
+ var prevFiltersRef = useRef(JSON.stringify(filtersState));
37
+ var prevFiltersObjectArrayRef = useRef(JSON.stringify(filtersObjectArray));
38
+
39
+ /** Methods */
40
+ // If the user decides to cancel or click outside the flyout, it reverts back to the filters that were
41
+ // there when they opened the flyout
42
+ var revertToPreviousFilters = function revertToPreviousFilters() {
43
+ setFiltersState(JSON.parse(prevFiltersRef.current));
44
+ setFiltersObjectArray(JSON.parse(prevFiltersObjectArrayRef.current));
45
+ };
46
+ var reset = function reset() {
47
+ // Get the initial values for the filters
48
+ var initialFiltersState = getInitialStateFromFilters(filters, variation);
49
+ var initialFiltersObjectArray = [];
50
+
51
+ // Set the state to the initial values
52
+ setFiltersState(initialFiltersState);
53
+ setFiltersObjectArray(initialFiltersObjectArray);
54
+ setAllFilters([]);
55
+
56
+ // Update their respective refs so everything is in sync
57
+ prevFiltersRef.current = JSON.stringify(initialFiltersState);
58
+ prevFiltersObjectArrayRef.current = JSON.stringify(initialFiltersObjectArray);
59
+ };
60
+ var applyFilters = function applyFilters(_ref2) {
61
+ var column = _ref2.column,
62
+ value = _ref2.value,
63
+ type = _ref2.type;
64
+ // If no end date is selected return because we need the end date to do computations
65
+ if (type === DATE && value.length > 0 && !value[1]) {
66
+ return;
67
+ }
68
+ var filtersObjectArrayCopy = _toConsumableArray(filtersObjectArray);
69
+ // // check if the filter already exists in the array
70
+ var filter = filtersObjectArrayCopy.find(function (item) {
71
+ return item.id === column;
72
+ });
73
+
74
+ // // if filter exists in array then update the filter's new value
75
+ if (filter) {
76
+ filter.value = value;
77
+ } else {
78
+ filtersObjectArrayCopy.push({
79
+ id: column,
80
+ value: value,
81
+ type: type
82
+ });
83
+ }
84
+
85
+ // ATTENTION: this is where you would reset or remove individual filters from the filters array
86
+ if (type === CHECKBOX) {
87
+ /**
88
+ When all checkboxes of a group are all unselected the value still exists in the filtersObjectArray
89
+ This checks if all the checkboxes are selected = false and removes it from the array
90
+ */
91
+ var index = filtersObjectArrayCopy.findIndex(function (filter) {
92
+ return filter.id === column;
93
+ });
94
+
95
+ // If all the selected state is false remove from array
96
+ var shouldRemoveFromArray = filtersObjectArrayCopy[index].value.every(function (val) {
97
+ return val.selected === false;
98
+ });
99
+ if (shouldRemoveFromArray) {
100
+ filtersObjectArrayCopy.splice(index, 1);
101
+ }
102
+ } else if (type === DATE) {
103
+ if (value.length === 0) {
104
+ /**
105
+ Checks to see if the date value is an empty array, if it is that means the user wants
106
+ to reset the date filter
107
+ */
108
+ var _index = filtersObjectArrayCopy.findIndex(function (filter) {
109
+ return filter.id === column;
110
+ });
111
+
112
+ // Remove it from the filters array since there is nothing to filter
113
+ filtersObjectArrayCopy.splice(_index, 1);
114
+ }
115
+ } else if (type === DROPDOWN || type === RADIO) {
116
+ if (value === 'Any') {
117
+ /**
118
+ Checks to see if the selected value is 'Any', that means the user wants
119
+ to reset specific filter
120
+ */
121
+ var _index2 = filtersObjectArrayCopy.findIndex(function (filter) {
122
+ return filter.id === column;
123
+ });
124
+
125
+ // Remove it from the filters array
126
+ filtersObjectArrayCopy.splice(_index2, 1);
127
+ }
128
+ }
129
+ setFiltersObjectArray(filtersObjectArrayCopy);
130
+
131
+ // // Automatically apply the filters if the updateMethod is instant
132
+ if (updateMethod === INSTANT) {
133
+ setAllFilters(filtersObjectArrayCopy);
134
+ }
135
+ };
136
+ /** Render the individual filter component */
137
+ var renderFilter = function renderFilter(_ref3) {
138
+ var _filtersState$column, _filtersState$column2;
139
+ var type = _ref3.type,
140
+ column = _ref3.column,
141
+ components = _ref3.props;
142
+ var isPanel = variation === PANEL;
143
+ switch (type) {
144
+ case DATE:
145
+ return /*#__PURE__*/React.createElement(DatePicker, _extends({}, components.DatePicker, {
146
+ onChange: function onChange(value) {
147
+ var _components$DatePicke, _components$DatePicke2;
148
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
149
+ value: value,
150
+ type: type
151
+ })));
152
+ applyFilters({
153
+ column: column,
154
+ value: value,
155
+ type: type
156
+ });
157
+ (_components$DatePicke = (_components$DatePicke2 = components.DatePicker).onChange) === null || _components$DatePicke === void 0 ? void 0 : _components$DatePicke.call(_components$DatePicke2, value);
158
+ },
159
+ value: filtersState[column].value,
160
+ datePickerType: "range",
161
+ light: isPanel
162
+ }), /*#__PURE__*/React.createElement(DatePickerInput, _extends({
163
+ placeholder: "mm/dd/yyyy",
164
+ labelText: "Start date"
165
+ }, components.DatePickerInput.start)), /*#__PURE__*/React.createElement(DatePickerInput, _extends({
166
+ placeholder: "mm/dd/yyyy",
167
+ labelText: "End date"
168
+ }, components.DatePickerInput.end)));
169
+ case NUMBER:
170
+ return /*#__PURE__*/React.createElement(NumberInput, _extends({
171
+ step: 1,
172
+ allowEmpty: true,
173
+ hideSteppers: true
174
+ }, components.NumberInput, {
175
+ onChange: function onChange(event) {
176
+ var _components$NumberInp, _components$NumberInp2;
177
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
178
+ value: event.target.value,
179
+ type: type
180
+ })));
181
+ applyFilters({
182
+ column: column,
183
+ value: event.target.value,
184
+ type: type
185
+ });
186
+ (_components$NumberInp = (_components$NumberInp2 = components.NumberInput).onChange) === null || _components$NumberInp === void 0 ? void 0 : _components$NumberInp.call(_components$NumberInp2, event);
187
+ },
188
+ value: filtersState[column].value,
189
+ light: isPanel
190
+ }));
191
+ case CHECKBOX:
192
+ return /*#__PURE__*/React.createElement(FormGroup, components.FormGroup, filtersState[column].value.map(function (option) {
193
+ return /*#__PURE__*/React.createElement(Checkbox, _extends({
194
+ key: option.labelText
195
+ }, option, {
196
+ onChange: function onChange(isSelected) {
197
+ var _option$onChange;
198
+ var checkboxCopy = filtersState[column].value;
199
+ var foundCheckbox = checkboxCopy.find(function (checkbox) {
200
+ return checkbox.value === option.value;
201
+ });
202
+ foundCheckbox.selected = isSelected;
203
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
204
+ value: checkboxCopy,
205
+ type: type
206
+ })));
207
+ applyFilters({
208
+ column: column,
209
+ value: _toConsumableArray(filtersState[column].value),
210
+ type: type
211
+ });
212
+ (_option$onChange = option.onChange) === null || _option$onChange === void 0 ? void 0 : _option$onChange.call(option, isSelected);
213
+ },
214
+ checked: option.selected
215
+ }));
216
+ }));
217
+ case RADIO:
218
+ return /*#__PURE__*/React.createElement(FormGroup, components.FormGroup, /*#__PURE__*/React.createElement(RadioButtonGroup, _extends({}, components.RadioButtonGroup, {
219
+ valueSelected: ((_filtersState$column = filtersState[column]) === null || _filtersState$column === void 0 ? void 0 : _filtersState$column.value) === '' ? 'Any' : (_filtersState$column2 = filtersState[column]) === null || _filtersState$column2 === void 0 ? void 0 : _filtersState$column2.value,
220
+ onChange: function onChange(selected) {
221
+ var _components$RadioButt, _components$RadioButt2;
222
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
223
+ value: selected,
224
+ type: type
225
+ })));
226
+ applyFilters({
227
+ column: column,
228
+ value: selected,
229
+ type: type
230
+ });
231
+ (_components$RadioButt = (_components$RadioButt2 = components.RadioButtonGroup).onChange) === null || _components$RadioButt === void 0 ? void 0 : _components$RadioButt.call(_components$RadioButt2, selected);
232
+ }
233
+ }), /*#__PURE__*/React.createElement(RadioButton, {
234
+ id: "any",
235
+ labelText: "Any",
236
+ value: "Any"
237
+ }), components.RadioButton.map(function (radio) {
238
+ var _ref4, _radio$id;
239
+ return /*#__PURE__*/React.createElement(RadioButton, _extends({
240
+ key: (_ref4 = (_radio$id = radio.id) !== null && _radio$id !== void 0 ? _radio$id : radio.labelText) !== null && _ref4 !== void 0 ? _ref4 : radio.value
241
+ }, radio));
242
+ })));
243
+ case DROPDOWN:
244
+ return /*#__PURE__*/React.createElement(Dropdown, _extends({}, components.Dropdown, {
245
+ items: ['Any'].concat(_toConsumableArray(components.Dropdown.items)),
246
+ selectedItem: filtersState[column].value === '' ? 'Any' : filtersState[column].value,
247
+ onChange: function onChange(_ref5) {
248
+ var _components$Dropdown$, _components$Dropdown;
249
+ var selectedItem = _ref5.selectedItem;
250
+ setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, _defineProperty({}, column, {
251
+ value: selectedItem,
252
+ type: type
253
+ })));
254
+ applyFilters({
255
+ column: column,
256
+ value: selectedItem,
257
+ type: type
258
+ });
259
+ (_components$Dropdown$ = (_components$Dropdown = components.Dropdown).onChange) === null || _components$Dropdown$ === void 0 ? void 0 : _components$Dropdown$.call(_components$Dropdown, selectedItem);
260
+ },
261
+ light: isPanel
262
+ }));
263
+ }
264
+ };
265
+ return {
266
+ filtersState: filtersState,
267
+ setFiltersState: setFiltersState,
268
+ prevFiltersObjectArrayRef: prevFiltersObjectArrayRef,
269
+ prevFiltersRef: prevFiltersRef,
270
+ revertToPreviousFilters: revertToPreviousFilters,
271
+ reset: reset,
272
+ renderFilter: renderFilter,
273
+ filtersObjectArray: filtersObjectArray
274
+ };
275
+ };
276
+ export default useFilters;
@@ -5,7 +5,7 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import { FLYOUT, PANEL } from './constants';
8
+ import { CHECKBOX, DATE, DROPDOWN, FLYOUT, NUMBER, PANEL, RADIO } from './constants';
9
9
 
10
10
  // This functions takes the filters passed in and makes an object to track it's state
11
11
  export var getInitialStateFromFilters = function getInitialStateFromFilters(filters) {
@@ -15,7 +15,7 @@ export var getInitialStateFromFilters = function getInitialStateFromFilters(filt
15
15
  var type = _ref.type,
16
16
  column = _ref.column,
17
17
  props = _ref.props;
18
- if (type === 'checkbox') {
18
+ if (type === CHECKBOX) {
19
19
  initialFilterState[column] = {
20
20
  value: props.Checkbox.map(function (_ref2) {
21
21
  var id = _ref2.id,
@@ -30,22 +30,22 @@ export var getInitialStateFromFilters = function getInitialStateFromFilters(filt
30
30
  }),
31
31
  type: type
32
32
  };
33
- } else if (type === 'date') {
33
+ } else if (type === DATE) {
34
34
  initialFilterState[column] = {
35
35
  value: [null, null],
36
36
  type: type
37
37
  };
38
- } else if (type === 'number') {
38
+ } else if (type === NUMBER) {
39
39
  initialFilterState[column] = {
40
40
  value: '',
41
41
  type: type
42
42
  };
43
- } else if (type === 'radio') {
43
+ } else if (type === RADIO) {
44
44
  initialFilterState[column] = {
45
45
  value: '',
46
46
  type: type
47
47
  };
48
- } else if (type === 'dropdown') {
48
+ } else if (type === DROPDOWN) {
49
49
  initialFilterState[column] = {
50
50
  value: '',
51
51
  type: type
@@ -2,16 +2,19 @@ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
4
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
5
- /*
6
- * Licensed Materials - Property of IBM
7
- * 5724-Q36
8
- * (c) Copyright IBM Corp. 2020
9
- * US Government Users Restricted Rights - Use, duplication or disclosure
10
- * restricted by GSA ADP Schedule Contract with IBM Corp.
5
+ /**
6
+ * Copyright IBM Corp. 2020, 2023
7
+ *
8
+ * This source code is licensed under the Apache-2.0 license found in the
9
+ * LICENSE file in the root directory of this source tree.
11
10
  */
11
+
12
12
  import React from 'react';
13
+ import cx from 'classnames';
14
+ import { pkg, carbon } from '../../settings';
13
15
  import { Button } from 'carbon-components-react';
14
- import { ArrowUp16, ArrowDown16, Arrows16 } from '@carbon/icons-react';
16
+ import { ArrowUp16, Arrows16 } from '@carbon/icons-react';
17
+ var blockClass = "".concat(pkg.prefix, "--datagrid");
15
18
  var ordering = {
16
19
  ASC: 'ASC',
17
20
  DESC: 'DESC',
@@ -39,7 +42,7 @@ var useSortableColumns = function useSortableColumns(hooks) {
39
42
  case false:
40
43
  return ArrowUp16;
41
44
  case true:
42
- return ArrowDown16;
45
+ return ArrowUp16;
43
46
  default:
44
47
  return Arrows16;
45
48
  }
@@ -47,16 +50,19 @@ var useSortableColumns = function useSortableColumns(hooks) {
47
50
  return Arrows16;
48
51
  };
49
52
  var Header = function Header(headerProp) {
53
+ var _cx;
50
54
  return column.disableSortBy === true ? column.Header : /*#__PURE__*/React.createElement(Button, {
51
55
  onClick: function onClick() {
52
56
  return onSortClick(headerProp.column);
53
57
  },
54
58
  kind: "ghost",
55
- renderIcon: icon(headerProp.column)
59
+ renderIcon: icon(headerProp.column),
60
+ className: cx("".concat(carbon.prefix, "--table-sort ").concat(blockClass, "--table-sort"), (_cx = {}, _defineProperty(_cx, "".concat(blockClass, "--table-sort--desc"), headerProp.column.isSortedDesc), _defineProperty(_cx, "".concat(blockClass, "--table-sort--asc"), headerProp.column.isSortedDesc === false), _cx))
56
61
  }, column.Header);
57
62
  };
58
63
  return _objectSpread(_objectSpread({}, column), {}, {
59
- Header: Header
64
+ Header: Header,
65
+ minWidth: column.disableSortBy === true ? 0 : 90
60
66
  });
61
67
  });
62
68
  return _toConsumableArray(sortableColumns);
@@ -16,7 +16,7 @@ import { FilterContext } from '../Datagrid/addons/Filtering';
16
16
  var blockClass = "".concat(pkg.prefix, "--datagrid");
17
17
  export var DatagridActions = function DatagridActions(datagridState) {
18
18
  var _useContext = useContext(FilterContext),
19
- setLeftPanelOpen = _useContext.setLeftPanelOpen;
19
+ setPanelOpen = _useContext.setPanelOpen;
20
20
  var selectedFlatRows = datagridState.selectedFlatRows,
21
21
  setGlobalFilter = datagridState.setGlobalFilter,
22
22
  CustomizeColumnsButton = datagridState.CustomizeColumnsButton,
@@ -58,7 +58,7 @@ export var DatagridActions = function DatagridActions(datagridState) {
58
58
  iconDescription: filterProps.panelIconDescription,
59
59
  className: "".concat(blockClass, "-filter-panel-open-button"),
60
60
  onClick: function onClick() {
61
- return setLeftPanelOpen(function (open) {
61
+ return setPanelOpen(function (open) {
62
62
  return !open;
63
63
  });
64
64
  },
@@ -47,7 +47,7 @@ var DatagridContent = function DatagridContent(_ref) {
47
47
  var _useContext2 = (0, _react.useContext)(_Filtering.FilterContext),
48
48
  filterTags = _useContext2.filterTags,
49
49
  EventEmitter = _useContext2.EventEmitter,
50
- leftPanelOpen = _useContext2.leftPanelOpen;
50
+ panelOpen = _useContext2.panelOpen;
51
51
  var activeCellId = inlineEditState.activeCellId,
52
52
  gridActive = inlineEditState.gridActive,
53
53
  editId = inlineEditState.editId;
@@ -147,7 +147,7 @@ var DatagridContent = function DatagridContent(_ref) {
147
147
  title: gridTitle,
148
148
  description: gridDescription
149
149
  }, /*#__PURE__*/_react.default.createElement(_DatagridToolbar.default, datagridState), /*#__PURE__*/_react.default.createElement("div", {
150
- className: (0, _classnames.default)("".concat(blockClass, "__table-container"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__table-container--filter-open"), leftPanelOpen)),
150
+ className: (0, _classnames.default)("".concat(blockClass, "__table-container"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__table-container--filter-open"), panelOpen)),
151
151
  ref: gridAreaRef
152
152
  }, (filterProps === null || filterProps === void 0 ? void 0 : filterProps.variation) === 'panel' && /*#__PURE__*/_react.default.createElement(_FilterPanel.default, (0, _extends2.default)({
153
153
  updateMethod: "batch"