@carbon/ibm-products 2.0.1 → 2.1.1

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 (67) hide show
  1. package/css/index-full-carbon.css +192 -56
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +3 -3
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +53 -10
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +1 -1
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +68 -28
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +3 -3
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +97 -27
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +3 -3
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/AboutModal/AboutModal.js +1 -3
  18. package/es/components/ActionBar/ActionBar.js +2 -6
  19. package/es/components/AddSelect/AddSelectFormControl.js +6 -6
  20. package/es/components/AddSelect/AddSelectRow.js +15 -5
  21. package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -6
  22. package/es/components/ButtonMenu/ButtonMenu.js +4 -4
  23. package/es/components/ButtonSetWithOverflow/ButtonSetWithOverflow.js +3 -9
  24. package/es/components/Datagrid/Datagrid/DatagridVirtualBody.js +1 -3
  25. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +34 -36
  26. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +20 -24
  27. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +0 -1
  28. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +44 -15
  29. package/es/components/Datagrid/useFiltering.js +1 -1
  30. package/es/components/Datagrid/useStickyColumn.js +10 -3
  31. package/es/components/PageHeader/PageHeader.js +2 -6
  32. package/es/components/SidePanel/SidePanel.js +1 -3
  33. package/es/components/TagSet/TagSet.js +4 -7
  34. package/es/components/UserProfileImage/UserProfileImage.js +13 -2
  35. package/es/global/js/hooks/useResizeObserver.js +14 -28
  36. package/lib/components/AboutModal/AboutModal.js +1 -3
  37. package/lib/components/ActionBar/ActionBar.js +2 -6
  38. package/lib/components/AddSelect/AddSelectFormControl.js +6 -6
  39. package/lib/components/AddSelect/AddSelectRow.js +15 -5
  40. package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -6
  41. package/lib/components/ButtonMenu/ButtonMenu.js +4 -4
  42. package/lib/components/ButtonSetWithOverflow/ButtonSetWithOverflow.js +3 -9
  43. package/lib/components/Datagrid/Datagrid/DatagridVirtualBody.js +1 -3
  44. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterFlyout.js +33 -35
  45. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterPanel.js +20 -24
  46. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/index.js +0 -7
  47. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +42 -13
  48. package/lib/components/Datagrid/useFiltering.js +1 -1
  49. package/lib/components/Datagrid/useStickyColumn.js +10 -3
  50. package/lib/components/PageHeader/PageHeader.js +2 -6
  51. package/lib/components/SidePanel/SidePanel.js +1 -3
  52. package/lib/components/TagSet/TagSet.js +4 -7
  53. package/lib/components/UserProfileImage/UserProfileImage.js +13 -2
  54. package/lib/global/js/hooks/useResizeObserver.js +13 -27
  55. package/package.json +17 -17
  56. package/scss/components/AddSelect/_add-select.scss +4 -0
  57. package/scss/components/BreadcrumbWithOverflow/_breadcrumb-with-overflow.scss +0 -1
  58. package/scss/components/ButtonMenu/_button-menu.scss +32 -1
  59. package/scss/components/Datagrid/_datagrid.scss +4 -2
  60. package/scss/components/Datagrid/_storybook-styles.scss +8 -0
  61. package/scss/components/Datagrid/styles/_datagrid.scss +12 -13
  62. package/scss/components/NotificationsPanel/_notifications-panel.scss +1 -1
  63. package/scss/components/PageHeader/_page-header.scss +0 -1
  64. package/scss/components/SidePanel/_side-panel.scss +0 -2
  65. package/scss/components/Tearsheet/_tearsheet.scss +0 -5
  66. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +0 -21
  67. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useInitialStateFromFilters.js +0 -30
