@carbon/ibm-products 1.17.0 → 1.18.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 (46) hide show
  1. package/README.md +30 -27
  2. package/css/index-full-carbon.css +144 -78
  3. package/css/index-full-carbon.css.map +1 -1
  4. package/css/index-full-carbon.min.css +4 -4
  5. package/css/index-full-carbon.min.css.map +1 -1
  6. package/css/index-without-carbon.css +27 -12
  7. package/css/index-without-carbon.css.map +1 -1
  8. package/css/index-without-carbon.min.css +2 -2
  9. package/css/index-without-carbon.min.css.map +1 -1
  10. package/css/index.css +53 -43
  11. package/css/index.css.map +1 -1
  12. package/css/index.min.css +4 -4
  13. package/css/index.min.css.map +1 -1
  14. package/es/components/AddSelect/AddSelect.js +30 -6
  15. package/es/components/AddSelect/AddSelectColumn.js +31 -73
  16. package/es/components/AddSelect/AddSelectFilter.js +2 -2
  17. package/es/components/AddSelect/AddSelectSort.js +61 -0
  18. package/es/components/AddSelect/add-select-utils.js +21 -0
  19. package/es/components/AddSelect/hooks/useItemSort.js +20 -0
  20. package/es/components/DataSpreadsheet/DataSpreadsheet.js +26 -13
  21. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +51 -40
  22. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +60 -3
  23. package/es/components/DataSpreadsheet/hooks/index.js +3 -1
  24. package/es/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +15 -14
  25. package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +60 -0
  26. package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +153 -0
  27. package/es/components/DataSpreadsheet/utils/createCellSelectionArea.js +3 -3
  28. package/es/components/DataSpreadsheet/utils/moveColumnIndicatorLine.js +34 -0
  29. package/lib/components/AddSelect/AddSelect.js +31 -6
  30. package/lib/components/AddSelect/AddSelectColumn.js +32 -71
  31. package/lib/components/AddSelect/AddSelectFilter.js +2 -2
  32. package/lib/components/AddSelect/AddSelectSort.js +79 -0
  33. package/lib/components/AddSelect/add-select-utils.js +29 -2
  34. package/lib/components/AddSelect/hooks/useItemSort.js +33 -0
  35. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +25 -12
  36. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +52 -39
  37. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +62 -3
  38. package/lib/components/DataSpreadsheet/hooks/index.js +17 -1
  39. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +14 -14
  40. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +74 -0
  41. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +161 -0
  42. package/lib/components/DataSpreadsheet/utils/createCellSelectionArea.js +3 -3
  43. package/lib/components/DataSpreadsheet/utils/moveColumnIndicatorLine.js +45 -0
  44. package/package.json +11 -10
  45. package/scss/components/AddSelect/_add-select.scss +6 -0
  46. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +21 -13
