@carbon/ibm-products 1.62.0 → 1.62.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. package/css/index-full-carbon.css +16 -2
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +2 -2
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +15 -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 +16 -2
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +2 -2
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +16 -2
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +2 -2
  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/stateReducer.js +67 -24
  26. package/es/components/Datagrid/useExpandedRow.js +3 -6
  27. package/es/components/Datagrid/useFocusRowExpander.js +40 -0
  28. package/es/components/Datagrid/useNestedRowExpander.js +9 -0
  29. package/es/components/Datagrid/useNestedRows.js +0 -4
  30. package/es/components/Datagrid/useRowExpander.js +9 -0
  31. package/es/components/Datagrid/useSelectRows.js +23 -11
  32. package/es/components/Guidebanner/Guidebanner.js +9 -12
  33. package/es/global/js/package-settings.js +0 -2
  34. package/lib/components/Carousel/Carousel.js +190 -114
  35. package/lib/components/Carousel/CarouselItem.js +9 -25
  36. package/lib/components/CoachmarkOverlayElements/CoachmarkOverlayElements.js +6 -7
  37. package/lib/components/Datagrid/Datagrid/DatagridExpandedRow.js +3 -1
  38. package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +1 -0
  39. package/lib/components/Datagrid/Datagrid/DatagridRow.js +13 -3
  40. package/lib/components/Datagrid/Datagrid/DatagridSelectAll.js +19 -1
  41. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +15 -1
  42. package/lib/components/Datagrid/Datagrid/addons/stateReducer.js +70 -26
  43. package/lib/components/Datagrid/useExpandedRow.js +2 -5
  44. package/lib/components/Datagrid/useFocusRowExpander.js +46 -0
  45. package/lib/components/Datagrid/useNestedRowExpander.js +9 -0
  46. package/lib/components/Datagrid/useNestedRows.js +0 -4
  47. package/lib/components/Datagrid/useRowExpander.js +9 -0
  48. package/lib/components/Datagrid/useSelectRows.js +17 -4
  49. package/lib/components/Guidebanner/Guidebanner.js +9 -12
  50. package/lib/global/js/package-settings.js +0 -2
  51. package/package.json +2 -2
  52. package/scss/components/Carousel/_carousel.scss +1 -2
  53. package/scss/components/Datagrid/styles/_useExpandedRow.scss +21 -0
  54. package/scss/components/Datagrid/styles/addons/_RowSizeDropdown.scss +9 -0
  55. package/es/components/Carousel/utils.js +0 -98
  56. package/lib/components/Carousel/utils.js +0 -108
@@ -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
@@ -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, {
@@ -73,9 +73,6 @@ var Guidebanner = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
73
73
  _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
74
74
  isCollapsed = _useState6[0],
75
75
  setIsCollapsed = _useState6[1];
76
- var handleScrollableChange = function handleScrollableChange(value) {
77
- setShowNavigation(value);
78
- };
79
76
  var handleClickToggle = function handleClickToggle() {
80
77
  setScrollPosition(0);
81
78
  scrollRef.current.scrollToView(0);
@@ -100,9 +97,13 @@ var Guidebanner = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
100
97
  left: _colors.blue90,
101
98
  right: _colors.purple70
102
99
  },
103
- ref: scrollRef,
104
- scrollableChange: handleScrollableChange,
105
- scrollTune: -450
100
+ onChangeIsScrollable: function onChangeIsScrollable(value) {
101
+ setShowNavigation(value);
102
+ },
103
+ onScroll: function onScroll(scrollPercent) {
104
+ setScrollPosition(scrollPercent);
105
+ },
106
+ ref: scrollRef
106
107
  }, children), /*#__PURE__*/_react.default.createElement("div", {
107
108
  className: (0, _classnames.default)([collapsible || showNavigation ? "".concat(blockClass, "__navigation") : null])
108
109
  }, collapsible && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
@@ -121,9 +122,7 @@ var Guidebanner = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
121
122
  tooltipPosition: "top",
122
123
  iconDescription: previousIconDescription,
123
124
  onClick: function onClick() {
124
- scrollRef.current.scrollPrev().then(function (scrollPercentage) {
125
- return setScrollPosition(scrollPercentage);
126
- });
125
+ scrollRef.current.scrollPrev();
127
126
  }
128
127
  }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
129
128
  kind: "ghost",
@@ -136,9 +135,7 @@ var Guidebanner = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
136
135
  tooltipAlignment: "end",
137
136
  iconDescription: nextIconDescription,
138
137
  onClick: function onClick() {
139
- scrollRef.current.scrollNext().then(function (scrollPercentage) {
140
- return setScrollPosition(scrollPercentage);
141
- });
138
+ scrollRef.current.scrollNext();
142
139
  }
143
140
  }))), onClose && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
144
141
  className: "".concat(blockClass, "__close-button"),
@@ -95,8 +95,6 @@ var defaults = {
95
95
  feature: {
96
96
  'a-new-feature': false,
97
97
  'default-portal-target-body': true,
98
- 'Datagrid.useExpandedRow': false,
99
- 'Datagrid.useNestedRows': false,
100
98
  'Datagrid.useInlineEdit': false,
101
99
  'Datagrid.useFiltering': false,
102
100
  'Datagrid.useCustomizeColumns': false,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@carbon/ibm-products",
3
3
  "description": "Carbon for IBM Products",
4
- "version": "1.62.0",
4
+ "version": "1.62.1",
5
5
  "license": "Apache-2.0",
6
6
  "main": "lib/index.js",
7
7
  "module": "es/index.js",
@@ -97,5 +97,5 @@
97
97
  "react": "^16.8.6 || ^17.0.1",
98
98
  "react-dom": "^16.8.6 || ^17.0.1"
99
99
  },
100
- "gitHead": "89c6e18fc0a426f7a6835947561210242824fb07"
100
+ "gitHead": "9de0589dad65ac5c559578d5f53c6ee31432717a"
101
101
  }
