@carbon/ibm-products 1.62.0 → 1.63.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. package/css/index-full-carbon.css +24 -2
  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 +19 -0
  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 +24 -2
  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 +24 -2
  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/Carousel/Carousel.js +194 -119
  18. package/es/components/Carousel/CarouselItem.js +8 -21
  19. package/es/components/CoachmarkOverlayElements/CoachmarkOverlayElements.js +6 -7
  20. package/es/components/Datagrid/Datagrid/DatagridExpandedRow.js +3 -1
  21. package/es/components/Datagrid/Datagrid/DatagridHeaderRow.js +1 -0
  22. package/es/components/Datagrid/Datagrid/DatagridRow.js +19 -10
  23. package/es/components/Datagrid/Datagrid/DatagridSelectAll.js +19 -1
  24. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +15 -1
  25. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +4 -3
  26. package/es/components/Datagrid/Datagrid/addons/stateReducer.js +67 -24
  27. package/es/components/Datagrid/useExpandedRow.js +3 -6
  28. package/es/components/Datagrid/useFocusRowExpander.js +40 -0
  29. package/es/components/Datagrid/useNestedRowExpander.js +9 -0
  30. package/es/components/Datagrid/useNestedRows.js +0 -4
  31. package/es/components/Datagrid/useRowExpander.js +9 -0
  32. package/es/components/Datagrid/useSelectRows.js +23 -11
  33. package/es/components/Datagrid/utils/handleFilterTagLabelText.js +26 -0
  34. package/es/components/FilterSummary/FilterSummary.js +21 -7
  35. package/es/components/Guidebanner/Guidebanner.js +9 -12
  36. package/es/components/TagSet/TagSet.js +22 -5
  37. package/es/global/js/package-settings.js +0 -2
  38. package/lib/components/Carousel/Carousel.js +190 -114
  39. package/lib/components/Carousel/CarouselItem.js +9 -25
  40. package/lib/components/CoachmarkOverlayElements/CoachmarkOverlayElements.js +6 -7
  41. package/lib/components/Datagrid/Datagrid/DatagridExpandedRow.js +3 -1
  42. package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +1 -0
  43. package/lib/components/Datagrid/Datagrid/DatagridRow.js +13 -3
  44. package/lib/components/Datagrid/Datagrid/DatagridSelectAll.js +19 -1
  45. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +15 -1
  46. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +4 -3
  47. package/lib/components/Datagrid/Datagrid/addons/stateReducer.js +70 -26
  48. package/lib/components/Datagrid/useExpandedRow.js +2 -5
  49. package/lib/components/Datagrid/useFocusRowExpander.js +46 -0
  50. package/lib/components/Datagrid/useNestedRowExpander.js +9 -0
  51. package/lib/components/Datagrid/useNestedRows.js +0 -4
  52. package/lib/components/Datagrid/useRowExpander.js +9 -0
  53. package/lib/components/Datagrid/useSelectRows.js +17 -4
  54. package/lib/components/Datagrid/utils/handleFilterTagLabelText.js +33 -0
  55. package/lib/components/FilterSummary/FilterSummary.js +23 -6
  56. package/lib/components/Guidebanner/Guidebanner.js +9 -12
  57. package/lib/components/TagSet/TagSet.js +21 -4
  58. package/lib/global/js/package-settings.js +0 -2
  59. package/package.json +3 -3
  60. package/scss/components/Carousel/_carousel.scss +1 -2
  61. package/scss/components/Datagrid/styles/_useExpandedRow.scss +21 -0
  62. package/scss/components/Datagrid/styles/addons/_RowSizeDropdown.scss +9 -0
  63. package/scss/components/FilterSummary/_filter-summary.scss +6 -1
  64. package/es/components/Carousel/utils.js +0 -98
  65. package/lib/components/Carousel/utils.js +0 -108