@@ -11,14 +11,17 @@ var _excluded = ["columnInputPlaceholder", "filteredItems", "header", "multiSele
11
11
  //
12
12
  import React, { useState, useEffect } from 'react';
13
13
  import PropTypes from 'prop-types';
14
- import { TextInput, Tag, OverflowMenu, OverflowMenuItem, Checkbox } from 'carbon-components-react';
15
- import { Filter32, ArrowsVertical32, ArrowUp16, ArrowDown16 } from '@carbon/icons-react';
14
+ import { TextInput, Tag, OverflowMenu, Checkbox } from 'carbon-components-react';
15
+ import { Filter32 } from '@carbon/icons-react';
16
16
  import { pkg, carbon } from '../../settings';
17
17
  import { AddSelectList } from './AddSelectList';
18
+ import { AddSelectSort } from './AddSelectSort';
19
+ import { sortItems, getSortBy } from './add-select-utils';
20
+ import { useItemSort } from './hooks/useItemSort';
18
21
  import uuidv4 from '../../global/js/utils/uuidv4';
19
22
  var componentName = 'AddSelect';
20
23
  export var AddSelectColumn = function AddSelectColumn(_ref) {
21
- var _filteredItems$find, _filteredItems$find2;
24
+ var _filteredItems$find;
22
25
 
23
26
  var columnInputPlaceholder = _ref.columnInputPlaceholder,
24
27
  filteredItems = _ref.filteredItems,
@@ -37,20 +40,16 @@ export var AddSelectColumn = function AddSelectColumn(_ref) {
37
40
  searchTerm = _useState4[0],
38
41
  setSearchTerm = _useState4[1];
39
42
 
40
- var _useState5 = useState(''),
41
- _useState6 = _slicedToArray(_useState5, 2),
42
- sortDirection = _useState6[0],
43
- setSortDirection = _useState6[1];
44
-
45
- var _useState7 = useState(''),
46
- _useState8 = _slicedToArray(_useState7, 2),
47
- sortAttribute = _useState8[0],
48
- setSortAttribute = _useState8[1];
43
+ var _useItemSort = useItemSort(),
44
+ sortDirection = _useItemSort.sortDirection,
45
+ setSortDirection = _useItemSort.setSortDirection,
46
+ sortAttribute = _useItemSort.sortAttribute,
47
+ setSortAttribute = _useItemSort.setSortAttribute;
49
48
 
50
- var _useState9 = useState([]),
51
- _useState10 = _slicedToArray(_useState9, 2),
52
- filters = _useState10[0],
53
- setFilters = _useState10[1];
49
+ var _useState5 = useState([]),
50
+ _useState6 = _slicedToArray(_useState5, 2),
51
+ filters = _useState6[0],
52
+ setFilters = _useState6[1];
54
53
 
55
54
  var blockClass = "".concat(pkg.prefix, "--add-select");
56
55
  var colClass = "".concat(blockClass, "__column");
@@ -59,39 +58,14 @@ export var AddSelectColumn = function AddSelectColumn(_ref) {
59
58
  return multiSelection.includes(item.id);
60
59
  });
61
60
  setAllSelected(isAllSelected);
62
- }, [filteredItems, multiSelection]); // sorting
63
-
64
- var colSortBy = (_filteredItems$find = filteredItems.find(function (item) {
65
- return item.sortBy;
66
- })) === null || _filteredItems$find === void 0 ? void 0 : _filteredItems$find.sortBy;
67
- var sortByOpts = colSortBy ? colSortBy.reduce(function (acc, cur) {
68
- var opts = [{
69
- id: "".concat(cur, "-asc"),
70
- itemText: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ArrowUp16, null), cur),
71
- direction: 'asc',
72
- attribute: cur
73
- }, {
74
- id: "".concat(cur, "-desc"),
75
- itemText: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ArrowDown16, null), cur),
76
- direction: 'desc',
77
- attribute: cur
78
- }];
79
- return [].concat(_toConsumableArray(acc), opts);
80
- }, []) : []; // filtering
81
-
82
- var colFilterBy = (_filteredItems$find2 = filteredItems.find(function (item) {
61
+ }, [filteredItems, multiSelection]); // filtering
62
+
63
+ var colFilterBy = (_filteredItems$find = filteredItems.find(function (item) {
83
64
  return item.filterBy;
84
- })) === null || _filteredItems$find2 === void 0 ? void 0 : _filteredItems$find2.filterBy;
65
+ })) === null || _filteredItems$find === void 0 ? void 0 : _filteredItems$find.filterBy;
85
66
  var filterByOpts = colFilterBy ? filteredItems.map(function (item) {
86
67
  return item[colFilterBy];
87
- }) : []; // handlers
88
-
89
- var sortHandler = function sortHandler(_ref2) {
90
- var direction = _ref2.direction,
91
- attribute = _ref2.attribute;
92
- setSortAttribute(attribute);
93
- setSortDirection(direction);
94
- };
68
+ }) : [];
95
69
 
