@carbon/ibm-products 1.53.1 → 1.54.2

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 (52) hide show
  1. package/README.md +15 -15
  2. package/css/index-full-carbon.css +0 -5
  3. package/css/index-full-carbon.css.map +1 -1
  4. package/css/index-full-carbon.min.css +1 -1
  5. package/css/index-full-carbon.min.css.map +1 -1
  6. package/css/index-without-carbon.css +0 -5
  7. package/css/index-without-carbon.css.map +1 -1
  8. package/css/index-without-carbon.min.css +1 -1
  9. package/css/index-without-carbon.min.css.map +1 -1
  10. package/css/index.css +0 -5
  11. package/css/index.css.map +1 -1
  12. package/css/index.min.css +1 -1
  13. package/css/index.min.css.map +1 -1
  14. package/es/components/AboutModal/AboutModal.js +1 -3
  15. package/es/components/ActionBar/ActionBar.js +4 -6
  16. package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -6
  17. package/es/components/ButtonSetWithOverflow/ButtonSetWithOverflow.js +3 -9
  18. package/es/components/Datagrid/Datagrid/DatagridVirtualBody.js +1 -3
  19. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +35 -36
  20. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +22 -26
  21. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +0 -1
  22. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +50 -17
  23. package/es/components/Datagrid/useFiltering.js +1 -1
  24. package/es/components/Datagrid/useStickyColumn.js +10 -3
  25. package/es/components/Datagrid/utils/makeData.js +1 -1
  26. package/es/components/PageHeader/PageHeader.js +2 -6
  27. package/es/components/SidePanel/SidePanel.js +1 -3
  28. package/es/components/TagSet/TagSet.js +2 -6
  29. package/es/global/js/hooks/useResizeObserver.js +14 -28
  30. package/es/global/js/utils/story-helper.js +1 -1
  31. package/lib/components/AboutModal/AboutModal.js +1 -3
  32. package/lib/components/ActionBar/ActionBar.js +4 -6
  33. package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -6
  34. package/lib/components/ButtonSetWithOverflow/ButtonSetWithOverflow.js +3 -9
  35. package/lib/components/Datagrid/Datagrid/DatagridVirtualBody.js +1 -3
  36. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +33 -35
  37. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +22 -26
  38. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +0 -7
  39. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +48 -15
  40. package/lib/components/Datagrid/useFiltering.js +1 -1
  41. package/lib/components/Datagrid/useStickyColumn.js +10 -3
  42. package/lib/components/Datagrid/utils/makeData.js +1 -1
  43. package/lib/components/PageHeader/PageHeader.js +2 -6
  44. package/lib/components/SidePanel/SidePanel.js +1 -3
  45. package/lib/components/TagSet/TagSet.js +2 -6
  46. package/lib/global/js/hooks/useResizeObserver.js +13 -27
  47. package/lib/global/js/utils/story-helper.js +1 -1
  48. package/package.json +7 -7
  49. package/scss/components/Datagrid/_storybook-styles.scss +8 -0
  50. package/scss/components/Datagrid/styles/_datagrid.scss +0 -5
  51. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +0 -21
  52. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +0 -30
@@ -55,11 +55,8 @@ var FilterFlyout = function FilterFlyout(_ref) {
55
55
  setAllFilters = _ref.setAllFilters,
56
56
  _ref$data = _ref.data,
57
57
  data = _ref$data === void 0 ? [] : _ref$data,
58
- _ref$initialFilters = _ref.initialFilters,
59
- initialFilters = _ref$initialFilters === void 0 ? [] : _ref$initialFilters;
60
- // Save the initial filters we only need the filters once when it loads
61
- var initialFiltersRef = (0, _react.useRef)(initialFilters);
62
-
58
+ _ref$reactTableFilter = _ref.reactTableFiltersState,
59
+ reactTableFiltersState = _ref$reactTableFilter === void 0 ? [] : _ref$reactTableFilter;
63
60
  /** State */
64
61
  var _useState = (0, _react.useState)(false),
65
62
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -70,15 +67,17 @@ var FilterFlyout = function FilterFlyout(_ref) {
70
67
  filters: filters,
71
68
  setAllFilters: setAllFilters,
72
69
  variation: _constants.FLYOUT,
73
- initialFilters: initialFiltersRef.current
70
+ reactTableFiltersState: reactTableFiltersState,
71
+ onCancel: onCancel
74
72
  }),
75
73
  filtersState = _useFilters.filtersState,
76
74
  prevFiltersObjectArrayRef = _useFilters.prevFiltersObjectArrayRef,
77
75
  prevFiltersRef = _useFilters.prevFiltersRef,
