@carbon/ibm-products 1.13.0 → 1.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/css/components/Datagrid/styles/addons/CustomizeColumnsModal.css +47 -0
  2. package/css/components/Datagrid/styles/addons/CustomizeColumnsModal.css.map +1 -0
  3. package/css/components/Datagrid/styles/addons/RowSizeDropdown.css +20 -0
  4. package/css/components/Datagrid/styles/addons/RowSizeDropdown.css.map +1 -0
  5. package/css/components/Datagrid/styles/datagrid.css +268 -0
  6. package/css/components/Datagrid/styles/datagrid.css.map +1 -0
  7. package/css/components/Datagrid/styles/index.css +513 -0
  8. package/css/components/Datagrid/styles/index.css.map +1 -0
  9. package/css/components/Datagrid/styles/useActionsColumn.css +23 -0
  10. package/css/components/Datagrid/styles/useActionsColumn.css.map +1 -0
  11. package/css/components/Datagrid/styles/useColumnRightAlign.css +28 -0
  12. package/css/components/Datagrid/styles/useColumnRightAlign.css.map +1 -0
  13. package/css/components/Datagrid/styles/useNestedRows.css +15 -0
  14. package/css/components/Datagrid/styles/useNestedRows.css.map +1 -0
  15. package/css/components/Datagrid/styles/useNestedTable.css +25 -0
  16. package/css/components/Datagrid/styles/useNestedTable.css.map +1 -0
  17. package/css/components/Datagrid/styles/useSelectAllToggle.css +28 -0
  18. package/css/components/Datagrid/styles/useSelectAllToggle.css.map +1 -0
  19. package/css/components/Datagrid/styles/useSortableColumns.css +50 -0
  20. package/css/components/Datagrid/styles/useSortableColumns.css.map +1 -0
  21. package/css/components/Datagrid/styles/useStickyColumn.css +35 -0
  22. package/css/components/Datagrid/styles/useStickyColumn.css.map +1 -0
  23. package/css/index-full-carbon.css +611 -10
  24. package/css/index-full-carbon.css.map +1 -1
  25. package/css/index-full-carbon.min.css +3 -3
  26. package/css/index-full-carbon.min.css.map +1 -1
  27. package/css/index-without-carbon-released-only.css +7 -4
  28. package/css/index-without-carbon-released-only.css.map +1 -1
  29. package/css/index-without-carbon-released-only.min.css +2 -2
  30. package/css/index-without-carbon-released-only.min.css.map +1 -1
  31. package/css/index-without-carbon.css +611 -10
  32. package/css/index-without-carbon.css.map +1 -1
  33. package/css/index-without-carbon.min.css +3 -3
  34. package/css/index-without-carbon.min.css.map +1 -1
  35. package/css/index.css +611 -10
  36. package/css/index.css.map +1 -1
  37. package/css/index.min.css +3 -3
  38. package/css/index.min.css.map +1 -1
  39. package/es/components/AddSelect/AddSelect.js +106 -43
  40. package/es/components/AddSelect/AddSelectFilter.js +172 -0
  41. package/es/components/AddSelect/add-select-utils.js +30 -0
  42. package/es/components/DataSpreadsheet/DataSpreadsheet.js +255 -175
  43. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +78 -17
  44. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +65 -20
  45. package/es/components/DataSpreadsheet/hooks/index.js +11 -0
  46. package/es/components/DataSpreadsheet/hooks/useMultipleKeyTracking.js +139 -0
  47. package/es/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +2 -4
  48. package/es/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +68 -0
  49. package/es/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +1 -3
  50. package/es/components/DataSpreadsheet/utils/createCellSelectionArea.js +20 -8
  51. package/es/components/DataSpreadsheet/utils/generateData.js +17 -9
  52. package/es/components/DataSpreadsheet/utils/getSelectionAreaPoints.js +18 -0
  53. package/es/components/DataSpreadsheet/utils/getSpreadsheetWidth.js +30 -0
  54. package/es/components/DataSpreadsheet/utils/handleActiveCellInSelectionEnter.js +121 -0
  55. package/es/components/DataSpreadsheet/utils/handleActiveCellInSelectionTab.js +108 -0
  56. package/es/components/DataSpreadsheet/utils/handleEditSubmit.js +87 -0
  57. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +42 -8
  58. package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +225 -13
  59. package/es/components/DataSpreadsheet/utils/selectAllCells.js +53 -0
  60. package/es/components/Datagrid/Datagrid/Datagrid.js +70 -0
  61. package/es/components/Datagrid/Datagrid/DatagridBody.js +36 -0
  62. package/es/components/Datagrid/Datagrid/DatagridEmptyBody.js +19 -0
  63. package/es/components/Datagrid/Datagrid/DatagridExpandedRow.js +26 -0
  64. package/es/components/Datagrid/Datagrid/DatagridHead.js +31 -0
  65. package/es/components/Datagrid/Datagrid/DatagridHeaderRow.js +57 -0
  66. package/es/components/Datagrid/Datagrid/DatagridRefBody.js +37 -0
  67. package/es/components/Datagrid/Datagrid/DatagridRow.js +60 -0
  68. package/es/components/Datagrid/Datagrid/DatagridSelectAll.js +50 -0
  69. package/es/components/Datagrid/Datagrid/DatagridSelectAllWithToggle.js +122 -0
  70. package/es/components/Datagrid/Datagrid/DatagridSimpleBody.js +36 -0
  71. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +22 -0
  72. package/es/components/Datagrid/Datagrid/DatagridVirtualBody.js +87 -0
  73. package/es/components/Datagrid/Datagrid/DraggableElement.js +188 -0
  74. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Actions.js +78 -0
  75. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/ButtonWrapper.js +51 -0
  76. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +140 -0
  77. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsModal.js +157 -0
  78. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/ModalWrapper.js +62 -0
  79. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/common.js +13 -0
  80. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/index.js +9 -0
  81. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +62 -0
  82. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +139 -0
  83. package/es/components/Datagrid/Datagrid/addons/RowSize/index.js +8 -0
  84. package/es/components/Datagrid/Datagrid/index.js +8 -0
  85. package/es/components/Datagrid/Datagrid.stories/CustomizeColumnStory.js +6 -0
  86. package/es/components/Datagrid/Datagrid.stories/LeftPanelStory.js +6 -0
  87. package/es/components/Datagrid/Datagrid.stories/RowSizeDropdownStory.js +6 -0
  88. package/es/components/Datagrid/Datagrid.stories/SelectAllWithToggleStory.js +6 -0
  89. package/es/components/Datagrid/Datagrid.stories/StickyActionsColumnStory.js +92 -0
  90. package/es/components/Datagrid/Datagrid.stories/common.js +199 -0
  91. package/es/components/Datagrid/Datagrid.stories/index.js +5 -0
  92. package/es/components/Datagrid/common-column-ids.js +8 -0
  93. package/es/components/Datagrid/index.js +22 -0
  94. package/es/components/Datagrid/useActionsColumn.js +86 -0
  95. package/es/components/Datagrid/useColumnRightAlign.js +52 -0
  96. package/es/components/Datagrid/useCustomizeColumns.js +45 -0
  97. package/es/components/Datagrid/useDatagrid.js +44 -0
  98. package/es/components/Datagrid/useDefaultStringRenderer.js +48 -0
  99. package/es/components/Datagrid/useDisableSelectRows.js +84 -0
  100. package/es/components/Datagrid/useExpandedRow.js +52 -0
  101. package/es/components/Datagrid/useFlexResize.js +51 -0
  102. package/es/components/Datagrid/useFloatingScroll.js +88 -0
  103. package/es/components/Datagrid/useInfiniteScroll.js +54 -0
  104. package/es/components/Datagrid/useNestedRows.js +53 -0
  105. package/es/components/Datagrid/useOnRowClick.js +37 -0
  106. package/es/components/Datagrid/useParentDimensions.js +65 -0
  107. package/es/components/Datagrid/useResizeTable.js +40 -0
  108. package/es/components/Datagrid/useRowExpander.js +34 -0
  109. package/es/components/Datagrid/useRowIsMouseOver.js +61 -0
  110. package/es/components/Datagrid/useRowRenderer.js +30 -0
  111. package/es/components/Datagrid/useRowSize.js +56 -0
  112. package/es/components/Datagrid/useSelectAllToggle.js +74 -0
  113. package/es/components/Datagrid/useSelectRows.js +107 -0
  114. package/es/components/Datagrid/useSkeletonRows.js +32 -0
  115. package/es/components/Datagrid/useSortableColumns.js +110 -0
  116. package/es/components/Datagrid/useStickyColumn.js +183 -0
  117. package/es/components/MultiAddSelect/MultiAddSelect.js +150 -3
  118. package/es/components/PageHeader/PageHeader.js +3 -1
  119. package/es/components/SingleAddSelect/SingleAddSelect.js +90 -4
  120. package/es/components/TagSet/TagSet.js +13 -6
  121. package/es/components/Tearsheet/TearsheetShell.js +34 -10
  122. package/es/components/index.js +2 -1
  123. package/es/global/js/package-settings.js +4 -2
  124. package/lib/components/AddSelect/AddSelect.js +105 -41
  125. package/lib/components/AddSelect/AddSelectFilter.js +190 -0
  126. package/lib/components/AddSelect/add-select-utils.js +35 -2
  127. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +261 -177
  128. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +79 -23
  129. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +67 -21
  130. package/lib/components/DataSpreadsheet/hooks/index.js +45 -0
  131. package/lib/components/DataSpreadsheet/hooks/useMultipleKeyTracking.js +151 -0
  132. package/lib/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +2 -4
  133. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +79 -0
  134. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +1 -3
  135. package/lib/components/DataSpreadsheet/utils/createCellSelectionArea.js +21 -8
  136. package/lib/components/DataSpreadsheet/utils/generateData.js +17 -9
  137. package/lib/components/DataSpreadsheet/utils/getSelectionAreaPoints.js +27 -0
  138. package/lib/components/DataSpreadsheet/utils/getSpreadsheetWidth.js +40 -0
  139. package/lib/components/DataSpreadsheet/utils/handleActiveCellInSelectionEnter.js +127 -0
  140. package/lib/components/DataSpreadsheet/utils/handleActiveCellInSelectionTab.js +118 -0
  141. package/lib/components/DataSpreadsheet/utils/handleEditSubmit.js +94 -0
  142. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +44 -8
  143. package/lib/components/DataSpreadsheet/utils/handleMultipleKeys.js +235 -20
  144. package/lib/components/DataSpreadsheet/utils/selectAllCells.js +60 -0
  145. package/lib/components/Datagrid/Datagrid/Datagrid.js +86 -0
  146. package/lib/components/Datagrid/Datagrid/DatagridBody.js +50 -0
  147. package/lib/components/Datagrid/Datagrid/DatagridEmptyBody.js +31 -0
  148. package/lib/components/Datagrid/Datagrid/DatagridExpandedRow.js +38 -0
  149. package/lib/components/Datagrid/Datagrid/DatagridHead.js +43 -0
  150. package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +73 -0
  151. package/lib/components/Datagrid/Datagrid/DatagridRefBody.js +44 -0
  152. package/lib/components/Datagrid/Datagrid/DatagridRow.js +68 -0
  153. package/lib/components/Datagrid/Datagrid/DatagridSelectAll.js +55 -0
  154. package/lib/components/Datagrid/Datagrid/DatagridSelectAllWithToggle.js +139 -0
  155. package/lib/components/Datagrid/Datagrid/DatagridSimpleBody.js +44 -0
  156. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +35 -0
  157. package/lib/components/Datagrid/Datagrid/DatagridVirtualBody.js +101 -0
  158. package/lib/components/Datagrid/Datagrid/DraggableElement.js +210 -0
  159. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Actions.js +92 -0
  160. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/ButtonWrapper.js +65 -0
  161. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +166 -0
  162. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsModal.js +173 -0
  163. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/ModalWrapper.js +73 -0
  164. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/common.js +25 -0
  165. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/index.js +23 -0
  166. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +80 -0
  167. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +160 -0
  168. package/lib/components/Datagrid/Datagrid/addons/RowSize/index.js +15 -0
  169. package/lib/components/Datagrid/Datagrid/index.js +15 -0
  170. package/lib/components/Datagrid/Datagrid.stories/CustomizeColumnStory.js +13 -0
  171. package/lib/components/Datagrid/Datagrid.stories/LeftPanelStory.js +13 -0
  172. package/lib/components/Datagrid/Datagrid.stories/RowSizeDropdownStory.js +13 -0
  173. package/lib/components/Datagrid/Datagrid.stories/SelectAllWithToggleStory.js +13 -0
  174. package/lib/components/Datagrid/Datagrid.stories/StickyActionsColumnStory.js +112 -0
  175. package/lib/components/Datagrid/Datagrid.stories/common.js +215 -0
  176. package/lib/components/Datagrid/Datagrid.stories/index.js +47 -0
  177. package/lib/components/Datagrid/common-column-ids.js +16 -0
  178. package/lib/components/Datagrid/index.js +127 -0
  179. package/lib/components/Datagrid/useActionsColumn.js +94 -0
  180. package/lib/components/Datagrid/useColumnRightAlign.js +59 -0
  181. package/lib/components/Datagrid/useCustomizeColumns.js +55 -0
  182. package/lib/components/Datagrid/useDatagrid.js +58 -0
  183. package/lib/components/Datagrid/useDefaultStringRenderer.js +54 -0
  184. package/lib/components/Datagrid/useDisableSelectRows.js +92 -0
  185. package/lib/components/Datagrid/useExpandedRow.js +58 -0
  186. package/lib/components/Datagrid/useFlexResize.js +61 -0
  187. package/lib/components/Datagrid/useFloatingScroll.js +101 -0
  188. package/lib/components/Datagrid/useInfiniteScroll.js +67 -0
  189. package/lib/components/Datagrid/useNestedRows.js +65 -0
  190. package/lib/components/Datagrid/useOnRowClick.js +45 -0
  191. package/lib/components/Datagrid/useParentDimensions.js +75 -0
  192. package/lib/components/Datagrid/useResizeTable.js +48 -0
  193. package/lib/components/Datagrid/useRowExpander.js +45 -0
  194. package/lib/components/Datagrid/useRowIsMouseOver.js +66 -0
  195. package/lib/components/Datagrid/useRowRenderer.js +40 -0
  196. package/lib/components/Datagrid/useRowSize.js +67 -0
  197. package/lib/components/Datagrid/useSelectAllToggle.js +88 -0
  198. package/lib/components/Datagrid/useSelectRows.js +119 -0
  199. package/lib/components/Datagrid/useSkeletonRows.js +42 -0
  200. package/lib/components/Datagrid/useSortableColumns.js +117 -0
  201. package/lib/components/Datagrid/useStickyColumn.js +190 -0
  202. package/lib/components/MultiAddSelect/MultiAddSelect.js +150 -2
  203. package/lib/components/PageHeader/PageHeader.js +3 -1
  204. package/lib/components/SingleAddSelect/SingleAddSelect.js +91 -3
  205. package/lib/components/TagSet/TagSet.js +13 -6
  206. package/lib/components/Tearsheet/TearsheetShell.js +36 -10
  207. package/lib/components/index.js +9 -1
  208. package/lib/global/js/package-settings.js +4 -2
  209. package/package.json +16 -12
  210. package/scss/components/AboutModal/_about-modal.scss +4 -0
  211. package/scss/components/AddSelect/_add-select.scss +46 -2
  212. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +41 -4
  213. package/scss/components/Datagrid/_datagrid.scss +66 -0
  214. package/scss/components/Datagrid/_index.scss +8 -0
  215. package/scss/components/Datagrid/_storybook-styles.scss +26 -0
  216. package/scss/components/Datagrid/styles/_variables.scss +9 -0
  217. package/scss/components/Datagrid/styles/addons/CustomizeColumnsModal.scss +48 -0
  218. package/scss/components/Datagrid/styles/addons/RowSizeDropdown.scss +23 -0
  219. package/scss/components/Datagrid/styles/datagrid.scss +326 -0
  220. package/scss/components/Datagrid/styles/index.scss +17 -0
  221. package/scss/components/Datagrid/styles/useActionsColumn.scss +24 -0
  222. package/scss/components/Datagrid/styles/useColumnRightAlign.scss +29 -0
  223. package/scss/components/Datagrid/styles/useNestedRows.scss +17 -0
  224. package/scss/components/Datagrid/styles/useNestedTable.scss +28 -0
  225. package/scss/components/Datagrid/styles/useSelectAllToggle.scss +28 -0
  226. package/scss/components/Datagrid/styles/useSortableColumns.scss +55 -0
  227. package/scss/components/Datagrid/styles/useStickyColumn.scss +38 -0
  228. package/scss/components/ExportModal/_export-modal.scss +0 -4
  229. package/scss/components/Tearsheet/_tearsheet.scss +4 -0
  230. package/scss/components/_index.scss +1 -0