@@ -35,7 +35,9 @@ var DatagridRow = function DatagridRow(datagridState) {
35
35
  rowSize = datagridState.rowSize,
36
36
  withNestedRows = datagridState.withNestedRows,
37
37
  prepareRow = datagridState.prepareRow,
38
- key = datagridState.key;
38
+ key = datagridState.key,
39
+ tableId = datagridState.tableId,
40
+ withExpandedRows = datagridState.withExpandedRows;
39
41
  var getVisibleNestedRowCount = function getVisibleNestedRowCount(_ref) {
40
42
  var isExpanded = _ref.isExpanded,
41
43
  subRows = _ref.subRows;
@@ -64,7 +66,7 @@ var DatagridRow = function DatagridRow(datagridState) {
64
66
  hoverRow === null || hoverRow === void 0 ? void 0 : (_hoverRow$style3 = hoverRow.style) === null || _hoverRow$style3 === void 0 ? void 0 : _hoverRow$style3.setProperty("--".concat(blockClass, "--indicator-offset-amount"), (0, _layout.px)((rowExpanderButton === null || rowExpanderButton === void 0 ? void 0 : rowExpanderButton.offsetLeft) || 0));
65
67
  };
66
68
  var focusRemover = function focusRemover() {
67
- var elements = document.querySelectorAll(".".concat(blockClass, "__carbon-row-expanded"));
69
+ var elements = document.querySelectorAll("#".concat(tableId, " .").concat(blockClass, "__carbon-row-expanded"));
68
70
  elements.forEach(function (el) {
69
71
  el.classList.remove("".concat(blockClass, "__carbon-row-expanded-hover-active"));
70
72
  });
@@ -93,6 +95,14 @@ var DatagridRow = function DatagridRow(datagridState) {
93
95
  }
94
96
  };
95
97
  var rowClassNames = (0, _classnames.default)("".concat(blockClass, "__carbon-row"), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__carbon-row-expanded"), row.isExpanded), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__carbon-row-expandable"), row.canExpand), (0, _defineProperty2.default)(_cx, "".concat(_settings.carbon.prefix, "--data-table--selected"), row.isSelected), _cx));
98
+ var setAdditionalRowProps = function setAdditionalRowProps() {
99
+ if (withNestedRows || withExpandedRows) {
100
+ return {
101
+ 'data-nested-row-id': row.id
102
+ };
103
+ }
104
+ return {};
105
+ };
96
106
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
97
107
  key: key