78
- revertToPreviousFilters = _useFilters.revertToPreviousFilters,
76
+ cancel = _useFilters.cancel,
79
77
  reset = _useFilters.reset,
80
78
  renderFilter = _useFilters.renderFilter,
81
- filtersObjectArray = _useFilters.filtersObjectArray;
79
+ filtersObjectArray = _useFilters.filtersObjectArray,
80
+ lastAppliedFilters = _useFilters.lastAppliedFilters;
82
81
 
83
82
  /** Refs */
84
83
  var filterFlyoutRef = (0, _react.useRef)(null);
@@ -115,26 +114,10 @@ var FilterFlyout = function FilterFlyout(_ref) {
115
114
  // updates the ref so next time the flyout opens we have records of the previous filters
116
115
  prevFiltersRef.current = JSON.stringify(filtersState);
117
116
  prevFiltersObjectArrayRef.current = JSON.stringify(filtersObjectArray);
118
- };
119
- var cancel = function cancel() {
120
- // Reverting to previous filters only applies when using batch actions
121
- if (updateMethod === _constants.BATCH) {
122
- revertToPreviousFilters();
123
- onCancel();
124
- }
125
- closeFlyout();
126
- };
127
117
 
128
- /** Effects */
129
- (0, _hooks.useClickOutside)(filterFlyoutRef, function (target) {
130
- var hasClickedOnDatePicker = target.closest('.flatpickr-calendar');
131
- var hasClickedOnDropdown = target.className === 'bx--list-box__menu-item__option';
132
- if (!open || hasClickedOnDatePicker || hasClickedOnDropdown) {
133
- return;
134
- }
135
- cancel();
136
- });
137
- (0, _hooks2.useSubscribeToEventEmitter)(_constants.CLEAR_FILTERS, reset);
118
+ // Update the last applied filters
119
+ lastAppliedFilters.current = JSON.stringify(filtersObjectArray);
120
+ };
138
121
 
139
122
  /** Renders all filters */
140
123
  var renderFilters = function renderFilters() {
@@ -161,6 +144,21 @@ var FilterFlyout = function FilterFlyout(_ref) {
161
144
  buttonSize: "md"
162
145
  });
163
146
  };