@@ -26,7 +26,6 @@ var useSpreadsheetOutsideClick = function useSpreadsheetOutsideClick(_ref) {
26
26
  setSelectionAreas = _ref.setSelectionAreas,
27
27
  removeActiveCell = _ref.removeActiveCell,
28
28
  setContainerHasFocus = _ref.setContainerHasFocus,
29
- activeKeys = _ref.activeKeys,
30
29
  removeCellEditor = _ref.removeCellEditor;
31
30
  (0, _react.useEffect)(function () {
32
31
  var handleOutsideClick = function handleOutsideClick(event) {
@@ -42,14 +41,13 @@ var useSpreadsheetOutsideClick = function useSpreadsheetOutsideClick(_ref) {
42
41
  });
43
42
  setContainerHasFocus(false);
44
43
  removeCellEditor();
45
- activeKeys.current = [];
46
44
  };
47
45
 
48
46
  document.addEventListener('click', handleOutsideClick);
49
47
  return function () {
50
48
  document.removeEventListener('click', handleOutsideClick);
51
49
  };
52
- }, [spreadsheetRef, removeActiveCell, activeKeys, blockClass, setActiveCellCoordinates, setContainerHasFocus, setSelectionAreas, removeCellEditor]);
50
+ }, [spreadsheetRef, removeActiveCell, blockClass, setActiveCellCoordinates, setContainerHasFocus, setSelectionAreas, removeCellEditor]);
53
51
  };