@@ -59,9 +59,8 @@
59
59
  }
60
60
 
61
61
  display: flex;
62
+ overflow: scroll;
62
63
  -ms-overflow-style: none;
63
- overflow-x: scroll;
64
- overflow-y: hidden;
65
64
  scroll-behavior: smooth;
66
65
  scroll-snap-type: x mandatory;
67
66
  scrollbar-width: none;
@@ -63,3 +63,24 @@
63
63
  .#{$block-class} .#{$block-class}__expandable-row--hover td {
64
64
  background: $layer-hover;
65
65
  }
66
+
67
+ .#{$block-class}
68
+ .#{$carbon-prefix}--data-table
69
+ tbody
70
+ tr:hover
71
+ td.#{$block-class}__expanded-row-cell-wrapper,
72
+ .#{$block-class}
73
+ .#{$carbon-prefix}--data-table
74
+ td.#{$block-class}__expanded-row-cell-wrapper,
75
+ .#{$block-class}
76
+ .#{$carbon-prefix}--data-table
77
+ .#{$block-class}__carbon-row-expanded
78
+ td.#{$block-class}__expandable-row-cell {
79
+ border: none;
80
+ }
81
+
82
+ .#{$block-class}
83
+ .#{$carbon-prefix}--data-table
84
+ td.#{$block-class}__expanded-row-cell-wrapper {
85
+ padding: 0;
86
+ }
@@ -67,3 +67,12 @@
67
67
  .#{$block-class}__row-size__row-settings-trigger--open.#{$carbon-prefix}--btn--ghost {
68
68
  background-color: $ui-02;
69
69
  }
70
+
71
+ .#{$block-class}
72
+ table.#{$carbon-prefix}--data-table--xl.#{$block-class}__vertical-align-center
73
+ td.#{$block-class}__expandable-row-cell,
74
+ .#{$block-class}
75
+ table.#{$carbon-prefix}--data-table--xl.#{$block-class}__vertical-align-top
76
+ td.#{$block-class}__expandable-row-cell {
77
+ padding-top: $spacing-03;
78
+ }
@@ -1,98 +0,0 @@
1
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
- /**
3
- * Copyright IBM Corp. 2023, 2023
4
- *
5
- * This source code is licensed under the Apache-2.0 license found in the
6
- * LICENSE file in the root directory of this source tree.
7
- */
8
-
9
- import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
10
- export var useIntersection = function useIntersection(element, threshold) {
11
- var _useState = useState(false),
12
- _useState2 = _slicedToArray(_useState, 2),
13
- isVisible = _useState2[0],
14
- setState = _useState2[1];
15
- useEffect(function () {
16
- var el = element.current;
17
- var observer = new IntersectionObserver(function (_ref) {
18
- var _ref2 = _slicedToArray(_ref, 1),
19
- entry = _ref2[0];
20
- setState(entry.isIntersecting);
21
- }, {
22
- threshold: threshold
23
- });
24
- el && observer.observe(el);
25
- return function () {
26
- return observer.unobserve(el);
27
- };
28
- }, [element, threshold]);
29
- return isVisible;
30
- };
31
- export var useIsOverflow = function useIsOverflow(ref) {
32
- var _useState3 = useState(),
33
- _useState4 = _slicedToArray(_useState3, 2),
34
- isScrollable = _useState4[0],
35
- setIsScrollable = _useState4[1];
36
- var _useState5 = useState(),
37
- _useState6 = _slicedToArray(_useState5, 2),
38
- mutationObserver = _useState6[0],
39
- setMutationObserver = _useState6[1];
40
- var _useState7 = useState(),
41
- _useState8 = _slicedToArray(_useState7, 2),
42
- resizeObserver = _useState8[0],
43
- setResizeObserver = _useState8[1];
44
- var checkOverflow = useCallback(function () {
45
- if (!ref.current) {
46
- return;
47
- }
48
- var hasOverflow = ref.current.scrollWidth > ref.current.clientWidth;
49
- setIsScrollable(hasOverflow);
50
- }, [ref]);
51
- useEffect(function () {
52
- if (!mutationObserver) {
53
- return;
54
- }
55
- return function () {
56
- if (mutationObserver) {
57
- mutationObserver.disconnect();
58
- }
59
- if (resizeObserver) {
60
- resizeObserver.disconnect();
61
- }
62
- };
63
- });
64
- useLayoutEffect(function () {
65
- var current = ref.current;
66
- if (current) {
67
- if ('ResizeObserver' in window && !resizeObserver) {
68
- setResizeObserver(new ResizeObserver(checkOverflow).observe(current));
69
- }
70
- if ('MutationObserver' in window && !mutationObserver) {
71
- setMutationObserver(new MutationObserver(checkOverflow).observe(current, {
72
- attributes: false,
73
- childList: true,
74
- subtree: false
75
- }));
76
- }
77
- checkOverflow();
78
- }
79
- }, [ref, checkOverflow, mutationObserver, resizeObserver]);
80
- return isScrollable;
81
- };
82
- export var useWindowEvent = function useWindowEvent(eventName, callback) {
83
- var savedCallback = useRef(null);
84
- useEffect(function () {
85
- savedCallback.current = callback;
86
- });
87
- useEffect(function () {
88
- function handler(event) {
89
- if (savedCallback.current) {
90
- savedCallback.current(event);
91
- }
92
- }
93
- window.addEventListener(eventName, handler);
94
- return function () {
95
- window.removeEventListener(eventName, handler);
96
- };
97
- }, [eventName]);
98
- };