@carbon/ibm-products 1.14.0 → 1.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. package/css/index-full-carbon.css +23 -5
  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 +4 -4
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +2 -2
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +23 -5
  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 +23 -5
  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/AddSelect/AddSelect.js +25 -19
  18. package/es/components/AddSelect/AddSelectFilter.js +5 -5
  19. package/es/components/DataSpreadsheet/DataSpreadsheet.js +174 -127
  20. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +24 -8
  21. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +31 -6
  22. package/es/components/DataSpreadsheet/hooks/index.js +2 -1
  23. package/es/components/DataSpreadsheet/hooks/useMultipleKeyTracking.js +36 -8
  24. package/es/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +68 -0
  25. package/es/components/DataSpreadsheet/utils/createCellSelectionArea.js +20 -8
  26. package/es/components/DataSpreadsheet/utils/getSelectionAreaPoints.js +18 -0
  27. package/es/components/DataSpreadsheet/utils/handleActiveCellInSelectionEnter.js +121 -0
  28. package/es/components/DataSpreadsheet/utils/handleActiveCellInSelectionTab.js +108 -0
  29. package/es/components/DataSpreadsheet/utils/handleEditSubmit.js +87 -0
  30. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +42 -8
  31. package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +153 -15
  32. package/es/components/DataSpreadsheet/utils/selectAllCells.js +53 -0
  33. package/es/components/MultiAddSelect/MultiAddSelect.js +150 -3
  34. package/es/components/PageHeader/PageHeader.js +3 -1
  35. package/es/components/SingleAddSelect/SingleAddSelect.js +90 -4
  36. package/es/components/TagSet/TagSet.js +13 -6
  37. package/es/components/Tearsheet/TearsheetShell.js +34 -10
  38. package/es/global/js/package-settings.js +2 -1
  39. package/lib/components/AddSelect/AddSelect.js +25 -19
  40. package/lib/components/AddSelect/AddSelectFilter.js +5 -5
  41. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +178 -126
  42. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +24 -8
  43. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +32 -6
  44. package/lib/components/DataSpreadsheet/hooks/index.js +9 -1
  45. package/lib/components/DataSpreadsheet/hooks/useMultipleKeyTracking.js +36 -8
  46. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +79 -0
  47. package/lib/components/DataSpreadsheet/utils/createCellSelectionArea.js +21 -8
  48. package/lib/components/DataSpreadsheet/utils/getSelectionAreaPoints.js +27 -0
  49. package/lib/components/DataSpreadsheet/utils/handleActiveCellInSelectionEnter.js +127 -0
  50. package/lib/components/DataSpreadsheet/utils/handleActiveCellInSelectionTab.js +118 -0
  51. package/lib/components/DataSpreadsheet/utils/handleEditSubmit.js +94 -0
  52. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +44 -8
  53. package/lib/components/DataSpreadsheet/utils/handleMultipleKeys.js +161 -22
  54. package/lib/components/DataSpreadsheet/utils/selectAllCells.js +60 -0
  55. package/lib/components/MultiAddSelect/MultiAddSelect.js +150 -2
  56. package/lib/components/PageHeader/PageHeader.js +3 -1
  57. package/lib/components/SingleAddSelect/SingleAddSelect.js +91 -3
  58. package/lib/components/TagSet/TagSet.js +13 -6
  59. package/lib/components/Tearsheet/TearsheetShell.js +36 -10
  60. package/lib/global/js/package-settings.js +2 -1
  61. package/package.json +11 -11
  62. package/scss/components/AboutModal/_about-modal.scss +4 -0
  63. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +22 -1
  64. package/scss/components/ExportModal/_export-modal.scss +0 -4
@@ -25,11 +25,13 @@ var _layout = require("@carbon/layout");
25
25
 
26
26
  var _settings = require("../../settings");
27
27
 
28
+ var _hooks = require("../../global/js/hooks");
29
+
28
30
  var _checkActiveHeaderCell = require("./utils/checkActiveHeaderCell");
29
31
 
30
32
  var _handleHeaderCellSelection = require("./utils/handleHeaderCellSelection");
31
33
 
32
- var _hooks = require("../../global/js/hooks");
34
+ var _selectAllCells = require("./utils/selectAllCells");
33
35
 
34
36
  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); }
35
37
 