@@ -47,6 +47,7 @@ var AddSelectRow = function AddSelectRow(_ref) {
47
47
  setMultiSelection = _ref.setMultiSelection,
48
48
  setParentSelected = _ref.setParentSelected,
49
49
  setSingleSelection = _ref.setSingleSelection,
50
+ setSize = _ref.setSize,
50
51
  singleSelection = _ref.singleSelection;
51
52
  var ref = (0, _react.useRef)(null);
52
53
  (0, _react.useEffect)(function () {
@@ -129,14 +130,20 @@ var AddSelectRow = function AddSelectRow(_ref) {
129
130
  var hasModifiers = (modifiers === null || modifiers === void 0 ? void 0 : (_modifiers$options = modifiers.options) === null || _modifiers$options === void 0 ? void 0 : _modifiers$options.length) > 0;
130
131
  var tabIndex = getTabIndex();
131
132
  var selected = isSelected();
133
+ var expanded = parentSelected === item.id;
132
134
  return /*#__PURE__*/_react.default.createElement("div", {
133
- className: (0, _classnames.default)("".concat(blockClass, "-row"), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "-row--selected"), isSelected(item.id)), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "-row-meta--selected"), isInMetaPanel(item.id)), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "-row--active"), parentSelected === item.id), _cx)),
135
+ className: (0, _classnames.default)("".concat(blockClass, "-row"), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "-row--selected"), isSelected()), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "-row-meta--selected"), isInMetaPanel(item.id)), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "-row--active"), expanded), _cx)),
134
136
  onKeyDown: onSelectKeyDown,
135
137
  tabIndex: tabIndex,
136
138
  ref: ref,