96
70
  var selectAllHandler = function selectAllHandler(checked) {
97
71
  var itemIds = filteredItems.map(function (item) {
@@ -138,22 +112,11 @@ export var AddSelectColumn = function AddSelectColumn(_ref) {
138
112
  });
139
113
  };
140
114
 
141
- var sortItems = function sortItems(a, b) {
142
- var _a$sortAttribute, _b$sortAttribute;
143
-
144
- var valueA = (_a$sortAttribute = a[sortAttribute]) === null || _a$sortAttribute === void 0 ? void 0 : _a$sortAttribute.split(' ').join('');
145
- var valueB = (_b$sortAttribute = b[sortAttribute]) === null || _b$sortAttribute === void 0 ? void 0 : _b$sortAttribute.split(' ').join('');
146
-
147
- if (sortDirection === 'desc') {
148
- return valueA > valueB ? -1 : 1;
149
- }
150
-
151
- return valueA < valueB ? -1 : 1;
152
- };
153
-
115
+ var sortFn = sortItems(sortAttribute, sortDirection);
116
+ var sortBy = getSortBy(filteredItems);
154
117
  var colItems = filteredItems.filter(filterBySearch) // first check if the item meets the search
155
118
  .filter(filterByAttribute) // then check if the item is included in the filter
156
- .sort(sortItems); // then sort the items by whatever criteria
119
+ .sort(sortFn); // then sort the items by whatever criteria
157
120
 
158
121
  return /*#__PURE__*/React.createElement("div", {
159
122
  className: colClass
@@ -171,19 +134,14 @@ export var AddSelectColumn = function AddSelectColumn(_ref) {
171
134
  labelText: columnInputPlaceholder
172
135
  }), /*#__PURE__*/React.createElement("div", {
173
136
  className: "".concat(colClass, "-sort-filter")
174
- }, sortByOpts.length > 0 && /*#__PURE__*/React.createElement(OverflowMenu, {
175
- renderIcon: ArrowsVertical32,
176
- className: "".concat(colClass, "-overflow"),
177
- flipped: true
178
- }, sortByOpts.map(function (opt) {
179
- return /*#__PURE__*/React.createElement(OverflowMenuItem, {
180
- key: opt.id,
181
- itemText: opt.itemText,
182
- onClick: function onClick() {
183
- return sortHandler(opt);
184
- }
185
- });
186
- })), filterByOpts.length > 0 && /*#__PURE__*/React.createElement(OverflowMenu, {
137
+ }, /*#__PURE__*/React.createElement(AddSelectSort, {
138
+ items: filteredItems,
139
+ setSortAttribute: setSortAttribute,
140
+ setSortDirection: setSortDirection,
141
+ sortAttribute: sortAttribute,
142
+ sortDirection: sortDirection,
143
+ sortBy: sortBy
144
+ }), filterByOpts.length > 0 && /*#__PURE__*/React.createElement(OverflowMenu, {
187
145
  renderIcon: Filter32,
188
146
  className: "".concat(colClass, "-overflow"),
189
147
  flipped: true
@@ -88,7 +88,7 @@ export var AddSelectFilter = function AddSelectFilter(_ref) {
88
88
  };
89
89
 
90
90
  var showFilter = multi && (filterOpts === null || filterOpts === void 0 ? void 0 : filterOpts.length) > 0;
91
- return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
91
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
92
92
  className: "".concat(blockClass, "-search")
93
93
  }, /*#__PURE__*/React.createElement(TextInput, {
94
94
  id: "temp-id",
@@ -107,7 +107,7 @@ export var AddSelectFilter = function AddSelectFilter(_ref) {
107
107
  className: "".concat(blockClass, "-toggle"),
108
108
  size: "md"
109
109
  }), open && /*#__PURE__*/React.createElement("div", {
110
- className: "".concat(blockClass)
110
+ className: blockClass
111
111
  }, /*#__PURE__*/React.createElement("div", {
112
112
  className: "".concat(blockClass, "-content")
113
113
  }, /*#__PURE__*/React.createElement("p", null, "Filters"), /*#__PURE__*/React.createElement("div", {
@@ -0,0 +1,61 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ //
3
+ // Copyright IBM Corp. 2022
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
+ import React from 'react';
9
+ import PropTypes from 'prop-types';
10
+ import { OverflowMenu, OverflowMenuItem } from 'carbon-components-react';
11
+ import { ArrowsVertical32, ArrowUp16, ArrowDown16 } from '@carbon/icons-react';
12
+ import { pkg } from '../../settings';
13
+ var componentName = 'AddSelect';
14
+ export var AddSelectSort = function AddSelectSort(_ref) {
15
+ var setSortAttribute = _ref.setSortAttribute,
16
+ setSortDirection = _ref.setSortDirection,
17
+ sortBy = _ref.sortBy;
18
+ var blockClass = "".concat(pkg.prefix, "--add-select-sort");
19
+ var sortByOpts = sortBy ? sortBy.reduce(function (acc, cur) {
20
+ var opts = [{
21
+ id: "".concat(cur, "-asc"),
22
+ itemText: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ArrowUp16, null), cur),
23
+ direction: 'asc',
24
+ attribute: cur
25
+ }, {
26
+ id: "".concat(cur, "-desc"),
27
+ itemText: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ArrowDown16, null), cur),
28
+ direction: 'desc',
29
+ attribute: cur
30
+ }];
31
+ return [].concat(_toConsumableArray(acc), opts);
32
+ }, []) : []; // handlers
33
+
34
+ var sortHandler = function sortHandler(_ref2) {
35
+ var direction = _ref2.direction,
36
+ attribute = _ref2.attribute;
37
+ setSortAttribute(attribute);
38
+ setSortDirection(direction);
39
+ };
40
+
41
+ return /*#__PURE__*/React.createElement("div", {
42
+ className: blockClass
43
+ }, sortByOpts.length > 0 && /*#__PURE__*/React.createElement(OverflowMenu, {
44
+ renderIcon: ArrowsVertical32,
45
+ flipped: true
46
+ }, sortByOpts.map(function (opt) {
47
+ return /*#__PURE__*/React.createElement(OverflowMenuItem, {
48
+ key: opt.id,
49
+ itemText: opt.itemText,
50
+ onClick: function onClick() {
51
+ return sortHandler(opt);
52
+ }
53
+ });
54
+ })));
55
+ };
56
+ AddSelectSort.propTypes = {
57
+ setSortAttribute: PropTypes.func,
58
+ setSortDirection: PropTypes.func,
59
+ sortBy: PropTypes.array
60
+ };
61
+ AddSelectSort.displayName = componentName;
@@ -91,4 +91,25 @@ export var getGlobalFilterValues = function getGlobalFilterValues(globalFilters,
91
91
  return prevFilter;
92
92
  }, []);
93
93
  return filterOpts;
94
+ };
95
+ export var sortItems = function sortItems(attribute, direction) {
96
+ return function (a, b) {
97
+ var _a$attribute, _b$attribute;
98
+
99
+ var valueA = (_a$attribute = a[attribute]) === null || _a$attribute === void 0 ? void 0 : _a$attribute.split(' ').join('');
100
+ var valueB = (_b$attribute = b[attribute]) === null || _b$attribute === void 0 ? void 0 : _b$attribute.split(' ').join('');
101
+
102
+ if (direction === 'desc') {
103
+ return valueA > valueB ? -1 : 1;
104
+ }
105
+
106
+ return valueA < valueB ? -1 : 1;
107
+ };
108
+ };
109
+ export var getSortBy = function getSortBy(items) {
110
+ var _items$find;
111
+
112
+ return (_items$find = items.find(function (item) {
113
+ return item.sortBy;
114
+ })) === null || _items$find === void 0 ? void 0 : _items$find.sortBy;
94
115
  };
@@ -0,0 +1,20 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import { useState } from 'react';
3
+ export var useItemSort = function useItemSort() {
4
+ var _useState = useState(''),
5
+ _useState2 = _slicedToArray(_useState, 2),
6
+ sortDirection = _useState2[0],
7
+ setSortDirection = _useState2[1];
8
+
9
+ var _useState3 = useState(''),
10
+ _useState4 = _slicedToArray(_useState3, 2),
11
+ sortAttribute = _useState4[0],
12
+ setSortAttribute = _useState4[1];
13
+
14
+ return {
15
+ sortDirection: sortDirection,
16
+ setSortDirection: setSortDirection,
17
+ sortAttribute: sortAttribute,
18
+ setSortAttribute: setSortAttribute
19
+ };
20
+ };
@@ -17,7 +17,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
17
17
  */
18
18
  // Import portions of React that are needed.
19
19
  import React, { useMemo, useRef, useState, useCallback, useEffect } from 'react';
20
- import { useBlockLayout, useTable } from 'react-table'; // Other standard imports.
20
+ import { useBlockLayout, useTable, useColumnOrder } from 'react-table'; // Other standard imports.
21
21
 
22
22
  import PropTypes from 'prop-types';
23
23
  import cx from 'classnames';
@@ -125,8 +125,13 @@ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref)
125
125
 
126
126
  var _useState17 = useState(false),
127
127
  _useState18 = _slicedToArray(_useState17, 2),
128
- activeCellInsideSelectionArea = _useState18[0],
129
- setActiveCellInsideSelectionArea = _useState18[1];
128
+ headerCellHoldActive = _useState18[0],
129
+ setHeaderCellHoldActive = _useState18[1];
130
+
131
+ var _useState19 = useState(false),
132
+ _useState20 = _slicedToArray(_useState19, 2),
133
+ activeCellInsideSelectionArea = _useState20[0],
134
+ setActiveCellInsideSelectionArea = _useState20[1];
130
135
 
131
136
  var previousState = usePreviousValue({
132
137
  activeCellCoordinates: activeCellCoordinates,
@@ -135,10 +140,10 @@ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref)
135
140
  var cellSizeValue = getCellSize(cellSize);
136
141
  var cellEditorRef = useRef();
137
142
 
138
- var _useState19 = useState(),
139
- _useState20 = _slicedToArray(_useState19, 2),
140
- activeCellContent = _useState20[0],
141
- setActiveCellContent = _useState20[1];
143
+ var _useState21 = useState(),
144
+ _useState22 = _slicedToArray(_useState21, 2),
145
+ activeCellContent = _useState22[0],
146
+ setActiveCellContent = _useState22[1];
142
147
 
143
148
  var activeCellRef = useRef();
144
149
  var cellEditorRulerRef = useRef();
@@ -166,13 +171,15 @@ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref)
166
171
  columns: columns,
167
172
  data: data,
168
173
  defaultColumn: defaultColumn
169
- }, useBlockLayout),
174
+ }, useBlockLayout, useColumnOrder),
170
175
  getTableProps = _useTable.getTableProps,
