@carbon/ibm-products 1.17.0 → 1.18.0

Sign up to get free protection for your applications and to get access to all the features.
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
  };