147
+
148
+ /** Effects */
149
+ (0, _hooks.useClickOutside)(filterFlyoutRef, function (target) {
150
+ var hasClickedOnDatePicker = target.closest('.flatpickr-calendar');
151
+ var hasClickedOnDropdown = target.className === "".concat(_settings.carbon.prefix, "--list-box__menu-item__option");
152
+ if (!open || hasClickedOnDatePicker || hasClickedOnDropdown) {
153
+ return;
154
+ }
155
+ closeFlyout();
156
+ cancel();
157
+ });
158
+ (0, _hooks2.useSubscribeToEventEmitter)(_constants.CLEAR_FILTERS, reset);
159
+ (0, _react.useEffect)(function reflectLastAppliedFiltersWhenReactTableUpdates() {
160
+ lastAppliedFilters.current = JSON.stringify(reactTableFiltersState);
161
+ }, [reactTableFiltersState, lastAppliedFilters]);
164
162
  return /*#__PURE__*/_react.default.createElement("div", {
165
163
  className: "".concat(componentClass, "__container")
166
164
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
@@ -200,14 +198,6 @@ FilterFlyout.propTypes = {
200
198
  * Icon description for the filter flyout button
201
199
  */
202
200
  flyoutIconDescription: _propTypes.default.string,
203
- /**
204
- * Filters that should be applied on load
205
- */
206
- initialFilters: _propTypes.default.arrayOf(_propTypes.default.shape({
207
- id: _propTypes.default.string.isRequired,
208
- type: _propTypes.default.string.isRequired,
209
- value: _propTypes.default.any.isRequired
210
- })),
211
201
  /**
212
202
  * Callback when the apply button is clicked
213
203
  */
@@ -228,6 +218,14 @@ FilterFlyout.propTypes = {
228
218
  * Label text of the primary action in the flyout
229
219
  */
230
220
  primaryActionLabel: _propTypes.default.string,
221
+ /**
222
+ * Filters from react table's state
223
+ */
224
+ reactTableFiltersState: _propTypes.default.arrayOf(_propTypes.default.shape({
225
+ id: _propTypes.default.string.isRequired,
226
+ type: _propTypes.default.string.isRequired,
227
+ value: _propTypes.default.any.isRequired
228
+ })),
231
229
  /**
232
230
  * Label text of the secondary action in the flyout
233
231
  */
@@ -64,11 +64,8 @@ var FilterPanel = function FilterPanel(_ref) {
64
64
  searchLabelText = _ref$searchLabelText === void 0 ? 'Filter search' : _ref$searchLabelText,
65
65
  _ref$searchPlaceholde = _ref.searchPlaceholder,
66
66
  searchPlaceholder = _ref$searchPlaceholde === void 0 ? 'Find filters' : _ref$searchPlaceholde,
67
- _ref$initialFilters = _ref.initialFilters,
68
- initialFilters = _ref$initialFilters === void 0 ? [] : _ref$initialFilters;
69
- // Save the initial filters we only need the filters once
70
- var initialFiltersRef = (0, _react.useRef)(initialFilters);
71
-
67
+ _ref$reactTableFilter = _ref.reactTableFiltersState,
68
+ reactTableFiltersState = _ref$reactTableFilter === void 0 ? [] : _ref$reactTableFilter;
72
69
  /** State */
73
70
  var _useState = (0, _react.useState)(false),
74
71
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -79,15 +76,17 @@ var FilterPanel = function FilterPanel(_ref) {
79
76
  filters: filterSections,
80
77
  setAllFilters: setAllFilters,
81
78
  variation: _constants.PANEL,
82
- initialFilters: initialFiltersRef.current
79
+ reactTableFiltersState: reactTableFiltersState,
80
+ onCancel: onCancel
83
81
  }),
84
82
  filtersState = _useFilters.filtersState,
85
83
  prevFiltersObjectArrayRef = _useFilters.prevFiltersObjectArrayRef,
86
84
  prevFiltersRef = _useFilters.prevFiltersRef,
87
- revertToPreviousFilters = _useFilters.revertToPreviousFilters,
85
+ cancel = _useFilters.cancel,
88
86
  reset = _useFilters.reset,
89
87
  renderFilter = _useFilters.renderFilter,
90
- filtersObjectArray = _useFilters.filtersObjectArray;
88
+ filtersObjectArray = _useFilters.filtersObjectArray,
89
+ lastAppliedFilters = _useFilters.lastAppliedFilters;
91
90
 
92
91
  /** Refs */
93
92
  var filterPanelRef = (0, _react.useRef)();
@@ -117,14 +116,8 @@ var FilterPanel = function FilterPanel(_ref) {
117
116
 
118
117
  /** Methods */
119
118
  var closePanel = function closePanel() {
120
- return setPanelOpen(false);
121
- };
122
- var cancel = function cancel() {
123
- // Reverting to previous filters only applies when using batch actions
124
- if (updateMethod === _constants.BATCH) {
125
- revertToPreviousFilters();
126
- onCancel();
127
- }
119
+ cancel();
120
+ setPanelOpen(false);
128
121
  };
129
122
  var apply = function apply() {
130
123
  setAllFilters(filtersObjectArray);
@@ -138,6 +131,9 @@ var FilterPanel = function FilterPanel(_ref) {
138
131
  // updates the ref so next time the flyout opens we have records of the previous filters
139
132
  prevFiltersRef.current = JSON.stringify(filtersState);
140
133
  prevFiltersObjectArrayRef.current = JSON.stringify(filtersObjectArray);
134
+
135
+ // Update the last applied filters
136
+ lastAppliedFilters.current = JSON.stringify(filtersObjectArray);
141
137
  };
142
138
  var renderActionSet = function renderActionSet() {
143
139
  return showActionSet && /*#__PURE__*/_react.default.createElement(MotionActionSet, {
@@ -223,14 +219,14 @@ var FilterPanel = function FilterPanel(_ref) {
223
219
  height: getScrollableContainerHeight()
224
220
  },
225
221
  onScroll: onInnerContainerScroll
226
- }, filterSections.map(function (_ref2) {
222
+ }, filterSections.map(function (_ref2, index) {
227
223
  var _ref2$categoryTitle = _ref2.categoryTitle,
228
224
  categoryTitle = _ref2$categoryTitle === void 0 ? null : _ref2$categoryTitle,
229
225
  _ref2$filters = _ref2.filters,
230
226
  filters = _ref2$filters === void 0 ? [] : _ref2$filters,
231
227
  hasAccordion = _ref2.hasAccordion;
232
228
  return /*#__PURE__*/_react.default.createElement("div", {
233
- key: categoryTitle,
229
+ key: index,
234
230
  className: "".concat(componentClass, "__category")
235
231
  }, categoryTitle && /*#__PURE__*/_react.default.createElement("div", {
236
232
  className: "".concat(componentClass, "__category-title")
@@ -251,20 +247,20 @@ FilterPanel.propTypes = {
251
247
  closeIconDescription: _propTypes.default.string,
252
248
  filterPanelMinHeight: _propTypes.default.number,
253
249
  filterSections: _propTypes.default.array,
254
- /**
255
- * Filters that should be applied on load
256
- */
257
- initialFilters: _propTypes.default.arrayOf(_propTypes.default.shape({
258
- id: _propTypes.default.string.isRequired,
259
- type: _propTypes.default.string.isRequired,
260
- value: _propTypes.default.any.isRequired
261
- })),
262
250
  onApply: _propTypes.default.func,
263
251
  onCancel: _propTypes.default.func,
264
252
  onPanelClose: _propTypes.default.func,
265
253
  onPanelOpen: _propTypes.default.func,
266
254
  open: _propTypes.default.bool,
267
255
  primaryActionLabel: _propTypes.default.string,
256
+ /**
257
+ * Filters from react table's state
258
+ */
259
+ reactTableFiltersState: _propTypes.default.arrayOf(_propTypes.default.shape({
260
+ id: _propTypes.default.string.isRequired,
261
+ type: _propTypes.default.string.isRequired,
262
+ value: _propTypes.default.any.isRequired
263
+ })),
268
264
  searchLabelText: _propTypes.default.string,
269
265
  searchPlaceholder: _propTypes.default.string,
270
266
  secondaryActionLabel: _propTypes.default.string,
@@ -10,12 +10,6 @@ Object.defineProperty(exports, "useFilters", {
10
10
  return _useFilters.default;
11
11
  }
12
12
  });
13
- Object.defineProperty(exports, "useInitialStateFromFilters", {
14
- enumerable: true,
15
- get: function get() {
16
- return _useInitialStateFromFilters.default;
17
- }
18
- });
19
13
  Object.defineProperty(exports, "useShouldDisableButtons", {
20
14
  enumerable: true,
21
15
  get: function get() {
@@ -28,7 +22,6 @@ Object.defineProperty(exports, "useSubscribeToEventEmitter", {
28
22
  return _useSubscribeToEventEmitter.default;
29
23
  }
30
24
  });
31
- var _useInitialStateFromFilters = _interopRequireDefault(require("./useInitialStateFromFilters"));
32
25
  var _useSubscribeToEventEmitter = _interopRequireDefault(require("./useSubscribeToEventEmitter"));
33
26
  var _useShouldDisableButtons = _interopRequireDefault(require("./useShouldDisableButtons"));
34
27
  var _useFilters = _interopRequireDefault(require("./useFilters"));
@@ -13,7 +13,6 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
13
13
  var _react = _interopRequireWildcard(require("react"));
14
14
  var _carbonComponentsReact = require("carbon-components-react");
15
15
  var _constants = require("../constants");
16
- var _useInitialStateFromFilters = _interopRequireDefault(require("./useInitialStateFromFilters"));
17
16
  var _utils = require("../utils");
18
17
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
18
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -25,19 +24,22 @@ var useFilters = function useFilters(_ref) {
25
24
  filters = _ref$filters === void 0 ? [] : _ref$filters,
26
25
  setAllFilters = _ref.setAllFilters,
27
26
  variation = _ref.variation,
28
- initialFilters = _ref.initialFilters;
27
+ reactTableFiltersState = _ref.reactTableFiltersState,
28
+ _ref$onCancel = _ref.onCancel,
29
+ onCancel = _ref$onCancel === void 0 ? function () {} : _ref$onCancel;
29
30
  /** State */
30
- var _useInitialStateFromF = (0, _useInitialStateFromFilters.default)(filters, variation, initialFilters),
31
- _useInitialStateFromF2 = (0, _slicedToArray2.default)(_useInitialStateFromF, 2),
32
- filtersState = _useInitialStateFromF2[0],
33
- setFiltersState = _useInitialStateFromF2[1];
34
- var _useState = (0, _react.useState)(initialFilters),
31
+ var _useState = (0, _react.useState)((0, _utils.getInitialStateFromFilters)(filters, variation, reactTableFiltersState)),
35
32
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
36
- filtersObjectArray = _useState2[0],
37
- setFiltersObjectArray = _useState2[1];
33
+ filtersState = _useState2[0],
34
+ setFiltersState = _useState2[1];
35
+ var _useState3 = (0, _react.useState)(reactTableFiltersState),
36
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
37
+ filtersObjectArray = _useState4[0],
38
+ setFiltersObjectArray = _useState4[1];
38
39
 
39
40
  // When using batch actions we have to store the filters to then apply them later
40
41
  var prevFiltersRef = (0, _react.useRef)(JSON.stringify(filtersState));
42
+ var lastAppliedFilters = (0, _react.useRef)(JSON.stringify(reactTableFiltersState));
41
43
  var prevFiltersObjectArrayRef = (0, _react.useRef)(JSON.stringify(filtersObjectArray));
42
44
 
43
45
  /** Methods */
@@ -46,6 +48,7 @@ var useFilters = function useFilters(_ref) {
46
48
  var revertToPreviousFilters = function revertToPreviousFilters() {
47
49
  setFiltersState(JSON.parse(prevFiltersRef.current));
48
50
  setFiltersObjectArray(JSON.parse(prevFiltersObjectArrayRef.current));
51
+ setAllFilters(JSON.parse(lastAppliedFilters.current));
49
52
  };
50
53
  var reset = function reset() {
51
54
  // When we reset we want the "initialFilters" to be an empty array
@@ -157,10 +160,14 @@ var useFilters = function useFilters(_ref) {
157
160
  var type = _ref3.type,
158
161
  column = _ref3.column,
159
162
  components = _ref3.props;
163
+ var filter;
160
164
  var isPanel = variation === _constants.PANEL;
165
+ if (!type) {
166
+ return console.error("type: ".concat(type, "; does not exist as a type of filter."));
167
+ }
161
168
  switch (type) {
162
169
  case _constants.DATE:
163
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.DatePicker, (0, _extends2.default)({}, components.DatePicker, {
170
+ filter = /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.DatePicker, (0, _extends2.default)({}, components.DatePicker, {
164
171
  onChange: function onChange(value) {
165
172
  var _components$DatePicke, _components$DatePicke2;
166
173
  setFiltersState(_objectSpread(_objectSpread({}, filtersState), {}, (0, _defineProperty2.default)({}, column, {
@@ -184,8 +191,9 @@ var useFilters = function useFilters(_ref) {
184
191
  placeholder: "mm/dd/yyyy",
185
192
  labelText: "End date"
186
193
  }, components.DatePickerInput.end)));
194
+ break;
187
195
  case _constants.NUMBER:
188
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.NumberInput, (0, _extends2.default)({
196
+ filter = /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.NumberInput, (0, _extends2.default)({
189
197
  step: 1,
190
198
  allowEmpty: true,
191
199
  hideSteppers: true
@@ -206,8 +214,9 @@ var useFilters = function useFilters(_ref) {
206
214
  value: filtersState[column].value,
207
215
  light: isPanel
208
216
  }));
217
+ break;
209
218
  case _constants.CHECKBOX:
210
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.FormGroup, components.FormGroup, filtersState[column].value.map(function (option) {
219
+ filter = /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.FormGroup, components.FormGroup, filtersState[column].value.map(function (option) {
211
220
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, (0, _extends2.default)({
212
221
  key: option.labelText
213
222
  }, option, {
@@ -232,8 +241,9 @@ var useFilters = function useFilters(_ref) {
232
241
  checked: option.selected
233
242
  }));
234
243
  }));
244
+ break;
235
245
  case _constants.RADIO:
236
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.FormGroup, components.FormGroup, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButtonGroup, (0, _extends2.default)({}, components.RadioButtonGroup, {
246
+ filter = /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.FormGroup, components.FormGroup, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButtonGroup, (0, _extends2.default)({}, components.RadioButtonGroup, {
237
247
  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,
238
248
  onChange: function onChange(selected) {
239
249
  var _components$RadioButt, _components$RadioButt2;
@@ -258,8 +268,9 @@ var useFilters = function useFilters(_ref) {
258
268
  key: (_ref4 = (_radio$id = radio.id) !== null && _radio$id !== void 0 ? _radio$id : radio.labelText) !== null && _ref4 !== void 0 ? _ref4 : radio.value
259
269
  }, radio));
260
270
  })));
271
+ break;
261
272
  case _constants.DROPDOWN:
262
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Dropdown, (0, _extends2.default)({}, components.Dropdown, {
273
+ filter = /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Dropdown, (0, _extends2.default)({}, components.Dropdown, {
263
274
  items: ['Any'].concat((0, _toConsumableArray2.default)(components.Dropdown.items)),
264
275
  selectedItem: filtersState[column].value === '' ? 'Any' : filtersState[column].value,
265
276
  onChange: function onChange(_ref5) {
@@ -279,7 +290,27 @@ var useFilters = function useFilters(_ref) {
279
290
  light: isPanel
280
291
  }));
281
292
  }
293
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
294
+ key: column
295
+ }, filter);
296
+ };
297
+ var cancel = function cancel() {
298
+ // Reverting to previous filters only applies when using batch actions
299
+ if (updateMethod === _constants.BATCH) {
300
+ revertToPreviousFilters();
301
+ onCancel();
302
+ }
282
303
  };
304
+
305
+ /** The purpose of this function is to sync any changes in react-tables state.filters array and reflect
306
+ those new filter changes in the panel/flyout state. The external change is triggered if setAllFilters is called outside of the Datagrid */
307
+ (0, _react.useEffect)(function updateStateAndFiltersToReflectExternalFilterChanges() {
308
+ var newFiltersState = (0, _utils.getInitialStateFromFilters)(filters, variation, reactTableFiltersState);
309
+ setFiltersState(newFiltersState);
310
+ prevFiltersRef.current = JSON.stringify(newFiltersState);
311
+ prevFiltersObjectArrayRef.current = JSON.stringify(reactTableFiltersState);
312
+ setFiltersObjectArray(reactTableFiltersState);
313
+ }, [filters, reactTableFiltersState, variation]);
283
314
  return {
284
315
  filtersState: filtersState,
285
316
  setFiltersState: setFiltersState,
@@ -288,7 +319,9 @@ var useFilters = function useFilters(_ref) {
288
319
  revertToPreviousFilters: revertToPreviousFilters,
289
320
  reset: reset,
290
321
  renderFilter: renderFilter,
291
- filtersObjectArray: filtersObjectArray
322
+ filtersObjectArray: filtersObjectArray,
323
+ lastAppliedFilters: lastAppliedFilters,
324
+ cancel: cancel
292
325
  };
293
326
  };
294
327
  var _default = useFilters;
@@ -74,7 +74,7 @@ var useFiltering = function useFiltering(hooks) {
74
74
  variation: 'flyout',
75
75
  updateMethod: _constants.BATCH,
76
76
  panelIconDescription: 'Open filter panel',
77
- initialFilters: state.filters
77
+ reactTableFiltersState: state.filters
78
78
  };
79
79
  var getFilterFlyoutProps = function getFilterFlyoutProps() {
80
80
  return _objectSpread(_objectSpread(_objectSpread({}, defaultProps), filterProps), {}, {
@@ -20,10 +20,13 @@ var OFFSET_SCROLL_CLASS = "".concat(styleClassPrefix, "-offset-scroll");
20
20
  var useStickyColumn = function useStickyColumn(hooks) {
21
21
  var tableBodyRef = (0, _react.useRef)();
22
22
  var stickyHeaderCellRef = (0, _react.useRef)();
23
- var _useState = (0, _react.useState)(window.innerWidth),
23
+ var _useState = (0, _react.useState)(null),
24
24
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
25
25
  windowSize = _useState2[0],
26
26
  setWindowSize = _useState2[1];
27
+ (0, _react.useEffect)(function () {
28
+ setWindowSize(window.innerWidth);
29
+ }, []);
27
30
  (0, _react.useLayoutEffect)(function () {
28
31
  function updateSize() {
29
32
  setWindowSize(window.innerWidth);
@@ -52,9 +55,13 @@ var useStickyColumn = function useStickyColumn(hooks) {
52
55
  headerCellElement.classList.add(OFFSET_SCROLL_CLASS);
53
56
  }
54
57
  var boundListener = (0, _debounce.default)(onBodyResize.bind(null, tableBodyElement, headerCellElement), 250);
55
- window.addEventListener('resize', boundListener);
58
+ if (typeof window !== 'undefined') {
59
+ window.addEventListener('resize', boundListener);
60
+ }
56
61
  return function () {
57
- window.removeEventListener('resize', boundListener);
62
+ if (typeof window !== 'undefined') {
63
+ window.removeEventListener('resize', boundListener);
64
+ }
58
65
  };
59
66
  }, [instance.rows, instance.isFetching]);
60
67
  (0, _react.useEffect)(function () {
@@ -57,7 +57,7 @@ var getPasswordStrength = function getPasswordStrength() {
57
57
  var renderDocLink = function renderDocLink() {
58
58
  var chance = Math.random();
59
59
  var docLinkObj = {
60
- href: chance > 0.66 ? 'http://carbondesignsystem.com/' : chance > 0.33 ? 'https://pages.github.ibm.com/cdai-design/pal/' : 'http://carbon-for-ibm-products.netlify.app/',
60
+ href: chance > 0.66 ? 'https://carbondesignsystem.com/' : chance > 0.33 ? 'https://pages.github.ibm.com/cdai-design/pal/' : 'https://ibm-products.carbondesignsystem.com/',
61
61
  text: chance > 0.66 ? 'Carbon Design System' : chance > 0.33 ? 'Carbon for IBM Products PAL' : 'Carbon for IBM Products storybook'
62
62
  };
63
63
  return docLinkObj;
@@ -315,12 +315,8 @@ var PageHeader = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
315
315
  (0, _PageHeaderUtils.utilSetCollapsed)(collapseHeader, metrics.headerOffset, metrics.headerTopValue);
316
316
  }
317
317
  }, [collapseHeader, metrics.headerOffset, metrics.headerTopValue]);
318
- (0, _useResizeObserver.useResizeObserver)(sizingContainerRef, {
319
- callback: handleResizeActionBarColumn
320
- });
321
- (0, _useResizeObserver.useResizeObserver)(headerRef, {
322
- callback: handleResize
323
- });
318
+ (0, _useResizeObserver.useResizeObserver)(sizingContainerRef, handleResizeActionBarColumn);
319
+ (0, _useResizeObserver.useResizeObserver)(headerRef, handleResize);
324
320
 
325
321
  // Determine what form of title to display in the breadcrumb
326
322
  var breadcrumbItemForTitle = (0, _PageHeaderUtils.utilGetBreadcrumbItemForTitle)(_PageHeaderUtils.blockClass, collapseTitle, title);
@@ -434,9 +434,7 @@ var SidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
434
434
  }, title));
435
435
  };
436
436
  var contentRef = ref || sidePanelRef;
437
- (0, _useResizeObserver.useResizeObserver)(contentRef, {
438
- callback: handleResize
439
- });
437
+ (0, _useResizeObserver.useResizeObserver)(contentRef, handleResize);
440
438
  return /*#__PURE__*/_react.default.createElement(_framerMotion.AnimatePresence, null, open && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_framerMotion.motion.div, (0, _extends2.default)({}, (0, _devtools.getDevtoolsProps)(componentName), rest, {
441
439
  id: "".concat(blockClass, "-outer"),
442
440
  className: mainPanelClassNames,
@@ -205,12 +205,8 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
205
205
  var handleModalClose = function handleModalClose() {
206
206
  setShowAllModalOpen(false);
207
207
  };
208
- (0, _useResizeObserver.useResizeObserver)(sizingContainerRef, {
209
- callback: handleSizerTagsResize
210
- });
211
- (0, _useResizeObserver.useResizeObserver)(tagSetRef, {
212
- callback: handleResize
213
- });
208
+ (0, _useResizeObserver.useResizeObserver)(sizingContainerRef, handleSizerTagsResize);
209
+ (0, _useResizeObserver.useResizeObserver)(tagSetRef, handleResize);
214
210
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
215
211
  className: (0, _classnames.default)([blockClass, className]),
216
212
  ref: tagSetRef
@@ -14,13 +14,7 @@ var _react = require("react");
14
14
  * LICENSE file in the root directory of this source tree.
15
15
  */
16
16
 
17
- var useResizeObserver = function useResizeObserver(ref) {
18
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
19
- callback: null,
20
- throttleInterval: 0
21
- };
22
- var callback = options.callback,
23
- throttleInterval = options.throttleInterval;
17
+ var useResizeObserver = function useResizeObserver(ref, callback) {
24
18
  var _useState = (0, _react.useState)(0),
25
19
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
26
20
  width = _useState2[0],
@@ -29,8 +23,14 @@ var useResizeObserver = function useResizeObserver(ref) {
29
23
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
30
24
  height = _useState4[0],
31
25
  setHeight = _useState4[1];
32
- var throttleTimeout = (0, _react.useRef)(null);
33
26
  var entriesToHandle = (0, _react.useRef)(null);
27
+ var cb = (0, _react.useRef)(callback);
28
+ (0, _react.useEffect)(function () {
29
+ // ref for callback removes it as dependency fro useLayoutEffect
30
+ // This significantly reduces repeated calls if a function is redefined on every
31
+ // render
32
+ cb.current = callback;
33
+ }, [callback]);
34
34
  (0, _react.useLayoutEffect)(function () {
35
35
  if (!(ref !== null && ref !== void 0 && ref.current)) {
36
36
  return;
@@ -42,29 +42,15 @@ var useResizeObserver = function useResizeObserver(ref) {
42
42
  var entry = entriesToHandle.current[0];
43
43
  setWidth(entry.contentRect.width);
44
44
  setHeight(entry.contentRect.height);
45
- throttleTimeout.current = null;
46
- callback && callback(entry.contentRect);
45
+ cb.current && cb.current(entry.contentRect);
47
46
  };
48
47
  var observer = new ResizeObserver(function (entries) {
49
48
  // always update entriesToHandle
50
49
  entriesToHandle.current = entries;
51
- if (throttleInterval) {
52
- // if a throttleInterval check for running timeout
53
- if (throttleTimeout.current === null) {
54
- // no live timeout set entries to handle and move on
55
-
56
- // set up throttle
57
- throttleTimeout.current = setTimeout(function () {
58
- // do callbacks
59
- doCallbacks();
60
- // reset throttle
61
- throttleTimeout.current = null;
62
- }, throttleInterval);
63
- }
64
- } else {
65
- // no throttle do callbacks every time
50
+ window.requestAnimationFrame(function () {
51
+ // do callbacks
66
52
  doCallbacks();
67
- }
53
+ });
68
54
  });
69
55
 
70
56
  // observe all refs passed
@@ -74,7 +60,7 @@ var useResizeObserver = function useResizeObserver(ref) {
74
60
  observer = null;
75
61
  };
76
62
  // eslint-disable-next-line react-hooks/exhaustive-deps
77
- }, [ref, options]);
63
+ }, [ref]);
78
64
  return {
79
65
  width: width,
80
66
  height: height
@@ -75,7 +75,7 @@ exports.prepareStory = prepareStory;
75
75
  var CodesandboxLink = function CodesandboxLink(_ref) {
76
76
  var exampleDirectory = _ref.exampleDirectory;
77
77
  return /*#__PURE__*/_react.default.createElement("a", {
78
- href: "https://codesandbox.io/s/github/carbon-design-system/ibm-cloud-cognitive/tree/main_v1/examples/carbon-for-ibm-products/".concat(exampleDirectory)
78
+ href: "https://codesandbox.io/s/github/carbon-design-system/ibm-products/tree/main_v1/examples/carbon-for-ibm-products/".concat(exampleDirectory)
79
79
  }, /*#__PURE__*/_react.default.createElement("img", {
80
80
  alt: "Edit on CodeSandbox",
81
81
  src: "https://codesandbox.io/static/img/play-codesandbox.svg"
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@carbon/ibm-products",
3
3
  "description": "Carbon for IBM Products",
4
- "version": "1.53.1",
4
+ "version": "1.54.2",
5
5
  "license": "Apache-2.0",
6
6
  "main": "lib/index.js",
7
7
  "module": "es/index.js",
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "https://github.com/carbon-design-system/ibm-cloud-cognitive.git",
11
- "directory": "packages/cloud-cognitive"
10
+ "url": "https://github.com/carbon-design-system/ibm-products.git",
11
+ "directory": "packages/ibm-products"
12
12
  },
13
- "bugs": "https://github.com/carbon-design-system/ibm-cloud-cognitive/issues",
13
+ "bugs": "https://github.com/carbon-design-system/ibm-products/issues",
14
14
  "sideEffects": [
15
15
  "**/global/js/utils/props-helper.js",
16
16
  "**/*.css",
@@ -53,7 +53,7 @@
53
53
  "devDependencies": {
54
54
  "@babel/cli": "^7.20.7",
55
55
  "@babel/core": "^7.20.12",
56
- "babel-preset-ibm-cloud-cognitive": "^0.14.27",
56
+ "babel-preset-ibm-cloud-cognitive": "^0.14.28",
57
57
  "chalk": "^4.1.2",
58
58
  "change-case": "^4.1.2",
59
59
  "copyfiles": "^2.4.1",
@@ -61,7 +61,7 @@
61
61
  "fs-extra": "^11.1.0",
62
62
  "glob": "^8.1.0",
63
63
  "jest": "^29.4.2",
64
- "jest-config-ibm-cloud-cognitive": "^0.24.14",
64
+ "jest-config-ibm-cloud-cognitive": "^0.24.15",
65
65
  "jest-environment-jsdom": "^29.4.2",
66
66
  "namor": "^1.1.2",
67
67
  "npm-check-updates": "^16.7.4",
@@ -95,5 +95,5 @@
95
95
  "react": "^16.8.6 || ^17.0.1",
96
96
  "react-dom": "^16.8.6 || ^17.0.1"
97
97
  },
98
- "gitHead": "1eaa6392a5ddc2c60ee54bc73f427ee447749d16"
98
+ "gitHead": "0fe7fda6dc556512459ea77c378f6eab333419f6"
99
99
  }
@@ -134,3 +134,11 @@ $block-class: #{$pkg-prefix}--datagrid;
134
134
  flex: 0 1 calc($spacing-05 * 30);
135
135
  margin-right: $spacing-07;
136
136
  }
137
+
138
+ .#{$carbon-prefix}--body--with-modal-open {
139
+ .#{$block-class}__mobile-toolbar-modal.#{$carbon-prefix}--modal {
140
+ top: calc($spacing-07 * -1);
141
+ left: calc($spacing-07 * -1);
142
+ width: 100vw;
143
+ }
144
+ }
@@ -575,11 +575,6 @@
575
575
  width: 100%;
576
576
  }
577
577
 
578
- .#{$carbon-prefix}--body--with-modal-open .#{$block-class}__grid-container {
579
- overflow: hidden;
580
- height: 100vh;
581
- }
582
-
583
578
  .#{$carbon-prefix}--overflow-menu.#{$block-class}__toolbar-menu__trigger {
584
579
  flex-shrink: 0;
585
580
  background-color: $interactive-01;