54
52
 
55
53
  exports.useSpreadsheetOutsideClick = useSpreadsheetOutsideClick;
@@ -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 = {
@@ -33,28 +33,36 @@ var range = function range(len) {
33
33
  return arr;
34
34
  };
35
35
 
36
- var newPet = function newPet() {
37
- return {
36
+ var newPet = function newPet(extraColumns) {
37
+ var extraDataProps = extraColumns && {
38
+ ownerName: petNames[Math.floor(Math.random() * petNames.length)],
39
+ weight: Math.floor(Math.random() * 40)
40
+ };
41
+ var defaultPet = {
38
42
  petType: pets[Math.floor(Math.random() * pets.length)],
39
43
  firstName: petNames[Math.floor(Math.random() * petNames.length)],
40
44
  age: Math.floor(Math.random() * 30),
41
45
  visits: Math.floor(Math.random() * 40),
42
46
  health: Math.floor(Math.random() * 100)
43
47
  };
44
- };
45
48
 
46
- var generateData = function generateData() {
47
- for (var _len = arguments.length, lens = new Array(_len), _key = 0; _key < _len; _key++) {
48
- lens[_key] = arguments[_key];
49
+ if (extraColumns) {
50
+ return _objectSpread(_objectSpread({}, defaultPet), extraDataProps);
49
51
  }
50
52
 
53
+ return defaultPet;
54
+ };
55
+
56
+ var generateData = function generateData(_ref) {
57
+ var rows = _ref.rows,
58
+ extraColumns = _ref.extraColumns;
59
+
51
60
  var makeDataLevel = function makeDataLevel() {
52
61
  var depth = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
62
+ var lens = [rows];
53
63
  var len = lens[depth];
54
64
  return range(len).map(function () {
55
- return _objectSpread(_objectSpread({}, newPet()), {}, {
56
- subRows: lens[depth + 1] ? makeDataLevel(depth + 1) : undefined
57
- });
65
+ return _objectSpread({}, newPet(extraColumns));
58
66
  });
59
67
  };
60
68
 
@@ -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,40 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getSpreadsheetWidth = void 0;
7
+
8
+ var _layout = require("@carbon/layout");
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 getSpreadsheetWidth = function getSpreadsheetWidth(_ref) {
17
+ var type = _ref.type,
18
+ headerGroup = _ref.headerGroup,
19
+ scrollBarSizeValue = _ref.scrollBarSizeValue,
20
+ totalVisibleColumns = _ref.totalVisibleColumns,
21
+ defaultColumn = _ref.defaultColumn,
22
+ totalColumnsWidth = _ref.totalColumnsWidth;
23
+ var additionalWidth = scrollBarSizeValue + defaultColumn.rowHeaderWidth;
24
+
25
+ if (!totalVisibleColumns) {
26
+ if (type === 'header') {
27
+ return (0, _layout.px)(parseInt(headerGroup.getHeaderGroupProps().style.width) + additionalWidth);
28
+ }
29
+
30
+ if (type !== 'header') {
31
+ return totalColumnsWidth + additionalWidth;
32
+ }
33
+ }
34
+
35
+ if (totalVisibleColumns) {
36
+ return totalVisibleColumns * (defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.width) + additionalWidth;
37
+ }
38
+ };
39
+
40
+ exports.getSpreadsheetWidth = getSpreadsheetWidth;
@@ -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;
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.handleEditSubmit = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _removeCellSelections = require("./removeCellSelections");
13
+
14
+ var _uuidv = _interopRequireDefault(require("../../../global/js/utils/uuidv4"));
15
+
16
+ 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; }
17
+
18
+ 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; }
19
+
20
+ // Update the data
21
+ var handleEditSubmit = function handleEditSubmit(_ref) {
22
+ var activeCellCoordinates = _ref.activeCellCoordinates,
23
+ cellEditorRulerRef = _ref.cellEditorRulerRef,
24
+ columns = _ref.columns,
25
+ previousState = _ref.previousState,
26
+ removeCellEditor = _ref.removeCellEditor,
27
+ rows = _ref.rows,
28
+ setActiveCellCoordinates = _ref.setActiveCellCoordinates,
29
+ setCurrentMatcher = _ref.setCurrentMatcher,
30
+ setSelectionAreas = _ref.setSelectionAreas,
31
+ spreadsheetRef = _ref.spreadsheetRef,
32
+ updateData = _ref.updateData;
33
+ return function (event) {
34
+ var key = event.key;
35
+
36
+ var updateSelectionAreaOnCellEditSubmit = function updateSelectionAreaOnCellEditSubmit(_ref2) {
37
+ var type = _ref2.type;
38
+
39
+ var submitEditChanges = function submitEditChanges() {
40
+ var prevCoords = previousState === null || previousState === void 0 ? void 0 : previousState.activeCellCoordinates;
41
+ var cellProps = rows[prevCoords === null || prevCoords === void 0 ? void 0 : prevCoords.row].cells[prevCoords === null || prevCoords === void 0 ? void 0 : prevCoords.column];
42
+ removeCellEditor();
43
+ updateData(prevCoords === null || prevCoords === void 0 ? void 0 : prevCoords.row, cellProps.column.id);
44
+ };
45
+
46
+ (0, _removeCellSelections.removeCellSelections)({
47
+ spreadsheetRef: spreadsheetRef
48
+ });
49
+ submitEditChanges();
50
+ var tempMatcher = (0, _uuidv.default)();
51
+ var newSelectionArea = {
52
+ row: type === 'Enter' ? activeCellCoordinates.row === rows.length - 1 ? activeCellCoordinates.row : activeCellCoordinates.row + 1 : activeCellCoordinates.row,
53
+ column: type === 'Tab' ? activeCellCoordinates.column === columns.length - 1 ? activeCellCoordinates.column : activeCellCoordinates.column + 1 : activeCellCoordinates.column
54
+ };
55
+ setSelectionAreas([{
56
+ point1: newSelectionArea,
57
+ point2: newSelectionArea,
58
+ matcher: tempMatcher,
59
+ areaCreated: false
60
+ }]);
61
+ setCurrentMatcher(tempMatcher);
62
+ cellEditorRulerRef.current.textContent = '';
63
+ };
64
+
65
+ if (key === 'Enter') {
66
+ updateSelectionAreaOnCellEditSubmit({
67
+ type: 'Enter'
68
+ });
69
+ setActiveCellCoordinates(function (prev) {
70
+ return _objectSpread(_objectSpread({}, prev), {}, {
71
+ row: prev.row === rows.length - 1 ? prev.row : prev.row + 1 // do not move to next cell below if we're already in the last row
72
+
73
+ });
74
+ });
75
+ }
76
+
77
+ if (key === 'Tab') {
78
+ event.preventDefault();
79
+ updateSelectionAreaOnCellEditSubmit({
80
+ type: 'Tab'
81
+ });
82
+ setActiveCellCoordinates(function (prev) {
83
+ return _objectSpread(_objectSpread({}, prev), {}, {
84
+ column: prev.column === columns.length - 1 ? prev.column : prev.column + 1 // do not move to next cell below if we're already in the last column
85
+
86
+ });
87
+ });
88
+ }
89
+
90
+ return;
91
+ };
92
+ };
93
+
94
+ exports.handleEditSubmit = handleEditSubmit;
@@ -7,10 +7,16 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.handleHeaderCellSelection = void 0;
9
9
 
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
12
+ var _deepCloneObject = require("../../../global/js/utils/deepCloneObject");
13
+
10
14
  var _uuidv = _interopRequireDefault(require("../../../global/js/utils/uuidv4"));
11
15
 
12
16
  var _removeCellSelections = require("./removeCellSelections");
13
17
 
18
+ var _checkActiveHeaderCell = require("./checkActiveHeaderCell");
19
+
14
20
  /**
15
21
  * Copyright IBM Corp. 2022, 2022
16
22
  *
@@ -28,8 +34,16 @@ var handleHeaderCellSelection = function handleHeaderCellSelection(_ref) {
28
34
  spreadsheetRef = _ref.spreadsheetRef,
29
35
  index = _ref.index,
30
36
  isKeyboard = _ref.isKeyboard,
31
- setSelectionAreaData = _ref.setSelectionAreaData;
32
- setSelectionAreaData([]);
37
+ setSelectionAreaData = _ref.setSelectionAreaData,
38
+ isHoldingCommandKey = _ref.isHoldingCommandKey;
39
+
40
+ if (!isHoldingCommandKey) {
41
+ setSelectionAreaData([]);
42
+ (0, _removeCellSelections.removeCellSelections)({
43
+ spreadsheetRef: spreadsheetRef
44
+ });
45
+ }
46
+
33
47
  var rowValue = isKeyboard ? activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row : index;
34
48
  var columnValue = isKeyboard ? activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column : index;
35
49
  var point1 = {
@@ -47,15 +61,37 @@ var handleHeaderCellSelection = function handleHeaderCellSelection(_ref) {
47
61
  column: type === 'column' ? columnValue : 0
48
62
  });
49
63
  setCurrentMatcher(tempMatcher);
50
- (0, _removeCellSelections.removeCellSelections)({
51
- spreadsheetRef: spreadsheetRef
52
- });
53
- setSelectionAreas([{
64
+ var newSelectionArea = {
54
65
  point1: point1,
55
66
  point2: point2,
56
67
  areaCreated: false,
57
- matcher: tempMatcher
58
- }]);
68
+ matcher: tempMatcher,
69
+ header: {
70
+ type: type,
71
+ index: index
72
+ }
73
+ };
74
+ setSelectionAreas(function (prev) {
75
+ var selectionsClone = (0, _deepCloneObject.deepCloneObject)(prev);
76
+
77
+ if (isHoldingCommandKey) {
78
+ var selectionsFromHeaderCell = selectionsClone.filter(function (item) {
79
+ return item.header.type;
80
+ });
81
+ var previouslyCreatedHeaderSelection = selectionsFromHeaderCell.filter(function (item) {
82
+ return item.header.type === type;
83
+ });
84
+ var isHeaderPartOfPreviousSelection = (0, _checkActiveHeaderCell.checkActiveHeaderCell)(index, previouslyCreatedHeaderSelection, type); // Prevents row/column header selections from being created multiple times
85
+
86
+ if (previouslyCreatedHeaderSelection.length && isHeaderPartOfPreviousSelection) {
87
+ return prev;
88
+ }
89
+
90
+ return [].concat((0, _toConsumableArray2.default)(prev), [newSelectionArea]);
91
+ }
92
+
93
+ return [newSelectionArea];
94
+ });
59
95
  };
60
96
 
61
97
  exports.handleHeaderCellSelection = handleHeaderCellSelection;