171
176
  getTableBodyProps = _useTable.getTableBodyProps,
172
177
  headerGroups = _useTable.headerGroups,
173
178
  rows = _useTable.rows,
174
179
  totalColumnsWidth = _useTable.totalColumnsWidth,
175
- prepareRow = _useTable.prepareRow; // Update the spreadsheet data after editing a cell
180
+ prepareRow = _useTable.prepareRow,
181
+ setColumnOrder = _useTable.setColumnOrder,
182
+ visibleColumns = _useTable.visibleColumns; // Update the spreadsheet data after editing a cell
176
183
 
177
184
 
178
185
  var updateData = useCallback(function (rowIndex, columnId) {
@@ -575,8 +582,9 @@ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref)
575
582
 
576
583
  var startEditMode = function startEditMode() {
577
584
  setIsEditing(true);
585
+ setClickAndHoldActive(false);
578
586
  var activeCellFullData = typeof (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'number' && typeof (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'number' ? rows[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row].cells[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column] : null;
579
- var activeCellValue = activeCellFullData ? Object.values(activeCellFullData.row.values)[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column] : null;
587
+ var activeCellValue = activeCellFullData ? activeCellFullData.row.cells[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column].value : null;
580
588
  setCellEditorValue(activeCellValue);
581
589
  cellEditorRulerRef.current.textContent = activeCellValue;
582
590
  cellEditorRef.current.style.width = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.width;
@@ -700,7 +708,7 @@ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref)
700
708
  activeCellRef: activeCellRef,
701
709
  cellEditorRef: cellEditorRef,
702
710
  cellEditorRulerRef: cellEditorRulerRef,
703
- columns: columns,
711
+ visibleColumns: visibleColumns,
704
712
  defaultColumn: defaultColumn,
705
713
  cellEditorValue: cellEditorValue
706
714
  });
@@ -770,7 +778,9 @@ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref)
770
778
  setCurrentMatcher: setCurrentMatcher,