137
- role: "row"
139
+ role: "row",
140
+ "aria-selected": selected,
141
+ "aria-posinset": index,
142
+ "aria-setsize": setSize,
143
+ "aria-expanded": expanded
138
144
  }, /*#__PURE__*/_react.default.createElement("div", {
139
- className: "".concat(blockClass, "-cell")
145
+ className: "".concat(blockClass, "-cell"),
146
+ role: "gridcell"
140
147
  }, /*#__PURE__*/_react.default.createElement("div", {
141
148
  className: "".concat(blockClass, "-cell-wrapper")
142
149
  }, multi ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_AddSelectFormControl.AddSelectFormControl, {
@@ -149,7 +156,7 @@ var AddSelectRow = function AddSelectRow(_ref) {
149
156
  type: "inline",
150
157
  items: modifiers.options,
151
158
  label: modifiers.label,
152
- disabled: !isSelected(item.id),
159
+ disabled: !isSelected(),
153
160
  className: "".concat(blockClass, "-dropdown"),
154
161
  initialSelectedItem: item[modifiers.id],
155
162
  onChange: function onChange(_ref3) {
@@ -174,7 +181,9 @@ var AddSelectRow = function AddSelectRow(_ref) {
174
181
  hasIconOnly: true,
175
182
  onClick: onNavigateItem,
176
183
  kind: "ghost",
177
- size: "sm"
184
+ size: "sm",
185
+ tabIndex: -1,
186
+ "aria-hidden": true
178
187
  }), item.meta && /*#__PURE__*/_react.default.createElement(_react2.Button, {
179
188
  className: "".concat(blockClass, "-view-meta"),
180
189
  renderIcon: function renderIcon(props) {
@@ -212,6 +221,7 @@ AddSelectRow.propTypes = {
212
221
  setMultiSelection: _propTypes.default.func,
213
222
  setParentSelected: _propTypes.default.func,
214
223
  setSingleSelection: _propTypes.default.func,
224
+ setSize: _propTypes.default.number,
215
225
  singleSelection: _propTypes.default.string
216
226
  };
217
227
  AddSelectRow.displayName = componentName;
@@ -257,13 +257,9 @@ var BreadcrumbWithOverflow = function BreadcrumbWithOverflow(_ref) {
257
257
  }
258
258
 
259
259
  // container resize
260
- (0, _useResizeObserver.useResizeObserver)(sizingContainerRef, {
261
- callback: handleResize
262
- });
260
+ (0, _useResizeObserver.useResizeObserver)(sizingContainerRef, handleResize);
263
261
  // item resize
264
- (0, _useResizeObserver.useResizeObserver)(breadcrumbItemWithOverflow, {
265
- callback: handleResize
266
- });
262
+ (0, _useResizeObserver.useResizeObserver)(breadcrumbItemWithOverflow, handleResize);
267
263
  return /*#__PURE__*/_react.default.createElement("div", {
268
264
  className: (0, _classnames.default)(blockClass, className, (0, _defineProperty2.default)({}, "".concat(blockClass, "__with-items"), displayedBreadcrumbItems.length > 1)),
269
265
  ref: breadcrumbItemWithOverflow
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.ButtonMenu = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
11
  var _react = _interopRequireDefault(require("react"));
11
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
@@ -58,15 +59,14 @@ var ButtonMenu = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
58
59
  return /*#__PURE__*/_react.default.createElement(_react2.OverflowMenu, (0, _extends2.default)({}, rest, {
59
60
  className: (0, _classnames.default)(blockClass,
60
61
  // Apply the block class to the main HTML element
61
- className // Apply any supplied class names to the main HTML element.
62
- ),
63
-
62
+ className, // Apply any supplied class names to the main HTML element.
63
+ "".concat(carbonPrefix, "--btn--").concat(size), (0, _defineProperty2.default)({}, "".concat(blockClass, "__wrapper--").concat(kind), kind)),
64
64
  "aria-label": menuAriaLabel,
65
65
  menuOptionsClass: (0, _classnames.default)("".concat(blockClass, "__options"), menuOptionsClass),
66
66
  size: size,
67
67
  renderIcon: function renderIcon() {
68
68
  return /*#__PURE__*/_react.default.createElement("div", {
69
- className: (0, _classnames.default)(["".concat(blockClass, "__trigger"), "".concat(carbonPrefix, "--btn"), "".concat(carbonPrefix, "--btn--").concat(kind), "".concat(carbonPrefix, "--btn--").concat(size)])
69
+ className: (0, _classnames.default)("".concat(blockClass, "__trigger"))
70
70
  }, label, Icon && /*#__PURE__*/_react.default.createElement(Icon, {
71
71
  "aria-hidden": "true",
72
72
  "aria-label": iconDescription,
@@ -145,15 +145,9 @@ var ButtonSetWithOverflow = function ButtonSetWithOverflow(_ref) {
145
145
  }, (0, _propsHelper.prepareProps)(other, ['iconDescription', 'renderIcon'])));
146
146
  }).reverse());
147
147
  });
148
- (0, _useResizeObserver.useResizeObserver)(sizingContainerRefSet, {
149
- callback: checkFullyVisibleItems
150
- });
151
- (0, _useResizeObserver.useResizeObserver)(sizingContainerRefCombo, {
152
- callback: checkFullyVisibleItems
153
- });
154
- (0, _useResizeObserver.useResizeObserver)(spaceAvailableRef, {
155
- callback: checkFullyVisibleItems
156
- });
148
+ (0, _useResizeObserver.useResizeObserver)(sizingContainerRefSet, checkFullyVisibleItems);
149
+ (0, _useResizeObserver.useResizeObserver)(sizingContainerRefCombo, checkFullyVisibleItems);
150
+ (0, _useResizeObserver.useResizeObserver)(spaceAvailableRef, checkFullyVisibleItems);
157
151
  return /*#__PURE__*/_react.default.createElement("div", {
158
152
  className: (0, _classnames.default)([blockClass, className, (0, _defineProperty2.default)({}, "".concat(blockClass, "--right"), rightAlign)]),
159
153
  ref: spaceAvailableRef
@@ -59,9 +59,7 @@ var DatagridVirtualBody = function DatagridVirtualBody(datagridState) {
59
59
  var gridRefElement = gridRef === null || gridRef === void 0 ? void 0 : gridRef.current;
60
60
  gridRefElement.style.width = gridRefElement === null || gridRefElement === void 0 ? void 0 : gridRefElement.clientWidth;
61
61
  };
62
- (0, _useResizeObserver.useResizeObserver)(gridRef, {
63
- callback: handleVirtualGridResize
64
- });
62
+ (0, _useResizeObserver.useResizeObserver)(gridRef, handleVirtualGridResize);
65
63
  var syncScroll = function syncScroll(e) {
66
64
  var virtualBody = e.target;
67
65
  document.querySelector(".".concat(blockClass, "__head-wrap")).scrollLeft = virtualBody.scrollLeft;
@@ -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, _react2.useRef)(initialFilters);
62
-
58
+ _ref$reactTableFilter = _ref.reactTableFiltersState,
59
+ reactTableFiltersState = _ref$reactTableFilter === void 0 ? [] : _ref$reactTableFilter;
63
60
  /** State */
64
61
  var _useState = (0, _react2.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, _react2.useRef)(null);
@@ -117,26 +116,10 @@ var FilterFlyout = function FilterFlyout(_ref) {
117
116
  // updates the ref so next time the flyout opens we have records of the previous filters
118
117
  prevFiltersRef.current = JSON.stringify(filtersState);
119
118
  prevFiltersObjectArrayRef.current = JSON.stringify(filtersObjectArray);
120
- };
121
- var cancel = function cancel() {
122
- // Reverting to previous filters only applies when using batch actions
123
- if (updateMethod === _constants.BATCH) {
124
- revertToPreviousFilters();
125
- onCancel();
126
- }
127
- closeFlyout();
128
- };
129
119
 
130
- /** Effects */
131
- (0, _hooks.useClickOutside)(filterFlyoutRef, function (target) {
132
- var hasClickedOnDatePicker = target.closest('.flatpickr-calendar');
133
- var hasClickedOnDropdown = target.className === "".concat(carbonPrefix, "--list-box__menu-item__option");
134
- if (!open || hasClickedOnDatePicker || hasClickedOnDropdown) {
135
- return;
136
- }
137
- cancel();
138
- });
139
- (0, _hooks2.useSubscribeToEventEmitter)(_constants.CLEAR_FILTERS, reset);
120
+ // Update the last applied filters
121
+ lastAppliedFilters.current = JSON.stringify(filtersObjectArray);
122
+ };
140
123
 
141
124
  /** Renders all filters */
142
125
  var renderFilters = function renderFilters() {
@@ -163,6 +146,21 @@ var FilterFlyout = function FilterFlyout(_ref) {
163
146
  buttonSize: "md"
164
147
  });
165
148
  };
149
+
150
+ /** Effects */
151
+ (0, _hooks.useClickOutside)(filterFlyoutRef, function (target) {
152
+ var hasClickedOnDatePicker = target.closest('.flatpickr-calendar');
153
+ var hasClickedOnDropdown = target.className === "".concat(carbonPrefix, "--list-box__menu-item__option");
154
+ if (!open || hasClickedOnDatePicker || hasClickedOnDropdown) {
155
+ return;
156
+ }
157
+ closeFlyout();
158
+ cancel();
159
+ });
160
+ (0, _hooks2.useSubscribeToEventEmitter)(_constants.CLEAR_FILTERS, reset);
161
+ (0, _react2.useEffect)(function reflectLastAppliedFiltersWhenReactTableUpdates() {
162
+ lastAppliedFilters.current = JSON.stringify(reactTableFiltersState);
163
+ }, [reactTableFiltersState, lastAppliedFilters]);
166
164
  return /*#__PURE__*/_react2.default.createElement("div", {
167
165
  className: "".concat(componentClass, "__container")
168
166
  }, /*#__PURE__*/_react2.default.createElement(_react.Button, {
@@ -206,14 +204,6 @@ FilterFlyout.propTypes = {
206
204
  * Icon description for the filter flyout button
207
205
  */
208
206
  flyoutIconDescription: _propTypes.default.string,
209
- /**
210
- * Filters that should be applied on load
211
- */
212
- initialFilters: _propTypes.default.arrayOf(_propTypes.default.shape({
213
- id: _propTypes.default.string.isRequired,
214
- type: _propTypes.default.string.isRequired,
215
- value: _propTypes.default.any.isRequired
216
- })),
217
207
  /**
218
208
  * Callback when the apply button is clicked
219
209
  */
@@ -234,6 +224,14 @@ FilterFlyout.propTypes = {
234
224
  * Label text of the primary action in the flyout
235
225
  */
236
226
  primaryActionLabel: _propTypes.default.string,
227
+ /**
228
+ * Filters from react table's state
229
+ */
230
+ reactTableFiltersState: _propTypes.default.arrayOf(_propTypes.default.shape({
231
+ id: _propTypes.default.string.isRequired,
232
+ type: _propTypes.default.string.isRequired,
233
+ value: _propTypes.default.any.isRequired
234
+ })),
237
235
  /**
238
236
  * Label text of the secondary action in the flyout
239
237
  */
@@ -66,11 +66,8 @@ var FilterPanel = function FilterPanel(_ref) {
66
66
  searchLabelText = _ref$searchLabelText === void 0 ? 'Filter search' : _ref$searchLabelText,
67
67
  _ref$searchPlaceholde = _ref.searchPlaceholder,
68
68
  searchPlaceholder = _ref$searchPlaceholde === void 0 ? 'Find filters' : _ref$searchPlaceholde,
69
- _ref$initialFilters = _ref.initialFilters,
70
- initialFilters = _ref$initialFilters === void 0 ? [] : _ref$initialFilters;
71
- // Save the initial filters we only need the filters once
72
- var initialFiltersRef = (0, _react.useRef)(initialFilters);
73
-
69
+ _ref$reactTableFilter = _ref.reactTableFiltersState,
70
+ reactTableFiltersState = _ref$reactTableFilter === void 0 ? [] : _ref$reactTableFilter;
74
71
  /** State */
75
72
  var _useState = (0, _react.useState)(false),
76
73
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -81,15 +78,17 @@ var FilterPanel = function FilterPanel(_ref) {
81
78
  filters: filterSections,
82
79
  setAllFilters: setAllFilters,
83
80
  variation: _constants.PANEL,
84
- initialFilters: initialFiltersRef.current
81
+ reactTableFiltersState: reactTableFiltersState,
82
+ onCancel: onCancel
85
83
  }),
86
84
  filtersState = _useFilters.filtersState,
87
85
  prevFiltersObjectArrayRef = _useFilters.prevFiltersObjectArrayRef,
88
86
  prevFiltersRef = _useFilters.prevFiltersRef,
89
- revertToPreviousFilters = _useFilters.revertToPreviousFilters,
87
+ cancel = _useFilters.cancel,
90
88
  reset = _useFilters.reset,
91
89
  renderFilter = _useFilters.renderFilter,
92
- filtersObjectArray = _useFilters.filtersObjectArray;
90
+ filtersObjectArray = _useFilters.filtersObjectArray,
91
+ lastAppliedFilters = _useFilters.lastAppliedFilters;
93
92
 
94
93
  /** Refs */
95
94
  var filterPanelRef = (0, _react.useRef)();
@@ -119,14 +118,8 @@ var FilterPanel = function FilterPanel(_ref) {
119
118
 
120
119
  /** Methods */
121
120
  var closePanel = function closePanel() {
122
- return setPanelOpen(false);
123
- };
124
- var cancel = function cancel() {
125
- // Reverting to previous filters only applies when using batch actions
126
- if (updateMethod === _constants.BATCH) {
127
- revertToPreviousFilters();
128
- onCancel();
129
- }
121
+ cancel();
122
+ setPanelOpen(false);
130
123
  };
131
124
  var apply = function apply() {
132
125
  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, {
@@ -254,20 +250,20 @@ FilterPanel.propTypes = {
254
250
  closeIconDescription: _propTypes.default.string,
255
251
  filterPanelMinHeight: _propTypes.default.number,
256
252
  filterSections: _propTypes.default.array,
257
- /**
258
- * Filters that should be applied on load
259
- */
260
- initialFilters: _propTypes.default.arrayOf(_propTypes.default.shape({
261
- id: _propTypes.default.string.isRequired,
262
- type: _propTypes.default.string.isRequired,
263
- value: _propTypes.default.any.isRequired
264
- })),
265
253
  onApply: _propTypes.default.func,
266
254
  onCancel: _propTypes.default.func,
267
255
  onPanelClose: _propTypes.default.func,
268
256
  onPanelOpen: _propTypes.default.func,
269
257
  open: _propTypes.default.bool,
270
258
  primaryActionLabel: _propTypes.default.string,
259
+ /**
260
+ * Filters from react table's state
261
+ */
262
+ reactTableFiltersState: _propTypes.default.arrayOf(_propTypes.default.shape({
263
+ id: _propTypes.default.string.isRequired,
264
+ type: _propTypes.default.string.isRequired,
265
+ value: _propTypes.default.any.isRequired
266
+ })),
271
267
  searchLabelText: _propTypes.default.string,
272
268
  searchPlaceholder: _propTypes.default.string,
273
269
  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 _useFilters = _interopRequireDefault(require("./useFilters"));
34
27
  var _useShouldDisableButtons = _interopRequireDefault(require("./useShouldDisableButtons"));
@@ -13,7 +13,6 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
13
13
  var _react = _interopRequireWildcard(require("react"));
14
14
  var _react2 = require("@carbon/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; }
@@ -31,19 +30,22 @@ var useFilters = function useFilters(_ref) {
31
30
  filters = _ref$filters === void 0 ? [] : _ref$filters,
32
31
  setAllFilters = _ref.setAllFilters,
33
32
  variation = _ref.variation,
34
- initialFilters = _ref.initialFilters;
33
+ reactTableFiltersState = _ref.reactTableFiltersState,
34
+ _ref$onCancel = _ref.onCancel,
35
+ onCancel = _ref$onCancel === void 0 ? function () {} : _ref$onCancel;
35
36
  /** State */
36
- var _useInitialStateFromF = (0, _useInitialStateFromFilters.default)(filters, variation, initialFilters),
37
- _useInitialStateFromF2 = (0, _slicedToArray2.default)(_useInitialStateFromF, 2),
38
- filtersState = _useInitialStateFromF2[0],
39
- setFiltersState = _useInitialStateFromF2[1];
40
- var _useState = (0, _react.useState)(initialFilters),
37
+ var _useState = (0, _react.useState)((0, _utils.getInitialStateFromFilters)(filters, variation, reactTableFiltersState)),
41
38
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
42
- filtersObjectArray = _useState2[0],
43
- setFiltersObjectArray = _useState2[1];
39
+ filtersState = _useState2[0],
40
+ setFiltersState = _useState2[1];
41
+ var _useState3 = (0, _react.useState)(reactTableFiltersState),
42
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
43
+ filtersObjectArray = _useState4[0],
44
+ setFiltersObjectArray = _useState4[1];
44
45
 
45
46
  // When using batch actions we have to store the filters to then apply them later
46
47
  var prevFiltersRef = (0, _react.useRef)(JSON.stringify(filtersState));
48
+ var lastAppliedFilters = (0, _react.useRef)(JSON.stringify(reactTableFiltersState));
47
49
  var prevFiltersObjectArrayRef = (0, _react.useRef)(JSON.stringify(filtersObjectArray));
48
50
 
49
51
  /** Methods */
@@ -52,6 +54,7 @@ var useFilters = function useFilters(_ref) {
52
54
  var revertToPreviousFilters = function revertToPreviousFilters() {
53
55
  setFiltersState(JSON.parse(prevFiltersRef.current));
54
56
  setFiltersObjectArray(JSON.parse(prevFiltersObjectArrayRef.current));
57
+ setAllFilters(JSON.parse(lastAppliedFilters.current));
55
58
  };
56
59
  var reset = function reset() {
57
60
  // When we reset we want the "initialFilters" to be an empty array
@@ -163,8 +166,11 @@ var useFilters = function useFilters(_ref) {
163
166
  var type = _ref3.type,
164
167
  column = _ref3.column,
165
168
  components = _ref3.props;
166
- var isPanel = variation === _constants.PANEL;
167
169
  var filter;
170
+ var isPanel = variation === _constants.PANEL;
171
+ if (!type) {
172
+ return console.error("type: ".concat(type, "; does not exist as a type of filter."));
173
+ }
168
174
  switch (type) {
169
175
  case _constants.DATE:
170
176
  filter = /*#__PURE__*/_react.default.createElement(_react2.DatePicker, (0, _extends2.default)({}, components.DatePicker, {
@@ -290,10 +296,31 @@ var useFilters = function useFilters(_ref) {
290
296
  break;
291
297
  }
292
298
  if (isPanel) {
293
- return /*#__PURE__*/_react.default.createElement(_react2.Layer, null, filter);
299
+ return /*#__PURE__*/_react.default.createElement(_react2.Layer, {
300
+ key: column
301
+ }, filter);
294
302
  }
295
- return filter;
303
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
304
+ key: column
305
+ }, filter);
296
306
  };
307
+ var cancel = function cancel() {
308
+ // Reverting to previous filters only applies when using batch actions
309
+ if (updateMethod === _constants.BATCH) {
310
+ revertToPreviousFilters();
311
+ onCancel();
312
+ }
313
+ };
314
+
315
+ /** The purpose of this function is to sync any changes in react-tables state.filters array and reflect
316
+ those new filter changes in the panel/flyout state. The external change is triggered if setAllFilters is called outside of the Datagrid */
317
+ (0, _react.useEffect)(function updateStateAndFiltersToReflectExternalFilterChanges() {
318
+ var newFiltersState = (0, _utils.getInitialStateFromFilters)(filters, variation, reactTableFiltersState);
319
+ setFiltersState(newFiltersState);
320
+ prevFiltersRef.current = JSON.stringify(newFiltersState);
321
+ prevFiltersObjectArrayRef.current = JSON.stringify(reactTableFiltersState);
322
+ setFiltersObjectArray(reactTableFiltersState);
323
+ }, [filters, reactTableFiltersState, variation]);
297
324
  return {
298
325
  filtersState: filtersState,
299
326
  setFiltersState: setFiltersState,
@@ -302,7 +329,9 @@ var useFilters = function useFilters(_ref) {
302
329
  revertToPreviousFilters: revertToPreviousFilters,
303
330
  reset: reset,
304
331
  renderFilter: renderFilter,
305
- filtersObjectArray: filtersObjectArray
332
+ filtersObjectArray: filtersObjectArray,
333
+ lastAppliedFilters: lastAppliedFilters,
334
+ cancel: cancel
306
335
  };
307
336
  };
308
337
  var _default = useFilters;
@@ -79,7 +79,7 @@ var useFiltering = function useFiltering(hooks) {
79
79
  variation: 'flyout',
80
80
  updateMethod: _constants.BATCH,
81
81
  panelIconDescription: 'Open filter panel',
82
- initialFilters: state.filters
82
+ reactTableFiltersState: state.filters
83
83
  };
84
84
  var getFilterFlyoutProps = function getFilterFlyoutProps() {
85
85
  return _objectSpread(_objectSpread(_objectSpread({}, defaultProps), filterProps), {}, {
@@ -26,10 +26,13 @@ var OFFSET_SCROLL_CLASS = "".concat(styleClassPrefix, "-offset-scroll");
26
26
  var useStickyColumn = function useStickyColumn(hooks) {
27
27
  var tableBodyRef = (0, _react.useRef)();
28
28
  var stickyHeaderCellRef = (0, _react.useRef)();
29
- var _useState = (0, _react.useState)(window.innerWidth),
29
+ var _useState = (0, _react.useState)(null),
30
30
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
31
31
  windowSize = _useState2[0],
32
32
  setWindowSize = _useState2[1];
33
+ (0, _react.useEffect)(function () {
34
+ setWindowSize(window.innerWidth);
35
+ }, []);
33
36
  (0, _react.useLayoutEffect)(function () {
34
37
  function updateSize() {
35
38
  setWindowSize(window.innerWidth);
@@ -58,9 +61,13 @@ var useStickyColumn = function useStickyColumn(hooks) {
58
61
  headerCellElement.classList.add(OFFSET_SCROLL_CLASS);
59
62
  }
60
63
  var boundListener = (0, _debounce.default)(onBodyResize.bind(null, tableBodyElement, headerCellElement), 250);
61
- window.addEventListener('resize', boundListener);
64
+ if (typeof window !== 'undefined') {
65
+ window.addEventListener('resize', boundListener);
66
+ }
62
67
  return function () {
63
- window.removeEventListener('resize', boundListener);
68
+ if (typeof window !== 'undefined') {
69
+ window.removeEventListener('resize', boundListener);
70
+ }
64
71
  };
65
72
  }, [instance.rows, instance.isFetching]);
66
73
  (0, _react.useEffect)(function () {
@@ -320,12 +320,8 @@ var PageHeader = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
320
320
  (0, _PageHeaderUtils.utilSetCollapsed)(collapseHeader, metrics.headerOffset, metrics.headerTopValue);
321
321
  }
322
322
  }, [collapseHeader, metrics.headerOffset, metrics.headerTopValue]);
323
- (0, _useResizeObserver.useResizeObserver)(sizingContainerRef, {
324
- callback: handleResizeActionBarColumn
325
- });
326
- (0, _useResizeObserver.useResizeObserver)(headerRef, {
327
- callback: handleResize
328
- });
323
+ (0, _useResizeObserver.useResizeObserver)(sizingContainerRef, handleResizeActionBarColumn);
324
+ (0, _useResizeObserver.useResizeObserver)(headerRef, handleResize);
329
325
 
330
326
  // Determine what form of title to display in the breadcrumb
331
327
  var breadcrumbItemForTitle = (0, _PageHeaderUtils.utilGetBreadcrumbItemForTitle)(_PageHeaderUtils.blockClass, collapseTitle, title);
@@ -451,9 +451,7 @@ var SidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
451
451
  }, title));
452
452
  };
453
453
  var contentRef = ref || sidePanelRef;
454
- (0, _useResizeObserver.useResizeObserver)(contentRef, {
455
- callback: handleResize
456
- });
454
+ (0, _useResizeObserver.useResizeObserver)(contentRef, handleResize);
457
455
  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, {
458
456
  id: "".concat(blockClass, "-outer"),
459
457
  className: mainPanelClassNames,
@@ -164,7 +164,8 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
164
164
  if (sizingTags.length > 0) {
165
165
  var spaceAvailable = tagSetRef.current.offsetWidth;
166
166
  for (var i in sizingTags) {
167
- var tagWidth = sizingTags[i].offsetWidth;
167
+ var _sizingTags$i;
168
+ var tagWidth = ((_sizingTags$i = sizingTags[i]) === null || _sizingTags$i === void 0 ? void 0 : _sizingTags$i.offsetWidth) || 0;
168
169
  if (spaceAvailable >= tagWidth) {
169
170
  spaceAvailable -= tagWidth;
170
171
  willFit += 1;
@@ -206,12 +207,8 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
206
207
  var handleModalClose = function handleModalClose() {
207
208
  setShowAllModalOpen(false);
208
209
  };
209
- (0, _useResizeObserver.useResizeObserver)(sizingContainerRef, {
210
- callback: handleSizerTagsResize
211
- });
212
- (0, _useResizeObserver.useResizeObserver)(tagSetRef, {
213
- callback: handleResize
214
- });
210
+ (0, _useResizeObserver.useResizeObserver)(sizingContainerRef, handleSizerTagsResize);
211
+ (0, _useResizeObserver.useResizeObserver)(tagSetRef, handleResize);
215
212
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
216
213
  className: (0, _classnames.default)([blockClass, className]),
217
214
  ref: tagSetRef
@@ -15,7 +15,7 @@ require("../../global/js/utils/props-helper");
15
15
  var _settings = require("../../settings");
16
16
  var _icons = require("@carbon/react/icons");
17
17
  var _react2 = require("@carbon/react");
18
- var _excluded = ["backgroundColor", "className", "kind", "icon", "initials", "image", "imageDescription", "size", "theme", "tooltipText"];
18
+ var _excluded = ["backgroundColor", "className", "kind", "icon", "initials", "image", "imageDescription", "size", "theme", "tooltipText", "tooltipAlignment"];
19
19
  /**
20
20
  * Copyright IBM Corp. 2021, 2021
21
21
  *
@@ -31,6 +31,10 @@ var componentName = 'UserProfileImage';
31
31
 
32
32
  // NOTE: the component SCSS is not imported here: it is rolled up separately.
33
33
 
34
+ // Default values for props
35
+ var defaults = {
36
+ tooltipAlignment: 'bottom'
37
+ };
34
38
  /**
35
39
  * This is a user profile image component which displays an image, or initials or icon for a user.
36
40
  */
@@ -45,6 +49,8 @@ var UserProfileImage = /*#__PURE__*/_react.default.forwardRef(function (_ref, re
45
49
  size = _ref.size,
46
50
  theme = _ref.theme,
47
51
  tooltipText = _ref.tooltipText,
52
+ _ref$tooltipAlignment = _ref.tooltipAlignment,
53
+ tooltipAlignment = _ref$tooltipAlignment === void 0 ? defaults.tooltipAlignment : _ref$tooltipAlignment,
48
54
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
49
55
  var icons = {
50
56
  user: {
@@ -124,7 +130,8 @@ var UserProfileImage = /*#__PURE__*/_react.default.forwardRef(function (_ref, re
124
130
  return FillItem && (tooltipText ? /*#__PURE__*/_react.default.createElement(_react2.IconButton, {
125
131
  label: tooltipText,
126
132
  className: "".concat(blockClass, "__tooltip"),
127
- kind: "ghost"
133
+ kind: "ghost",
134
+ align: tooltipAlignment
128
135
  }, renderUserProfileImage()) : renderUserProfileImage());
129
136
  });
130
137
 
@@ -173,6 +180,10 @@ UserProfileImage.propTypes = {
173
180
  * Set theme in which the component will be rendered
174
181
  */
175
182
  theme: _propTypes.default.oneOf(['light', 'dark']).isRequired,
183
+ /**
184
+ * Specify how the trigger should align with the tooltip
185
+ */
186
+ tooltipAlignment: _propTypes.default.oneOf(['top', 'top-left', 'top-right', 'bottom', 'bottom-left', 'bottom-right', 'left', 'right']),
176
187
  /**
177
188
  * Pass in the display name to have it shown on hover
178
189
  */