98
108
  }, /*#__PURE__*/_react.default.createElement(TableRow, (0, _extends2.default)({
@@ -106,7 +116,7 @@ var DatagridRow = function DatagridRow(datagridState) {
106
116
  onFocus: hoverHandler,
107
117
  onBlur: focusRemover,
108
118
  onKeyUp: handleOnKeyUp
109
- }), row.cells.map(function (cell, index) {
119
+ }, setAdditionalRowProps()), row.cells.map(function (cell, index) {
110
120
  var _cell$column;
111
121
  var cellProps = cell.getCellProps({
112
122
  role: false
@@ -14,6 +14,7 @@ var _react = _interopRequireWildcard(require("react"));
14
14
  var _carbonComponentsReact = require("carbon-components-react");
15
15
  var _classnames = _interopRequireDefault(require("classnames"));
16
16
  var _settings = require("../../../settings");
17
+ var _stateReducer = require("./addons/stateReducer");
17
18
  var _excluded = ["onChange"];
18
19
  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
20
  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; }
@@ -42,7 +43,11 @@ var SelectAll = function SelectAll(datagridState) {
42
43
  DatagridPagination = datagridState.DatagridPagination,
43
44
  radio = datagridState.radio,
44
45
  columns = datagridState.columns,
45
- withStickyColumn = datagridState.withStickyColumn;
46
+ withStickyColumn = datagridState.withStickyColumn,
47
+ dispatch = datagridState.dispatch,
48
+ rows = datagridState.rows,
49
+ getRowId = datagridState.getRowId,
50
+ toggleAllRowsSelected = datagridState.toggleAllRowsSelected;
46
51
  var isFirstColumnStickyLeft = ((_columns$ = columns[0]) === null || _columns$ === void 0 ? void 0 : _columns$.sticky) === 'left' && withStickyColumn;
47
52
  if (hideSelectAll || radio) {
48
53
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -57,12 +62,25 @@ var SelectAll = function SelectAll(datagridState) {
57
62
  var indeterminate = selectProps.indeterminate;
58
63
  var handleSelectAllChange = function handleSelectAllChange(event) {
59
64
  if (indeterminate) {
65
+ (0, _stateReducer.handleSelectAllRowData)({
66
+ dispatch: dispatch,
67
+ rows: rows,
68
+ getRowId: getRowId,
69
+ indeterminate: true
70
+ });
71
+ toggleAllRowsSelected(false);
60
72
  return onChange === null || onChange === void 0 ? void 0 : onChange({
61
73
  target: {
62
74
  checked: false
63
75
  }
64
76
  });
65
77
  }
78
+ (0, _stateReducer.handleSelectAllRowData)({
79
+ dispatch: dispatch,
80
+ rows: rows,
81
+ getRowId: getRowId,
82
+ isChecked: event.target.checked
83
+ });
66
84
  return onChange === null || onChange === void 0 ? void 0 : onChange(event);
67
85
  };
68
86
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -15,6 +15,7 @@ var _useResizeObserver2 = require("../../../global/js/hooks/useResizeObserver");
15
15
  var _ButtonMenu = require("../../ButtonMenu");
16
16
  var _settings = require("../../../settings");
17
17
  var _classnames = _interopRequireDefault(require("classnames"));
18
+ var _stateReducer = require("./addons/stateReducer");
18
19
  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
20
  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; }
20
21
  /**
@@ -45,8 +46,11 @@ var DatagridBatchActionsToolbar = function DatagridBatchActionsToolbar(datagridS
45
46
  toggleAllRowsSelected = datagridState.toggleAllRowsSelected,
46
47
  toolbarBatchActions = datagridState.toolbarBatchActions,
47
48
  setGlobalFilter = datagridState.setGlobalFilter,
49
+ dispatch = datagridState.dispatch,
50
+ getRowId = datagridState.getRowId,
48
51
  batchActionMenuButtonLabel = datagridState.batchActionMenuButtonLabel,
49
- translateWithIdBatchActions = datagridState.translateWithIdBatchActions;
52
+ translateWithIdBatchActions = datagridState.translateWithIdBatchActions,
53
+ rows = datagridState.rows;
50
54
  var batchActionMenuButtonLabelText = batchActionMenuButtonLabel !== null && batchActionMenuButtonLabel !== void 0 ? batchActionMenuButtonLabel : 'More';
51
55
  var selectedKeys = Object.keys(selectedRowIds || {});
52
56
  var totalSelected = selectedKeys.length;
@@ -94,6 +98,11 @@ var DatagridBatchActionsToolbar = function DatagridBatchActionsToolbar(datagridS
94
98
  batchAction.onClick();
95
99
  if (batchAction.type === 'select_all') {
96
100
  toggleAllRowsSelected(true);
101
+ (0, _stateReducer.handleSelectAllRowData)({
102
+ dispatch: dispatch,
103
+ rows: rows,
104
+ getRowId: getRowId
105
+ });
97
106
  }
98
107
  }
99
108
  });
@@ -121,6 +130,11 @@ var DatagridBatchActionsToolbar = function DatagridBatchActionsToolbar(datagridS
121
130
  batchAction.onClick();
122
131
  if (batchAction.type === 'select_all') {
123
132
  toggleAllRowsSelected(true);
133
+ (0, _stateReducer.handleSelectAllRowData)({
134
+ dispatch: dispatch,
135
+ rows: rows,
136
+ getRowId: getRowId
137
+ });
124
138
  }
125
139
  },
126
140
  iconDescription: batchAction.label
@@ -53,7 +53,7 @@ var useFilters = function useFilters(_ref) {
53
53
  /** Methods */
54
54
  // If the user decides to cancel or click outside the flyout, it reverts back to the filters that were
55
55
  // there when they opened the flyout
56
- var revertToPreviousFilters = function revertToPreviousFilters() {
56
+ var revertToPreviousFilters = (0, _react.useCallback)(function () {
57
57
  setFiltersState(JSON.parse(prevFiltersRef.current));
58
58
  setFiltersObjectArray(JSON.parse(prevFiltersObjectArrayRef.current));
59
59
  setAllFilters(JSON.parse(lastAppliedFilters.current));
@@ -63,7 +63,7 @@ var useFilters = function useFilters(_ref) {
63
63
  holdingPrevFiltersRef.current = JSON.parse(prevFiltersRef.current);
64
64
  holdingLastAppliedFiltersRef.current = JSON.parse(prevFiltersObjectArrayRef.current);
65
65
  holdingPrevFiltersObjectArrayRef.current = JSON.parse(lastAppliedFilters.current);
66
- };
66
+ }, [setAllFilters]);
67
67
  var reset = (0, _react.useCallback)(function () {
68
68
  // When we reset we want the "initialFilters" to be an empty array
69
69
  var resetFiltersArray = [];
@@ -317,6 +317,7 @@ var useFilters = function useFilters(_ref) {
317
317
  */
318
318
  (0, _react.useEffect)(function () {
319
319
  if (!panelOpen && previousState !== null && previousState !== void 0 && previousState.panelOpen) {
320
+ revertToPreviousFilters();
320
321
  setAllFilters(holdingLastAppliedFiltersRef.current);
321
322
  }
322
323
  if (panelOpen && !(previousState !== null && previousState !== void 0 && previousState.panelOpen)) {
@@ -326,7 +327,7 @@ var useFilters = function useFilters(_ref) {
326
327
  setAllFilters(JSON.parse(prevFiltersObjectArrayRef.current));
327
328
  }
328
329
  }
329
- }, [panelOpen, previousState, previousState === null || previousState === void 0 ? void 0 : previousState.panelOpen, reset, setAllFilters]);
330
+ }, [panelOpen, previousState, previousState === null || previousState === void 0 ? void 0 : previousState.panelOpen, reset, setAllFilters, revertToPreviousFilters]);
330
331
  var cancel = function cancel() {
331
332
  // Reverting to previous filters only applies when using batch actions
332
333
  if (updateMethod === _constants.BATCH) {
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.stateReducer = exports.handleToggleRowSelected = exports.handleColumnResizingEvent = exports.handleColumnResizeEndEvent = void 0;
7
+ exports.stateReducer = exports.handleToggleRowSelected = exports.handleSelectAllRowData = exports.handleColumnResizingEvent = exports.handleColumnResizeEndEvent = void 0;
8
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
@@ -16,6 +16,7 @@ var COLUMN_RESIZING = 'columnResizing';
16
16
  var COLUMN_RESIZE_END = 'columnDoneResizing';
17
17
  var INIT = 'init';
18
18
  var TOGGLE_ROW_SELECTED = 'toggleRowSelected';
19
+ var TOGGLE_ALL_ROWS_SELECTED = 'toggleAllRowsSelected';
19
20
  var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
20
21
  var handleColumnResizeEndEvent = function handleColumnResizeEndEvent(dispatch, onColResizeEnd, headerId, isKeyEvent) {
21
22
  dispatch({
@@ -49,36 +50,79 @@ var handleColumnResizingEvent = function handleColumnResizingEvent(dispatch, hea
49
50
  });
50
51
  };
51
52
  exports.handleColumnResizingEvent = handleColumnResizingEvent;
52
- var handleToggleRowSelected = function handleToggleRowSelected(dispatch, rowData, isChecked) {
53
+ var handleToggleRowSelected = function handleToggleRowSelected(_ref) {
54
+ var dispatch = _ref.dispatch,
55
+ rowData = _ref.rowData,
56
+ isChecked = _ref.isChecked,
57
+ getRowId = _ref.getRowId,
58
+ selectAll = _ref.selectAll;
53
59
  return dispatch({
54
60
  type: TOGGLE_ROW_SELECTED,
55
61
  payload: {
56
62
  rowData: rowData,
57
- isChecked: isChecked
63
+ isChecked: isChecked,
64
+ getRowId: getRowId,
65
+ selectAll: selectAll
58
66
  }
59
67
  });
60
68
  };
61
69
  exports.handleToggleRowSelected = handleToggleRowSelected;
70
+ var handleSelectAllRowData = function handleSelectAllRowData(_ref2) {
71
+ var dispatch = _ref2.dispatch,
72
+ rows = _ref2.rows,
73
+ getRowId = _ref2.getRowId,
74
+ indeterminate = _ref2.indeterminate,
75
+ isChecked = _ref2.isChecked;
76
+ return dispatch({
77
+ type: TOGGLE_ALL_ROWS_SELECTED,
78
+ payload: {
79
+ rows: rows,
80
+ getRowId: getRowId,
81
+ indeterminate: indeterminate,
82
+ isChecked: isChecked
83
+ }
84
+ });
85
+ };
86
+ exports.handleSelectAllRowData = handleSelectAllRowData;
62
87
  var stateReducer = function stateReducer(newState, action) {
63
88
  switch (action.type) {
89
+ case TOGGLE_ALL_ROWS_SELECTED:
90
+ {
91
+ var _ref3 = action.payload || {},
92
+ rows = _ref3.rows,
93
+ getRowId = _ref3.getRowId,
94
+ indeterminate = _ref3.indeterminate,
95
+ isChecked = _ref3.isChecked;
96
+ if (rows) {
97
+ var newSelectedRowData = {};
98
+ rows.forEach(function (row) {
99
+ newSelectedRowData[getRowId(row, row.index)] = row;
100
+ });
101
+ return _objectSpread(_objectSpread({}, newState), {}, {
102
+ selectedRowData: indeterminate || !isChecked ? {} : newSelectedRowData
103
+ });
104
+ }
105
+ return _objectSpread({}, newState);
106
+ }
64
107
  case TOGGLE_ROW_SELECTED:
65
108
  {
66
- var _ref = action.payload || {},
67
- rowData = _ref.rowData,
68
- isChecked = _ref.isChecked;
109
+ var _ref4 = action.payload || {},
110
+ rowData = _ref4.rowData,
111
+ _isChecked = _ref4.isChecked,
112
+ _getRowId = _ref4.getRowId;
69
113
  if (!rowData) {
70
114
  return;
71
115
  }
72
- if (isChecked) {
116
+ if (_isChecked) {
73
117
  return _objectSpread(_objectSpread({}, newState), {}, {
74
- selectedRowData: _objectSpread(_objectSpread({}, newState.selectedRowData), {}, (0, _defineProperty2.default)({}, rowData.index, rowData))
118
+ selectedRowData: _objectSpread(_objectSpread({}, newState.selectedRowData), {}, (0, _defineProperty2.default)({}, _getRowId(rowData, rowData.index), rowData))
75
119
  });
76
120
  }
77
- if (rowData && !isChecked) {
121
+ if (rowData && !_isChecked) {
78
122
  var newData = _objectSpread({}, newState.selectedRowData);
79
- var dataWithRemovedRow = Object.fromEntries(Object.entries(newData).filter(function (_ref2) {
80
- var _ref3 = (0, _slicedToArray2.default)(_ref2, 1),
81
- key = _ref3[0];
123
+ var dataWithRemovedRow = Object.fromEntries(Object.entries(newData).filter(function (_ref5) {
124
+ var _ref6 = (0, _slicedToArray2.default)(_ref5, 1),
125
+ key = _ref6[0];
82
126
  return parseInt(key) !== parseInt(rowData.index);
83
127
  }));
84
128
  return _objectSpread(_objectSpread({}, newState), {}, {
@@ -95,27 +139,27 @@ var stateReducer = function stateReducer(newState, action) {
95
139
  }
96
140
  case COLUMN_RESIZE_START:
97
141
  {
98
- var _ref4 = action.payload || {},
99
- headerId = _ref4.headerId;
142
+ var _ref7 = action.payload || {},
143
+ headerId = _ref7.headerId;
100
144
  return _objectSpread(_objectSpread({}, newState), {}, {
101
145
  isResizing: headerId
102
146
  });
103
147
  }
104
148
  case COLUMN_RESIZING:
105
149
  {
106
- var _ref5 = action.payload || {},
107
- _headerId = _ref5.headerId,
108
- newWidth = _ref5.newWidth,
109
- defaultWidth = _ref5.defaultWidth;
150
+ var _ref8 = action.payload || {},
151
+ _headerId = _ref8.headerId,
152
+ newWidth = _ref8.newWidth,
153
+ defaultWidth = _ref8.defaultWidth;
110
154
  var newColumnWidth = {};
111
155
  if (typeof _headerId === 'undefined') {
112
156
  return _objectSpread({}, newState);
113
157
  }
114
158
  newColumnWidth[_headerId] = newWidth;
115
- var cleanedWidths = Object.fromEntries(Object.entries(newState.columnResizing.columnWidths).filter(function (_ref6) {
116
- var _ref7 = (0, _slicedToArray2.default)(_ref6, 2),
117
- _ = _ref7[0],
118
- value = _ref7[1];
159
+ var cleanedWidths = Object.fromEntries(Object.entries(newState.columnResizing.columnWidths).filter(function (_ref9) {
160
+ var _ref10 = (0, _slicedToArray2.default)(_ref9, 2),
161
+ _ = _ref10[0],
162
+ value = _ref10[1];
119
163
  return !isNaN(value);
120
164
  }));
121
165
  var headerIdArray = newState.columnResizing.headerIdWidths || [];
@@ -130,10 +174,10 @@ var stateReducer = function stateReducer(newState, action) {
130
174
  }
131
175
  case COLUMN_RESIZE_END:
132
176
  {
133
- var _ref8 = action.payload || {},
134
- onColResizeEnd = _ref8.onColResizeEnd,
135
- _headerId2 = _ref8.headerId,
136
- isKeyEvent = _ref8.isKeyEvent;
177
+ var _ref11 = action.payload || {},
178
+ onColResizeEnd = _ref11.onColResizeEnd,
179
+ _headerId2 = _ref11.headerId,
180
+ isKeyEvent = _ref11.isKeyEvent;
137
181
  var currentColumn = {};
138
182
  currentColumn[_headerId2] = newState.columnResizing.columnWidths[_headerId2];
139
183
  var allChangedColumns = newState.columnResizing.columnWidths;
@@ -8,15 +8,11 @@ exports.default = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
10
  var _react = require("react");
11
- var _settings = require("../../settings");
12
11
  var _DatagridExpandedRow = _interopRequireDefault(require("./Datagrid/DatagridExpandedRow"));
13
12
  var _useRowExpander = _interopRequireDefault(require("./useRowExpander"));
14
13
  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; }
15
14
  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) { (0, _defineProperty2.default)(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; }
16
15
  var useExpandedRow = function useExpandedRow(hooks) {
17
- (0, _react.useEffect)(function () {
18
- _settings.pkg.checkReportFeatureEnabled('Datagrid.useExpandedRow');
19
- }, []);
20
16
  (0, _useRowExpander.default)(hooks);
21
17
  var useInstance = function useInstance(instance) {
22
18
  var rows = instance.rows,
@@ -38,7 +34,8 @@ var useExpandedRow = function useExpandedRow(hooks) {
38
34
  });
39
35
  Object.assign(instance, {
40
36
  rows: rowsWithExpand,
41
- setExpandedRowHeight: setExpandedRowHeight
37
+ setExpandedRowHeight: setExpandedRowHeight,
38
+ withExpandedRows: true
42
39
  });
43
40
  };
44
41
  hooks.useInstance.push(useInstance);
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useFocusRowExpander = void 0;
7
+ var _react = require("react");
8
+ /**
9
+ * Copyright IBM Corp. 2023, 2023
10
+ *
11
+ * This source code is licensed under the Apache-2.0 license found in the
12
+ * LICENSE file in the root directory of this source tree.
13
+ */
14
+
15
+ // Focuses the row expander after a nested/expandable row state change.
16
+ // We have to add this workaround because react-table is re-rendering the entire row
17
+ // which removes the focus from the expander and interrupts the keyboard navigation
18
+ // flow.
19
+ var useFocusRowExpander = function useFocusRowExpander(_ref) {
20
+ var instance = _ref.instance,
21
+ _ref$lastExpandedRowI = _ref.lastExpandedRowIndex,
22
+ lastExpandedRowIndex = _ref$lastExpandedRowI === void 0 ? 0 : _ref$lastExpandedRowI,
23
+ blockClass = _ref.blockClass,
24
+ activeElement = _ref.activeElement;
25
+ (0, _react.useEffect)(function () {
26
+ // We need to return at this point so that the focus is not stolen from
27
+ // other interactive elements in the Datagrid
28
+ if (!activeElement.classList.contains("".concat(blockClass, "__row-expander"))) {
29
+ return;
30
+ }
31
+ var tableId = instance === null || instance === void 0 ? void 0 : instance.tableId;
32
+ var rowElements = document.querySelectorAll("#".concat(tableId, " tbody tr"));
33
+ var rowElementsArray = Array.from(rowElements);
34
+ var activeRow = rowElementsArray.filter(function (r) {
35
+ if (r.getAttribute('data-nested-row-id') === lastExpandedRowIndex) {
36
+ return r;
37
+ }
38
+ return null;
39
+ });
40
+ if (activeRow.length) {
41
+ var rowExpander = activeRow[0].querySelector(".".concat(blockClass, "__row-expander"));
42
+ rowExpander.focus();
43
+ }
44
+ }, [instance === null || instance === void 0 ? void 0 : instance.tableId, instance === null || instance === void 0 ? void 0 : instance.expandedRows, lastExpandedRowIndex, blockClass, activeElement]);
45
+ };
46
+ exports.useFocusRowExpander = useFocusRowExpander;
@@ -13,6 +13,7 @@ var _react = _interopRequireWildcard(require("react"));
13
13
  var _iconsReact = require("@carbon/icons-react");
14
14
  var _classnames = _interopRequireDefault(require("classnames"));
15
15
  var _settings = require("../../settings");
16
+ var _useFocusRowExpander = require("./useFocusRowExpander");
16
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); }
17
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; }
18
19
  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; }
@@ -20,9 +21,16 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
20
21
  var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
21
22
  var useNestedRowExpander = function useNestedRowExpander(hooks) {
22
23
  var tempState = (0, _react.useRef)();
24
+ var lastExpandedRowIndex = (0, _react.useRef)();
23
25
  var useInstance = function useInstance(instance) {
24
26
  tempState.current = instance;
25
27
  };
28
+ (0, _useFocusRowExpander.useFocusRowExpander)({
29
+ instance: tempState === null || tempState === void 0 ? void 0 : tempState.current,
30
+ lastExpandedRowIndex: lastExpandedRowIndex === null || lastExpandedRowIndex === void 0 ? void 0 : lastExpandedRowIndex.current,
31
+ blockClass: blockClass,
32
+ activeElement: document.activeElement
33
+ });
26
34
  var visibleColumns = function visibleColumns(columns) {
27
35
  var expanderColumn = {
28
36
  id: 'expander',
@@ -34,6 +42,7 @@ var useNestedRowExpander = function useNestedRowExpander(hooks) {
34
42
  // Prevents `onRowClick` from being called if `useOnRowClick` is included
35
43
  event.stopPropagation();
36
44
  row.toggleRowExpanded();
45
+ lastExpandedRowIndex.current = row.id;
37
46
  }
38
47
  });
39
48
  var _ref2 = (tempState === null || tempState === void 0 ? void 0 : tempState.current) || {},
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
- var _react = require("react");
10
9
  var _settings = require("../../settings");
11
10
  var _classnames = _interopRequireDefault(require("classnames"));
12
11
  var _useNestedRowExpander = _interopRequireDefault(require("./useNestedRowExpander"));
@@ -19,9 +18,6 @@ var _useNestedRowExpander = _interopRequireDefault(require("./useNestedRowExpand
19
18
 
20
19
  var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
21
20
  var useNestedRows = function useNestedRows(hooks) {
22
- (0, _react.useEffect)(function () {
23
- _settings.pkg.checkReportFeatureEnabled('Datagrid.useNestedRows');
24
- }, []);
25
21
  (0, _useNestedRowExpander.default)(hooks);
26
22
  var marginLeft = 24;
27
23
  var getRowProps = function getRowProps(props, _ref) {
@@ -13,6 +13,7 @@ var _react = _interopRequireWildcard(require("react"));
13
13
  var _iconsReact = require("@carbon/icons-react");
14
14
  var _classnames = _interopRequireDefault(require("classnames"));
15
15
  var _settings = require("../../settings");
16
+ var _useFocusRowExpander = require("./useFocusRowExpander");
16
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); }
17
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; }
18
19
  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; }
@@ -20,9 +21,16 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
20
21
  var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
21
22
  var useRowExpander = function useRowExpander(hooks) {
22
23
  var tempState = (0, _react.useRef)();
24
+ var lastExpandedRowIndex = (0, _react.useRef)();
23
25
  var useInstance = function useInstance(instance) {
24
26
  tempState.current = instance;
25
27
  };
28
+ (0, _useFocusRowExpander.useFocusRowExpander)({
29
+ instance: tempState === null || tempState === void 0 ? void 0 : tempState.current,
30
+ lastExpandedRowIndex: lastExpandedRowIndex === null || lastExpandedRowIndex === void 0 ? void 0 : lastExpandedRowIndex.current,
31
+ blockClass: blockClass,
32
+ activeElement: document.activeElement
33
+ });
26
34
  var visibleColumns = function visibleColumns(columns) {
27
35
  var expanderColumn = {
28
36
  id: 'expander',
@@ -33,6 +41,7 @@ var useRowExpander = function useRowExpander(hooks) {
33
41
  // Prevents `onRowClick` from being called if `useOnRowClick` is included
34
42
  event.stopPropagation();
35
43
  row.toggleRowExpanded();
44
+ lastExpandedRowIndex.current = row.id;
36
45
  }
37
46
  });
38
47
  var _ref2 = (tempState === null || tempState === void 0 ? void 0 : tempState.current) || {},
@@ -45,7 +45,14 @@ var useSelectRows = function useSelectRows(hooks) {
45
45
  });
46
46
  });
47
47
  hooks.visibleColumns.push(function (columns) {
48
- return [{
48
+ // Ensures that the first column is the row expander in the
49
+ // case of selected rows and expandable rows being used together
50
+ var newColOrder = (0, _toConsumableArray2.default)(columns);
51
+ var expanderColumnIndex = newColOrder.findIndex(function (col) {
52
+ return col.id === 'expander';
53
+ });
54
+ var expanderCol = expanderColumnIndex > -1 ? newColOrder.splice(expanderColumnIndex, 1) : [];
55
+ return [].concat((0, _toConsumableArray2.default)(expanderColumnIndex > -1 && expanderCol && expanderCol.length ? expanderCol : []), [{
49
56
  id: _commonColumnIds.selectionColumnId,
50
57
  Header: function Header(gridState) {
51
58
  return /*#__PURE__*/_react.default.createElement(_DatagridSelectAll.SelectAll, gridState);
@@ -53,7 +60,7 @@ var useSelectRows = function useSelectRows(hooks) {
53
60
  Cell: function Cell(gridState) {
54
61
  return /*#__PURE__*/_react.default.createElement(SelectRow, gridState);
55
62
  }
56
- }].concat((0, _toConsumableArray2.default)(columns));
63
+ }], (0, _toConsumableArray2.default)(newColOrder));
57
64
  });
58
65
  };
59
66
  var useHighlightSelection = function useHighlightSelection(hooks) {
@@ -81,7 +88,8 @@ var SelectRow = function SelectRow(datagridState) {
81
88
  onRowSelect = datagridState.onRowSelect,
82
89
  columns = datagridState.columns,
83
90
  withStickyColumn = datagridState.withStickyColumn,
84
- dispatch = datagridState.dispatch;
91
+ dispatch = datagridState.dispatch,
92
+ getRowId = datagridState.getRowId;
85
93
  var _useState = (0, _react.useState)(window.innerWidth),
86
94
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
87
95
  windowSize = _useState2[0],
@@ -112,7 +120,12 @@ var SelectRow = function SelectRow(datagridState) {
112
120
  }
113
121
  onChange(event);
114
122
  onRowSelect === null || onRowSelect === void 0 ? void 0 : onRowSelect(row, event);
115
- (0, _stateReducer.handleToggleRowSelected)(dispatch, row, event.target.checked);
123
+ (0, _stateReducer.handleToggleRowSelected)({
124
+ dispatch: dispatch,
125
+ rowData: row,
126
+ isChecked: event.target.checked,
127
+ getRowId: getRowId
128
+ });
116
129
  };
117
130
  var rowId = "".concat(tableId, "-").concat(row.index);
118
131
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TableSelectRow, (0, _extends2.default)({}, cellProps, selectProps, {
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.handleFilterTagLabelText = void 0;
7
+ /**
8
+ * Copyright IBM Corp. 2023, 2023
9
+ *
10
+ * This source code is licensed under the Apache-2.0 license found in the
11
+ * LICENSE file in the root directory of this source tree.
12
+ */
13
+
14
+ // Example usage for custom filter tag labels, in practice this
15
+ // is where a translation service would be utilized. This
16
+ // utility is for storybook demonstration purposes only.
17
+ var handleFilterTagLabelText = function handleFilterTagLabelText(key, value) {
18
+ switch (key) {
19
+ case 'role':
20
+ return "Role: ".concat(value);
21
+ case 'joined':
22
+ return "Joined: ".concat(value);
23
+ case 'visits':
24
+ return "Visits: ".concat(value);
25
+ case 'passwordStrength':
26
+ return "Password strength: ".concat(value);
27
+ case 'status':
28
+ return "Status: ".concat(value);
29
+ default:
30
+ return "".concat(key, ": ").concat(value);
31
+ }
32
+ };
33
+ exports.handleFilterTagLabelText = handleFilterTagLabelText;