771
779
  setSelectionAreaData: setSelectionAreaData,
772
780
  totalVisibleColumns: totalVisibleColumns,
773
- updateActiveCellCoordinates: updateActiveCellCoordinates
781
+ updateActiveCellCoordinates: updateActiveCellCoordinates,
782
+ setHeaderCellHoldActive: setHeaderCellHoldActive,
783
+ headerCellHoldActive: headerCellHoldActive
774
784
  }), /*#__PURE__*/React.createElement(DataSpreadsheetBody, {
775
785
  activeCellCoordinates: activeCellCoordinates,
776
786
  ref: spreadsheetRef,
@@ -799,7 +809,10 @@ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref)
799
809
  columns: columns,
800
810
  defaultEmptyRowCount: defaultEmptyRowCount,
801
811
  setActiveCellInsideSelectionArea: setActiveCellInsideSelectionArea,
802
- totalVisibleColumns: totalVisibleColumns
812
+ totalVisibleColumns: totalVisibleColumns,
813
+ setHeaderCellHoldActive: setHeaderCellHoldActive,
814
+ setColumnOrder: setColumnOrder,
815
+ visibleColumns: visibleColumns
803
816
  }), /*#__PURE__*/React.createElement("button", {
804
817
  onMouseDown: handleActiveCellMouseDown,
805
818
  onClick: handleActiveCellClick,
@@ -1,6 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
5
 
5
6
  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; }
6
7
 
@@ -12,7 +13,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
12
13
  * This source code is licensed under the Apache-2.0 license found in the
13
14
  * LICENSE file in the root directory of this source tree.
14
15
  */
15
- import React, { useRef, useCallback, useEffect, forwardRef } from 'react';
16
+ import React, { useRef, useCallback, useEffect, forwardRef, useState } from 'react';
16
17
  import PropTypes from 'prop-types';
17
18
  import { FixedSizeList } from 'react-window';
18
19
  import cx from 'classnames';
@@ -27,6 +28,7 @@ import { checkActiveHeaderCell } from './utils/checkActiveHeaderCell';
27
28
  import { checkSelectedHeaderCell } from './utils/checkSelectedHeaderCell';
28
29
  import { handleHeaderCellSelection } from './utils/handleHeaderCellSelection';
29
30
  import { getSpreadsheetWidth } from './utils/getSpreadsheetWidth';
31
+ import { useSpreadsheetMouseUp } from './hooks';
30
32
  var blockClass = "".concat(pkg.prefix, "--data-spreadsheet");
31
33
  export var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
32
34
  var columns = _ref.columns,
@@ -53,7 +55,16 @@ export var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
53
55
  setCurrentMatcher = _ref.setCurrentMatcher,
54
56
  onSelectionAreaChange = _ref.onSelectionAreaChange,
55
57
  setActiveCellInsideSelectionArea = _ref.setActiveCellInsideSelectionArea,
56
- totalVisibleColumns = _ref.totalVisibleColumns;
58
+ totalVisibleColumns = _ref.totalVisibleColumns,
59
+ setHeaderCellHoldActive = _ref.setHeaderCellHoldActive,
60
+ setColumnOrder = _ref.setColumnOrder,
61
+ visibleColumns = _ref.visibleColumns;
62
+
63
+ var _useState = useState(false),
64
+ _useState2 = _slicedToArray(_useState, 2),
65
+ validStartingPoint = _useState2[0],
66
+ setValidStartingPoint = _useState2[1];
67
+
57
68
  var contentScrollRef = useRef();
58
69
  var previousState = usePreviousValue({
59
70
  selectionAreaData: selectionAreaData,
@@ -115,18 +126,18 @@ export var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
115
126
  ref: ref,
116
127
  area: area,
117
128
  blockClass: blockClass,
118
- columns: columns,
119
129
  defaultColumn: defaultColumn,
120
130
  selectionAreas: selectionAreas,
121
131
  setSelectionAreas: setSelectionAreas,
122
- setActiveCellInsideSelectionArea: setActiveCellInsideSelectionArea
132
+ setActiveCellInsideSelectionArea: setActiveCellInsideSelectionArea,
133
+ visibleColumns: visibleColumns
123
134
  });
124
135
  }