@@ -52,7 +54,8 @@ var DataSpreadsheetHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref,
52
54
  setCurrentMatcher = _ref.setCurrentMatcher,
53
55
  setSelectionAreas = _ref.setSelectionAreas,
54
56
  setSelectionAreaData = _ref.setSelectionAreaData,
55
- rows = _ref.rows;
57
+ rows = _ref.rows,
58
+ updateActiveCellCoordinates = _ref.updateActiveCellCoordinates;
56
59
 
57
60
  var _useState = (0, _react.useState)(0),
58
61
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -74,7 +77,8 @@ var DataSpreadsheetHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref,
74
77
  }, [cellSize, ref, scrollBarSize, previousState === null || previousState === void 0 ? void 0 : previousState.cellSize]);
75
78
 
76
79
  var handleColumnHeaderClick = function handleColumnHeaderClick(index) {
77
- return function () {
80
+ return function (event) {
81
+ var isHoldingCommandKey = event.metaKey || event.ctrlKey;
78
82
  (0, _handleHeaderCellSelection.handleHeaderCellSelection)({
79
83
  type: 'column',
80
84
  activeCellCoordinates: activeCellCoordinates,
@@ -85,13 +89,27 @@ var DataSpreadsheetHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref,
85
89
  setSelectionAreas: setSelectionAreas,
86
90
  spreadsheetRef: ref,
87
91
  index: index,
88
- setSelectionAreaData: setSelectionAreaData
92
+ setSelectionAreaData: setSelectionAreaData,
93
+ isHoldingCommandKey: isHoldingCommandKey
89
94
  });
90
95
  };
91
96
  };
92
97
 
98
+ var handleSelectAllClick = function handleSelectAllClick() {
99
+ (0, _selectAllCells.selectAllCells)({
100
+ ref: ref,
101
+ setCurrentMatcher: setCurrentMatcher,
102
+ setSelectionAreas: setSelectionAreas,
103
+ rows: rows,
104
+ columns: columns,
105
+ activeCellCoordinates: activeCellCoordinates,
106
+ updateActiveCellCoordinates: updateActiveCellCoordinates
107
+ });
108
+ };
109
+
93
110
  return /*#__PURE__*/_react.default.createElement("div", {
94
- className: (0, _classnames.default)("".concat(blockClass, "__header--container"))
111
+ className: (0, _classnames.default)("".concat(blockClass, "__header--container")),
112
+ role: "rowgroup"
95
113
  }, headerGroups.map(function (headerGroup, index) {
96
114
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
97
115
  key: "header_".concat(index)
@@ -107,10 +125,12 @@ var DataSpreadsheetHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref,
107
125
  height: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeight
108
126
  }
109
127
  }, /*#__PURE__*/_react.default.createElement("button", {
128
+ id: "".concat(blockClass, "__cell--header--header"),
110
129
  "data-row-index": "header",
111
130
  "data-column-index": "header",
112
131
  type: "button",
113
132
  tabIndex: -1,
133
+ onClick: handleSelectAllClick,
114
134
  className: (0, _classnames.default)("".concat(blockClass, "__th"), "".concat(blockClass, "--interactive-cell-element"), "".concat(blockClass, "__th--select-all"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__th--active-header"), (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header' && (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header'))
115
135
  }, "\xA0")), headerGroup.headers.map(function (column, index) {
116
136
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
@@ -118,6 +138,7 @@ var DataSpreadsheetHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref,
118
138
  role: "columnheader",
119
139
  className: "".concat(blockClass, "__columnheader")
120
140
  }, column.getHeaderProps()), /*#__PURE__*/_react.default.createElement("button", {
141
+ id: "".concat(blockClass, "__cell--header--").concat(index),
121
142
  "data-row-index": "header",
122
143
  "data-column-index": index,
123
144
  tabIndex: -1,
@@ -198,5 +219,10 @@ DataSpreadsheetHeader.propTypes = {
198
219
  /**
199
220
  * Setter fn for selectionAreas value
200
221
  */
201
- setSelectionAreas: _propTypes.default.func
222
+ setSelectionAreas: _propTypes.default.func,
223
+
224
+ /**
225
+ * Function used to update the active cell coordinates
226
+ */
227
+ updateActiveCellCoordinates: _propTypes.default.func
202
228
  };
@@ -21,6 +21,12 @@ Object.defineProperty(exports, "useResetSpreadsheetFocus", {
21
21
  return _useResetSpreadsheetFocus.useResetSpreadsheetFocus;
22
22
  }
23
23
  });
24
+ Object.defineProperty(exports, "useSpreadsheetEdit", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _useSpreadsheetEdit.useSpreadsheetEdit;
28
+ }
29
+ });
24
30
  Object.defineProperty(exports, "useSpreadsheetOutsideClick", {
25
31
  enumerable: true,
26
32
  get: function get() {
@@ -34,4 +40,6 @@ var _useMultipleKeyTracking = require("./useMultipleKeyTracking");
34
40
 
35
41
  var _useResetSpreadsheetFocus = require("./useResetSpreadsheetFocus");
36
42
 
37
- var _useSpreadsheetOutsideClick = require("./useSpreadsheetOutsideClick");
43
+ var _useSpreadsheetOutsideClick = require("./useSpreadsheetOutsideClick");
44
+
45
+ var _useSpreadsheetEdit = require("./useSpreadsheetEdit");
@@ -15,6 +15,8 @@ var _react = require("react");
15
15
 
16
16
  var _hooks = require("../../../global/js/hooks");
17
17
 
18
+ var _handleMultipleKeys = require("../utils/handleMultipleKeys");
19
+
18
20
  /**
19
21
  * Copyright IBM Corp. 2022, 2022
20
22
  *
@@ -30,15 +32,20 @@ var useMultipleKeyTracking = function useMultipleKeyTracking(_ref) {
30
32
  containerHasFocus = _ref.containerHasFocus,
31
33
  isEditing = _ref.isEditing;
32
34
 
33
- var _useState = (0, _react.useState)(hasFocus),
35
+ var _useState = (0, _react.useState)(''),
34
36
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
35
- windowFocused = _useState2[0],
36
- setWindowFocused = _useState2[1];
37
+ usingMac = _useState2[0],
38
+ setUsingMac = _useState2[1];
37
39
 
38
- var _useState3 = (0, _react.useState)([]),
40
+ var _useState3 = (0, _react.useState)(hasFocus),
39
41
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
40
- keysPressedList = _useState4[0],
41
- setKeysPressedList = _useState4[1];
42
+ windowFocused = _useState4[0],
43
+ setWindowFocused = _useState4[1];
44
+
45
+ var _useState5 = (0, _react.useState)([]),
46
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
47
+ keysPressedList = _useState6[0],
48
+ setKeysPressedList = _useState6[1];
42
49
 
43
50
  var previousState = (0, _hooks.usePreviousValue)({
44
51
  isEditing: isEditing,
@@ -47,6 +54,14 @@ var useMultipleKeyTracking = function useMultipleKeyTracking(_ref) {
47
54
  // we need to clear out the keysPressedList
48
55
 
49
56
  (0, _react.useEffect)(function () {
57
+ var userAgentString = window.navigator.userAgent;
58
+
59
+ if (userAgentString.includes('Macintosh')) {
60
+ setUsingMac(true);
61
+ } else {
62
+ setUsingMac(false);
63
+ }
64
+
50
65
  setWindowFocused(hasFocus());
51
66
 
52
67
  var onWindowFocus = function onWindowFocus() {
@@ -72,6 +87,18 @@ var useMultipleKeyTracking = function useMultipleKeyTracking(_ref) {
72
87
  // Prevent multiple keys of the same type being added to our keysPressedList array
73
88
  if (keysPressedList.includes(event.code)) {
74
89
  return;
90
+ } // Because keyup events are lost when using the Command key
91
+ // we need to remove the previously pressed keys so that we
92
+ // do not have keys in the pressed list that should not be
93
+
94
+
95
+ if ((0, _handleMultipleKeys.includesResourceKey)(keysPressedList, usingMac) && keysPressedList.length > 1) {
96
+ var clonedKeys = (0, _toConsumableArray2.default)(keysPressedList);
97
+ var filteredClonedKeys = clonedKeys.filter(function (item) {
98
+ return item === 'MetaLeft' || item === 'MetaRight';
99
+ });
100
+ filteredClonedKeys.push(event.code);
101
+ return setKeysPressedList((0, _toConsumableArray2.default)(new Set(filteredClonedKeys)));
75
102
  }
76
103
 
77
104
  var tempKeys = (0, _toConsumableArray2.default)(keysPressedList);
@@ -113,10 +140,11 @@ var useMultipleKeyTracking = function useMultipleKeyTracking(_ref) {
113
140
  setKeysPressedList([]);
114
141
  }
115
142
  }
116
- }, [keysPressedList, containerHasFocus, ref, isEditing, previousState === null || previousState === void 0 ? void 0 : previousState.isEditing, windowFocused, previousState === null || previousState === void 0 ? void 0 : previousState.windowFocused]);
143
+ }, [keysPressedList, containerHasFocus, ref, isEditing, previousState === null || previousState === void 0 ? void 0 : previousState.isEditing, windowFocused, previousState === null || previousState === void 0 ? void 0 : previousState.windowFocused, usingMac]);
117
144
  return {
118
145
  keysPressedList: keysPressedList,
119
- windowFocused: windowFocused
146
+ windowFocused: windowFocused,
147
+ usingMac: usingMac
120
148
  };
121
149
  };
122
150
 
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useSpreadsheetEdit = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ var _layout = require("@carbon/layout");
11
+
12
+ // /**
13
+ // * Copyright IBM Corp. 2022, 2022
14
+ // *
15
+ // * This source code is licensed under the Apache-2.0 license found in the
16
+ // * LICENSE file in the root directory of this source tree.
17
+ // */
18
+ var useSpreadsheetEdit = function useSpreadsheetEdit(_ref) {
19
+ var isEditing = _ref.isEditing,
20
+ rows = _ref.rows,
21
+ activeCellCoordinates = _ref.activeCellCoordinates,
22
+ activeCellRef = _ref.activeCellRef,
23
+ cellEditorRef = _ref.cellEditorRef,
24
+ cellEditorRulerRef = _ref.cellEditorRulerRef,
25
+ columns = _ref.columns,
26
+ defaultColumn = _ref.defaultColumn,
27
+ cellEditorValue = _ref.cellEditorValue;
28
+ (0, _react.useEffect)(function () {
29
+ if (isEditing) {
30
+ var _rows$activeCellCoord, _cellProps$column, _cellEditorRef$curren;
31
+
32
+ var cellProps = (_rows$activeCellCoord = rows[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row]) === null || _rows$activeCellCoord === void 0 ? void 0 : _rows$activeCellCoord.cells[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column];
33
+ var activeCellLeftPosition = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.left;
34
+ var activeCellTopPosition = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.top;
35
+ cellEditorRef.current.style.left = activeCellLeftPosition;
36
+ cellEditorRef.current.style.top = activeCellTopPosition;
37
+ cellEditorRef.current.style.display = 'block';
38
+ cellEditorRef.current.style.width = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.width;
39
+ cellEditorRef.current.style.height = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.height;
40
+ cellEditorRef.current.style.paddingTop = "".concat((parseInt(activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.height) - 16) / 2 - 1, "px"); // calculate paddingTop based on cellHeight which could be variable depending on the cellSize prop
41
+
42
+ cellEditorRef.current.style.textAlign = (cellProps === null || cellProps === void 0 ? void 0 : (_cellProps$column = cellProps.column) === null || _cellProps$column === void 0 ? void 0 : _cellProps$column.placement) === 'right' ? 'right' : 'left';
43
+ (_cellEditorRef$curren = cellEditorRef.current) === null || _cellEditorRef$curren === void 0 ? void 0 : _cellEditorRef$curren.focus();
44
+ var rulerWidth = cellEditorRulerRef.current.offsetWidth;
45
+ var cellWidth = activeCellRef.current.offsetWidth;
46
+
47
+ if (rulerWidth >= cellWidth) {
48
+ var widthMultiplier = Math.floor(rulerWidth / cellWidth) + 1;
49
+ var startingColumnPosition = activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column;
50
+ var startingRowPosition = activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row;
51
+ var totalColumns = columns.length;
52
+ var totalRows = rows.length;
53
+ var totalMultiplierPossible = totalColumns - startingColumnPosition;
54
+ var totalCellEditorMaxHeight = (totalRows - startingRowPosition) * defaultColumn.rowHeight;
55
+ cellEditorRef.current.style.maxHeight = (0, _layout.px)(totalCellEditorMaxHeight);
56
+ cellEditorRef.current.style.width = (0, _layout.px)(cellWidth * (widthMultiplier <= totalMultiplierPossible ? widthMultiplier : totalMultiplierPossible));
57
+ cellEditorRef.current.style.height = (0, _layout.px)(cellEditorRef.current.scrollHeight); // adds dynamic height to cell editor
58
+ // Cell editor has reached max height, we need to add the scrolling back.
59
+ // We also need to subtract 1 to account for the fact that the cell editor
60
+ // is placed one pixel below the cell being edited to account for the border
61
+
62
+ if (cellEditorRef.current.clientHeight === totalCellEditorMaxHeight - 1) {
63
+ cellEditorRef.current.style.overflow = 'auto';
64
+ } else {
65
+ cellEditorRef.current.style.overflow = 'hidden';
66
+ }
67
+ }
68
+ }
69
+
70
+ if (!isEditing) {
71
+ cellEditorRef.current.style.overflow = 'hidden';
72
+ cellEditorRef.current.style.display = 'none';
73
+ cellEditorRef.current.blur();
74
+ activeCellRef.current.focus();
75
+ }
76
+ }, [isEditing, activeCellCoordinates, rows, cellEditorValue, columns.length, defaultColumn, cellEditorValue, activeCellRef, cellEditorRef, cellEditorRulerRef]);
77
+ };
78
+
79
+ exports.useSpreadsheetEdit = useSpreadsheetEdit;
@@ -9,6 +9,8 @@ var _layout = require("@carbon/layout");
9
9
 
10
10
  var _deepCloneObject = require("../../../global/js/utils/deepCloneObject");
11
11
 
12
+ var _getSelectionAreaPoints = require("./getSelectionAreaPoints");
13
+
12
14
  /**
13
15
  * Copyright IBM Corp. 2022, 2022
14
16
  *
@@ -16,21 +18,32 @@ var _deepCloneObject = require("../../../global/js/utils/deepCloneObject");
16
18
  * LICENSE file in the root directory of this source tree.
17
19
  */
18
20
  var createCellSelectionArea = function createCellSelectionArea(_ref) {
19
- var area = _ref.area,
21
+ var ref = _ref.ref,
22
+ area = _ref.area,
20
23
  blockClass = _ref.blockClass,
21
24
  defaultColumn = _ref.defaultColumn,
22
25
  selectionAreas = _ref.selectionAreas,
23
- setSelectionAreas = _ref.setSelectionAreas;
24
- var greatestRow = Math.max(area.point1.row, area.point2.row);
25
- var greatestColumn = Math.max(area.point1.column, area.point2.column);
26
- var lowestRowIndex = Math.min(area.point1.row, area.point2.row);
27
- var lowestColumnIndex = Math.min(area.point1.column, area.point2.column);
26
+ setSelectionAreas = _ref.setSelectionAreas,
27
+ setActiveCellInsideSelectionArea = _ref.setActiveCellInsideSelectionArea;
28
+
29
+ var _getSelectionAreaPoin = (0, _getSelectionAreaPoints.getSelectionAreaPoints)(area),
30
+ lowestColumnIndex = _getSelectionAreaPoin.lowestColumnIndex,
31
+ lowestRowIndex = _getSelectionAreaPoin.lowestRowIndex,
32
+ greatestColumnIndex = _getSelectionAreaPoin.greatestColumnIndex,
33
+ greatestRowIndex = _getSelectionAreaPoin.greatestRowIndex;
34
+
35
+ if (greatestRowIndex - lowestRowIndex > 0 || greatestColumnIndex - lowestColumnIndex > 0) {
36
+ setActiveCellInsideSelectionArea(true);
37
+ var activeCellElement = ref.current.querySelector(".".concat(blockClass, "__active-cell--highlight"));
38
+ activeCellElement.setAttribute('data-selection-id', area.matcher);
39
+ }
40
+
28
41
  var point1Element = document.querySelector("[data-row-index=\"".concat(area.point1.row, "\"][data-column-index=\"").concat(area.point1.column, "\"]")) || document.querySelector(".".concat(blockClass, "__body--td")); // if we can't find the point1 element (this can happen in the case where a virtualized row is not present anymore in the DOM), we get the default height/width of the first body cell we find
29
42
 
30
43
  var selectionAreaCellWidth = point1Element.offsetWidth;
31
44
  var selectionAreaCellHeight = point1Element.offsetHeight;
32
- var selectionAreaTotalWidth = selectionAreaCellWidth * (greatestColumn - lowestColumnIndex + 1);
33
- var selectionAreaTotalHeight = selectionAreaCellHeight * (greatestRow - lowestRowIndex + 1);
45
+ var selectionAreaTotalWidth = selectionAreaCellWidth * (greatestColumnIndex - lowestColumnIndex + 1);
46
+ var selectionAreaTotalHeight = selectionAreaCellHeight * (greatestRowIndex - lowestRowIndex + 1);
34
47
  var bodyContainer = document.querySelector(".".concat(blockClass, "__list--container")).firstElementChild;
35
48
  var placementElement = bodyContainer.querySelector("[data-row-index=\"".concat(lowestRowIndex, "\"][data-column-index=\"").concat(lowestColumnIndex, "\"]"));
36
49
  var relativePosition = {
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getSelectionAreaPoints = void 0;
7
+
8
+ /**
9
+ * Copyright IBM Corp. 2022, 2022
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
+ var getSelectionAreaPoints = function getSelectionAreaPoints(area) {
15
+ var greatestRowIndex = Math.max(area.point1.row, area.point2.row);
16
+ var greatestColumnIndex = Math.max(area.point1.column, area.point2.column);
17
+ var lowestRowIndex = Math.min(area.point1.row, area.point2.row);
18
+ var lowestColumnIndex = Math.min(area.point1.column, area.point2.column);
19
+ return {
20
+ greatestRowIndex: greatestRowIndex,
21
+ greatestColumnIndex: greatestColumnIndex,
22
+ lowestColumnIndex: lowestColumnIndex,
23
+ lowestRowIndex: lowestRowIndex
24
+ };
25
+ };
26
+
27
+ exports.getSelectionAreaPoints = getSelectionAreaPoints;
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.handleActiveCellInSelectionEnter = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _getSelectionAreaPoints = require("./getSelectionAreaPoints");
13
+
14
+ 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
+
16
+ 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; }
17
+
18
+ var handleActiveCellInSelectionEnter = function handleActiveCellInSelectionEnter(_ref) {
19
+ var activeCellInsideSelectionArea = _ref.activeCellInsideSelectionArea,
20
+ activeCellCoordinates = _ref.activeCellCoordinates,
21
+ activeCellRef = _ref.activeCellRef,
22
+ selectionAreas = _ref.selectionAreas,
23
+ updateActiveCellCoordinates = _ref.updateActiveCellCoordinates;
24
+
25
+ if (!activeCellInsideSelectionArea) {
26
+ return;
27
+ }
28
+
29
+ var activeCellSelectionId = activeCellRef.current.getAttribute('data-selection-id');
30
+ var activeCellIndexInSelectionAreas = selectionAreas.findIndex(function (item) {
31
+ return item.matcher === activeCellSelectionId;
32
+ });
33
+ var selectionAreaToNavigate = selectionAreas[activeCellIndexInSelectionAreas];
34
+
35
+ var _getSelectionAreaPoin = (0, _getSelectionAreaPoints.getSelectionAreaPoints)(selectionAreaToNavigate),
36
+ lowestColumnIndex = _getSelectionAreaPoin.lowestColumnIndex,
37
+ lowestRowIndex = _getSelectionAreaPoin.lowestRowIndex,
38
+ greatestColumnIndex = _getSelectionAreaPoin.greatestColumnIndex,
39
+ greatestRowIndex = _getSelectionAreaPoin.greatestRowIndex; // Move active cell down one row if possible
40
+
41
+
42
+ var coordinatesClone = _objectSpread({}, activeCellCoordinates);
43
+
44
+ if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) < greatestRowIndex) {
45
+ updateActiveCellCoordinates({
46
+ coords: coordinatesClone,
47
+ updatedValue: {
48
+ row: (coordinatesClone === null || coordinatesClone === void 0 ? void 0 : coordinatesClone.row) + 1
49
+ },
50
+ optOutOfSelectionAreaUpdate: true
51
+ });
52
+ } // Move active cell to next column of selection area if it exists
53
+ // If not, find the next selection area and update active cell to
54
+ // be the first cell in that selection
55
+
56
+
57
+ if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === greatestRowIndex) {
58
+ if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) < greatestColumnIndex) {
59
+ updateActiveCellCoordinates({
60
+ coords: coordinatesClone,
61
+ updatedValue: {
62
+ column: (coordinatesClone === null || coordinatesClone === void 0 ? void 0 : coordinatesClone.column) + 1,
63
+ row: lowestRowIndex
64
+ },
65
+ optOutOfSelectionAreaUpdate: true
66
+ });
67
+ } // Move to next selection area if there is one, or back to
68
+ // the beginning of the current selection
69
+
70
+
71
+ if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === greatestColumnIndex) {
72
+ if (selectionAreas.length > 1) {
73
+ if (selectionAreas[activeCellIndexInSelectionAreas + 1]) {
74
+ // Update activeCellRef data-selection-id attribute to the matcher of the next selection area
75
+ activeCellRef.current.setAttribute('data-selection-id', selectionAreas[activeCellIndexInSelectionAreas + 1].matcher);
76
+ var nextSelectionArea = selectionAreas[activeCellIndexInSelectionAreas + 1];
77
+
78
+ var _getSelectionAreaPoin2 = (0, _getSelectionAreaPoints.getSelectionAreaPoints)(nextSelectionArea),
79
+ _lowestColumnIndex = _getSelectionAreaPoin2.lowestColumnIndex,
80
+ _lowestRowIndex = _getSelectionAreaPoin2.lowestRowIndex;
81
+
82
+ updateActiveCellCoordinates({
83
+ coords: coordinatesClone,
84
+ updatedValue: {
85
+ column: _lowestColumnIndex,
86
+ row: _lowestRowIndex
87
+ },
88
+ optOutOfSelectionAreaUpdate: true
89
+ });
90
+ return;
91
+ } else {
92
+ // There are multiple selection areas and the active cell is in the last one
93
+ // So we need to move the active cell to the first cell in the first selection area
94
+ activeCellRef.current.setAttribute('data-selection-id', selectionAreas[0].matcher);
95
+ var firstSelectionArea = selectionAreas[0];
96
+
97
+ var _getSelectionAreaPoin3 = (0, _getSelectionAreaPoints.getSelectionAreaPoints)(firstSelectionArea),
98
+ _lowestColumnIndex2 = _getSelectionAreaPoin3.lowestColumnIndex,
99
+ _lowestRowIndex2 = _getSelectionAreaPoin3.lowestRowIndex;
100
+
101
+ updateActiveCellCoordinates({
102
+ coords: coordinatesClone,
103
+ updatedValue: {
104
+ column: _lowestColumnIndex2,
105
+ row: _lowestRowIndex2
106
+ },
107
+ optOutOfSelectionAreaUpdate: true
108
+ });
109
+ }
110
+ } // Only one selection area, go back to first cell in the selection
111
+
112
+
113
+ if (selectionAreas.length === 1) {
114
+ return updateActiveCellCoordinates({
115
+ coords: coordinatesClone,
116
+ updatedValue: {
117
+ column: lowestColumnIndex,
118
+ row: lowestRowIndex
119
+ },
120
+ optOutOfSelectionAreaUpdate: true
121
+ });
122
+ }
123
+ }
124
+ }
125
+ };
126
+
127
+ exports.handleActiveCellInSelectionEnter = handleActiveCellInSelectionEnter;
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.handleActiveCellInSelectionTab = void 0;
7
+
8
+ var _getSelectionAreaPoints = require("./getSelectionAreaPoints");
9
+
10
+ /**
11
+ * Copyright IBM Corp. 2022, 2022
12
+ *
13
+ * This source code is licensed under the Apache-2.0 license found in the
14
+ * LICENSE file in the root directory of this source tree.
15
+ */
16
+ var handleActiveCellInSelectionTab = function handleActiveCellInSelectionTab(_ref) {
17
+ var activeCellInsideSelectionArea = _ref.activeCellInsideSelectionArea,
18
+ activeCellCoordinates = _ref.activeCellCoordinates,
19
+ activeCellRef = _ref.activeCellRef,
20
+ selectionAreas = _ref.selectionAreas,
21
+ updateActiveCellCoordinates = _ref.updateActiveCellCoordinates;
22
+
23
+ if (!activeCellInsideSelectionArea) {
24
+ return;
25
+ }
26
+
27
+ var activeCellSelectionId = activeCellRef.current.getAttribute('data-selection-id');
28
+ var activeCellIndexInSelectionAreas = selectionAreas.findIndex(function (item) {
29
+ return item.matcher === activeCellSelectionId;
30
+ });
31
+ var selectionAreaToNavigate = selectionAreas[activeCellIndexInSelectionAreas];
32
+
33
+ var _getSelectionAreaPoin = (0, _getSelectionAreaPoints.getSelectionAreaPoints)(selectionAreaToNavigate),
34
+ lowestColumnIndex = _getSelectionAreaPoin.lowestColumnIndex,
35
+ lowestRowIndex = _getSelectionAreaPoin.lowestRowIndex,
36
+ greatestColumnIndex = _getSelectionAreaPoin.greatestColumnIndex,
37
+ greatestRowIndex = _getSelectionAreaPoin.greatestRowIndex; // Move active cell to next column in selection area
38
+
39
+
40
+ if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) < greatestColumnIndex) {
41
+ updateActiveCellCoordinates({
42
+ updatedValue: {
43
+ column: (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) + 1
44
+ },
45
+ optOutOfSelectionAreaUpdate: true
46
+ });
47
+ } // Move active cell to next row of selection area if it exists
48
+ // If not, find the next selection area and update active cell to
49
+ // be the first cell in that selection
50
+
51
+
52
+ if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === greatestColumnIndex) {
53
+ if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) < greatestRowIndex) {
54
+ updateActiveCellCoordinates({
55
+ updatedValue: {
56
+ column: lowestColumnIndex,
57
+ row: (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) + 1
58
+ },
59
+ optOutOfSelectionAreaUpdate: true
60
+ });
61
+ } // Move to next selection area if there is on, or back to
62
+ // the beginning of the current selection
63
+
64
+
65
+ if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === greatestRowIndex) {
66
+ if (selectionAreas.length > 1) {
67
+ if (selectionAreas[activeCellIndexInSelectionAreas + 1]) {
68
+ // Update activeCellRef data-selection-id attribute to the matcher of the next selection area
69
+ activeCellRef.current.setAttribute('data-selection-id', selectionAreas[activeCellIndexInSelectionAreas + 1].matcher);
70
+ var nextSelectionArea = selectionAreas[activeCellIndexInSelectionAreas + 1];
71
+
72
+ var _getSelectionAreaPoin2 = (0, _getSelectionAreaPoints.getSelectionAreaPoints)(nextSelectionArea),
73
+ _lowestColumnIndex = _getSelectionAreaPoin2.lowestColumnIndex,
74
+ _lowestRowIndex = _getSelectionAreaPoin2.lowestRowIndex;
75
+
76
+ updateActiveCellCoordinates({
77
+ updatedValue: {
78
+ column: _lowestColumnIndex,
79
+ row: _lowestRowIndex
80
+ },
81
+ optOutOfSelectionAreaUpdate: true
82
+ });
83
+ return;
84
+ } else {
85
+ // There are multiple selection areas and the active cell is in the last one
86
+ // So we need to move the active cell to the first cell in the first selection area
87
+ activeCellRef.current.setAttribute('data-selection-id', selectionAreas[0].matcher);
88
+ var firstSelectionArea = selectionAreas[0];
89
+
90
+ var _getSelectionAreaPoin3 = (0, _getSelectionAreaPoints.getSelectionAreaPoints)(firstSelectionArea),
91
+ _lowestColumnIndex2 = _getSelectionAreaPoin3.lowestColumnIndex,
92
+ _lowestRowIndex2 = _getSelectionAreaPoin3.lowestRowIndex;
93
+
94
+ updateActiveCellCoordinates({
95
+ updatedValue: {
96
+ column: _lowestColumnIndex2,
97
+ row: _lowestRowIndex2
98
+ },
99
+ optOutOfSelectionAreaUpdate: true
100
+ });
101
+ }
102
+ } // Only one selection area, go back to first cell in the selection
103
+
104
+
105
+ if (selectionAreas.length === 1) {
106
+ return updateActiveCellCoordinates({
107
+ updatedValue: {
108
+ column: lowestColumnIndex,
109
+ row: lowestRowIndex
110
+ },
111
+ optOutOfSelectionAreaUpdate: true
112
+ });
113
+ }
114
+ }
115
+ }
116
+ };
117
+
118
+ exports.handleActiveCellInSelectionTab = handleActiveCellInSelectionTab;