125
136
 
126
137
  return;
127
138
  });
128
139
  }
129
- }, [selectionAreas, setSelectionAreas, defaultColumn, onSelectionAreaChange, setSelectionAreaData, ref, activeCellCoordinates, setActiveCellInsideSelectionArea, columns]);
140
+ }, [selectionAreas, setSelectionAreas, defaultColumn, onSelectionAreaChange, setSelectionAreaData, ref, activeCellCoordinates, setActiveCellInsideSelectionArea, visibleColumns]);
130
141
 
131
142
  var populateSelectionAreaCellData = function populateSelectionAreaCellData(_ref2) {
132
143
  var rowStart = _ref2.rowStart,
@@ -142,41 +153,23 @@ export var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
142
153
  }
143
154
 
144
155
  return cellContainer;
145
- }; // Mouse up
146
-
147
-
148
- useEffect(function () {
149
- var handleMouseUp = function handleMouseUp(event) {
150
- setClickAndHoldActive(false);
151
- var cellButton = event.target.closest(".".concat(blockClass, "__body--td"));
152
-
153
- if (cellButton) {
154
- var endCellCoordinates = {
155
- row: Number(cellButton.getAttribute('data-row-index')),
156
- column: Number(cellButton.getAttribute('data-column-index'))
157
- };
158
- setSelectionAreas(function (prev) {
159
- var selectionAreaClone = deepCloneObject(prev);
160
- var indexOfItemToUpdate = selectionAreaClone.findIndex(function (item) {
161
- return item.matcher === currentMatcher;
162
- }); // No items in the array have an object that matches the value of currentMatcher
163
-
164
- if (indexOfItemToUpdate === -1) {
165
- return prev;
166
- }
167
-
168
- selectionAreaClone[indexOfItemToUpdate].point2 = endCellCoordinates;
169
- selectionAreaClone[indexOfItemToUpdate].areaCreated = false;
170
- return selectionAreaClone;
171
- });
172
- }
173
- };
156
+ };
174
157
 
175
- document.addEventListener('mouseup', handleMouseUp);
176
- return function () {
177
- document.removeEventListener('mouseup', handleMouseUp);
178
- };
179
- }, [selectionAreas, currentMatcher, setSelectionAreas, setClickAndHoldActive, setCurrentMatcher, ref]); // Make sure that if the cellSize prop changes, the active
158
+ useSpreadsheetMouseUp({
159
+ currentMatcher: currentMatcher,
160
+ setClickAndHoldActive: setClickAndHoldActive,
161
+ setSelectionAreas: setSelectionAreas,
162
+ setValidStartingPoint: setValidStartingPoint,
163
+ validStartingPoint: validStartingPoint,
164
+ ref: ref,
165
+ setHeaderCellHoldActive: setHeaderCellHoldActive,
166
+ setColumnOrder: setColumnOrder,
167
+ visibleColumns: visibleColumns,
168
+ setActiveCellCoordinates: setActiveCellCoordinates,
169
+ rows: rows,
170
+ activeCellCoordinates: activeCellCoordinates,
171
+ defaultColumn: defaultColumn
172
+ }); // Make sure that if the cellSize prop changes, the active
180
173
  // cell also gets updated with the new size
181
174
 
182
175
  useEffect(function () {
@@ -192,6 +185,9 @@ export var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
192
185
  var handleBodyCellClick = useCallback(function (cell, columnIndex) {
193
186
  return function (event) {
194
187
  event.preventDefault();
188
+ var closestBodyCell = event.target.closest(".".concat(blockClass, "__body--td"));
189
+ var isValidSelectionAreaStart = closestBodyCell.classList.contains("".concat(blockClass, "__body--td"));
190
+ setValidStartingPoint(isValidSelectionAreaStart);
195
191
  var isHoldingCommandKey = event.metaKey || event.ctrlKey;
196
192
  var isHoldingShiftKey = event.shiftKey;
197
193
  setContainerHasFocus(true);
@@ -524,6 +520,11 @@ DataSpreadsheetBody.propTypes = {
524
520
  */
525
521
  setClickAndHoldActive: PropTypes.func,
526
522
 
523
+ /**
524
+ * Setter fn for column ordering, provided from react-table
525
+ */
526
+ setColumnOrder: PropTypes.func,
527
+
527
528
  /**
528
529
  * Setter fn for containerHasFocus state value
529
530
  */
@@ -534,6 +535,11 @@ DataSpreadsheetBody.propTypes = {
534
535
  */
535
536
  setCurrentMatcher: PropTypes.func,
536
537
 
538
+ /**
539
+ * Setter fn for header cell hold active value
540
+ */
541
+ setHeaderCellHoldActive: PropTypes.func,
542
+
537
543
  /**
538
544
  * Setter fn for selectionAreaData state value
539
545
  */
@@ -553,5 +559,10 @@ DataSpreadsheetBody.propTypes = {
553
559
  * The total number of columns to be initially visible, additional columns will be rendered and
554
560
  * visible via horizontal scrollbar
555
561
  */
556
- totalVisibleColumns: PropTypes.number
562
+ totalVisibleColumns: PropTypes.number,
563
+
564
+ /**
565
+ * Prop from react-table used to reorder columns
566
+ */
567
+ visibleColumns: PropTypes.array
557
568
  };