@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
@@ -29,6 +29,12 @@ var _settings = require("../../settings");
29
29
 
30
30
  var _AddSelectList = require("./AddSelectList");
31
31
 
32
+ var _AddSelectSort = require("./AddSelectSort");
33
+
34
+ var _addSelectUtils = require("./add-select-utils");
35
+
36
+ var _useItemSort2 = require("./hooks/useItemSort");
37
+
32
38
  var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
33
39
 
34
40
  var _excluded = ["columnInputPlaceholder", "filteredItems", "header", "multiSelection", "setMultiSelection"];
@@ -40,7 +46,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
40
46
  var componentName = 'AddSelect';
41
47
 
42
48
  var AddSelectColumn = function AddSelectColumn(_ref) {
43
- var _filteredItems$find, _filteredItems$find2;
49
+ var _filteredItems$find;
44
50
 
45
51
  var columnInputPlaceholder = _ref.columnInputPlaceholder,
46
52
  filteredItems = _ref.filteredItems,
@@ -59,20 +65,16 @@ var AddSelectColumn = function AddSelectColumn(_ref) {
59
65
  searchTerm = _useState4[0],
60
66
  setSearchTerm = _useState4[1];
61
67
 
62
- var _useState5 = (0, _react.useState)(''),
63
- _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
64
- sortDirection = _useState6[0],
65
- setSortDirection = _useState6[1];
66
-
67
- var _useState7 = (0, _react.useState)(''),
68
- _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
69
- sortAttribute = _useState8[0],
70
- setSortAttribute = _useState8[1];
68
+ var _useItemSort = (0, _useItemSort2.useItemSort)(),
69
+ sortDirection = _useItemSort.sortDirection,
70
+ setSortDirection = _useItemSort.setSortDirection,
71
+ sortAttribute = _useItemSort.sortAttribute,
72
+ setSortAttribute = _useItemSort.setSortAttribute;
71
73
 
72
- var _useState9 = (0, _react.useState)([]),
73
- _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
74
- filters = _useState10[0],
75
- setFilters = _useState10[1];
74
+ var _useState5 = (0, _react.useState)([]),
75
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
76
+ filters = _useState6[0],
77
+ setFilters = _useState6[1];
76
78
 
77
79
  var blockClass = "".concat(_settings.pkg.prefix, "--add-select");
78
80
  var colClass = "".concat(blockClass, "__column");
@@ -81,39 +83,14 @@ var AddSelectColumn = function AddSelectColumn(_ref) {
81
83
  return multiSelection.includes(item.id);
82
84
  });
83
85
  setAllSelected(isAllSelected);
84
- }, [filteredItems, multiSelection]); // sorting
85
-
86
- var colSortBy = (_filteredItems$find = filteredItems.find(function (item) {
87
- return item.sortBy;
88
- })) === null || _filteredItems$find === void 0 ? void 0 : _filteredItems$find.sortBy;
89
- var sortByOpts = colSortBy ? colSortBy.reduce(function (acc, cur) {
90
- var opts = [{
91
- id: "".concat(cur, "-asc"),
92
- itemText: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_iconsReact.ArrowUp16, null), cur),
93
- direction: 'asc',
94
- attribute: cur
95
- }, {
96
- id: "".concat(cur, "-desc"),
97
- itemText: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_iconsReact.ArrowDown16, null), cur),
98
- direction: 'desc',
99
- attribute: cur
100
- }];
101
- return [].concat((0, _toConsumableArray2.default)(acc), opts);
102
- }, []) : []; // filtering
103
-
104
- var colFilterBy = (_filteredItems$find2 = filteredItems.find(function (item) {
86
+ }, [filteredItems, multiSelection]); // filtering
87
+
88
+ var colFilterBy = (_filteredItems$find = filteredItems.find(function (item) {
105
89
  return item.filterBy;
106
- })) === null || _filteredItems$find2 === void 0 ? void 0 : _filteredItems$find2.filterBy;
90
+ })) === null || _filteredItems$find === void 0 ? void 0 : _filteredItems$find.filterBy;
107
91
  var filterByOpts = colFilterBy ? filteredItems.map(function (item) {
108
92
  return item[colFilterBy];
109
- }) : []; // handlers
110
-
111
- var sortHandler = function sortHandler(_ref2) {
112
- var direction = _ref2.direction,
113
- attribute = _ref2.attribute;
114
- setSortAttribute(attribute);
115
- setSortDirection(direction);
116
- };
93
+ }) : [];
117
94
 
118
95
  var selectAllHandler = function selectAllHandler(checked) {
119
96
  var itemIds = filteredItems.map(function (item) {
@@ -160,22 +137,11 @@ var AddSelectColumn = function AddSelectColumn(_ref) {
160
137
  });
161
138
  };
162
139
 
163
- var sortItems = function sortItems(a, b) {
164
- var _a$sortAttribute, _b$sortAttribute;
165
-
166
- var valueA = (_a$sortAttribute = a[sortAttribute]) === null || _a$sortAttribute === void 0 ? void 0 : _a$sortAttribute.split(' ').join('');
167
- var valueB = (_b$sortAttribute = b[sortAttribute]) === null || _b$sortAttribute === void 0 ? void 0 : _b$sortAttribute.split(' ').join('');
168
-
169
- if (sortDirection === 'desc') {
170
- return valueA > valueB ? -1 : 1;
171
- }
172
-
173
- return valueA < valueB ? -1 : 1;
174
- };
175
-
140
+ var sortFn = (0, _addSelectUtils.sortItems)(sortAttribute, sortDirection);
141
+ var sortBy = (0, _addSelectUtils.getSortBy)(filteredItems);
176
142
  var colItems = filteredItems.filter(filterBySearch) // first check if the item meets the search
177
143
  .filter(filterByAttribute) // then check if the item is included in the filter
178
- .sort(sortItems); // then sort the items by whatever criteria
144
+ .sort(sortFn); // then sort the items by whatever criteria
179
145
 
180
146
  return /*#__PURE__*/_react.default.createElement("div", {
181
147
  className: colClass
@@ -193,19 +159,14 @@ var AddSelectColumn = function AddSelectColumn(_ref) {
193
159
  labelText: columnInputPlaceholder
194
160
  }), /*#__PURE__*/_react.default.createElement("div", {
195
161
  className: "".concat(colClass, "-sort-filter")
196
- }, sortByOpts.length > 0 && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenu, {
197
- renderIcon: _iconsReact.ArrowsVertical32,
198
- className: "".concat(colClass, "-overflow"),
199
- flipped: true
200
- }, sortByOpts.map(function (opt) {
201
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenuItem, {
202
- key: opt.id,
203
- itemText: opt.itemText,
204
- onClick: function onClick() {
205
- return sortHandler(opt);
206
- }
207
- });
208
- })), filterByOpts.length > 0 && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenu, {
162
+ }, /*#__PURE__*/_react.default.createElement(_AddSelectSort.AddSelectSort, {
163
+ items: filteredItems,
164
+ setSortAttribute: setSortAttribute,
165
+ setSortDirection: setSortDirection,
166
+ sortAttribute: sortAttribute,
167
+ sortDirection: sortDirection,
168
+ sortBy: sortBy
169
+ }), filterByOpts.length > 0 && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenu, {
209
170
  renderIcon: _iconsReact.Filter32,
210
171
  className: "".concat(colClass, "-overflow"),
211
172
  flipped: true
@@ -104,7 +104,7 @@ var AddSelectFilter = function AddSelectFilter(_ref) {
104
104
  };
105
105
 
106
106
  var showFilter = multi && (filterOpts === null || filterOpts === void 0 ? void 0 : filterOpts.length) > 0;
107
- return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
107
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
108
108
  className: "".concat(blockClass, "-search")
109
109
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextInput, {
110
110
  id: "temp-id",
@@ -123,7 +123,7 @@ var AddSelectFilter = function AddSelectFilter(_ref) {
123
123
  className: "".concat(blockClass, "-toggle"),
124
124
  size: "md"
125
125
  }), open && /*#__PURE__*/_react.default.createElement("div", {
126
- className: "".concat(blockClass)
126
+ className: blockClass
127
127
  }, /*#__PURE__*/_react.default.createElement("div", {
128
128
  className: "".concat(blockClass, "-content")
129
129
  }, /*#__PURE__*/_react.default.createElement("p", null, "Filters"), /*#__PURE__*/_react.default.createElement("div", {
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.AddSelectSort = void 0;
9
+
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _propTypes = _interopRequireDefault(require("prop-types"));
15
+
16
+ var _carbonComponentsReact = require("carbon-components-react");
17
+
18
+ var _iconsReact = require("@carbon/icons-react");
19
+
20
+ var _settings = require("../../settings");
21
+
22
+ //
23
+ // Copyright IBM Corp. 2022
24
+ //
25
+ // This source code is licensed under the Apache-2.0 license found in the
26
+ // LICENSE file in the root directory of this source tree.
27
+ //
28
+ var componentName = 'AddSelect';
29
+
30
+ var AddSelectSort = function AddSelectSort(_ref) {
31
+ var setSortAttribute = _ref.setSortAttribute,
32
+ setSortDirection = _ref.setSortDirection,
33
+ sortBy = _ref.sortBy;
34
+ var blockClass = "".concat(_settings.pkg.prefix, "--add-select-sort");
35
+ var sortByOpts = sortBy ? sortBy.reduce(function (acc, cur) {
36
+ var opts = [{
37
+ id: "".concat(cur, "-asc"),
38
+ itemText: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_iconsReact.ArrowUp16, null), cur),
39
+ direction: 'asc',
40
+ attribute: cur
41
+ }, {
42
+ id: "".concat(cur, "-desc"),
43
+ itemText: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_iconsReact.ArrowDown16, null), cur),
44
+ direction: 'desc',
45
+ attribute: cur
46
+ }];
47
+ return [].concat((0, _toConsumableArray2.default)(acc), opts);
48
+ }, []) : []; // handlers
49
+
50
+ var sortHandler = function sortHandler(_ref2) {
51
+ var direction = _ref2.direction,
52
+ attribute = _ref2.attribute;
53
+ setSortAttribute(attribute);
54
+ setSortDirection(direction);
55
+ };
56
+
57
+ return /*#__PURE__*/_react.default.createElement("div", {
58
+ className: blockClass
59
+ }, sortByOpts.length > 0 && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenu, {
60
+ renderIcon: _iconsReact.ArrowsVertical32,
61
+ flipped: true
62
+ }, sortByOpts.map(function (opt) {
63
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenuItem, {
64
+ key: opt.id,
65
+ itemText: opt.itemText,
66
+ onClick: function onClick() {
67
+ return sortHandler(opt);
68
+ }
69
+ });
70
+ })));
71
+ };
72
+
73
+ exports.AddSelectSort = AddSelectSort;
74
+ AddSelectSort.propTypes = {
75
+ setSortAttribute: _propTypes.default.func,
76
+ setSortDirection: _propTypes.default.func,
77
+ sortBy: _propTypes.default.array
78
+ };
79
+ AddSelectSort.displayName = componentName;
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.normalize = exports.getGlobalFilterValues = exports.flatten = void 0;
8
+ exports.sortItems = exports.normalize = exports.getSortBy = exports.getGlobalFilterValues = exports.flatten = void 0;
9
9
 
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
 
@@ -108,4 +108,31 @@ var getGlobalFilterValues = function getGlobalFilterValues(globalFilters, items)
108
108
  return filterOpts;
109
109
  };
110
110
 
111
- exports.getGlobalFilterValues = getGlobalFilterValues;
111
+ exports.getGlobalFilterValues = getGlobalFilterValues;
112
+
113
+ var sortItems = function sortItems(attribute, direction) {
114
+ return function (a, b) {
115
+ var _a$attribute, _b$attribute;
116
+
117
+ var valueA = (_a$attribute = a[attribute]) === null || _a$attribute === void 0 ? void 0 : _a$attribute.split(' ').join('');
118
+ var valueB = (_b$attribute = b[attribute]) === null || _b$attribute === void 0 ? void 0 : _b$attribute.split(' ').join('');
119
+
120
+ if (direction === 'desc') {
121
+ return valueA > valueB ? -1 : 1;
122
+ }
123
+
124
+ return valueA < valueB ? -1 : 1;
125
+ };
126
+ };
127
+
128
+ exports.sortItems = sortItems;
129
+
130
+ var getSortBy = function getSortBy(items) {
131
+ var _items$find;
132
+
133
+ return (_items$find = items.find(function (item) {
134
+ return item.sortBy;
135
+ })) === null || _items$find === void 0 ? void 0 : _items$find.sortBy;
136
+ };
137
+
138
+ exports.getSortBy = getSortBy;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useItemSort = void 0;
9
+
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+
12
+ var _react = require("react");
13
+
14
+ var useItemSort = function useItemSort() {
15
+ var _useState = (0, _react.useState)(''),
16
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
17
+ sortDirection = _useState2[0],
18
+ setSortDirection = _useState2[1];
19
+
20
+ var _useState3 = (0, _react.useState)(''),
21
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
22
+ sortAttribute = _useState4[0],
23
+ setSortAttribute = _useState4[1];
24
+
25
+ return {
26
+ sortDirection: sortDirection,
27
+ setSortDirection: setSortDirection,
28
+ sortAttribute: sortAttribute,
29
+ setSortAttribute: setSortAttribute
30
+ };
31
+ };
32
+
33
+ exports.useItemSort = useItemSort;
@@ -159,8 +159,13 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
159
159
 
160
160
  var _useState17 = (0, _react.useState)(false),
161
161
  _useState18 = (0, _slicedToArray2.default)(_useState17, 2),
162
- activeCellInsideSelectionArea = _useState18[0],
163
- setActiveCellInsideSelectionArea = _useState18[1];
162
+ headerCellHoldActive = _useState18[0],
163
+ setHeaderCellHoldActive = _useState18[1];
164
+
165
+ var _useState19 = (0, _react.useState)(false),
166
+ _useState20 = (0, _slicedToArray2.default)(_useState19, 2),
167
+ activeCellInsideSelectionArea = _useState20[0],
168
+ setActiveCellInsideSelectionArea = _useState20[1];
164
169
 
165
170
  var previousState = (0, _hooks.usePreviousValue)({
166
171
  activeCellCoordinates: activeCellCoordinates,
@@ -169,10 +174,10 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
169
174
  var cellSizeValue = (0, _getCellSize.getCellSize)(cellSize);
170
175
  var cellEditorRef = (0, _react.useRef)();
171
176
 
172
- var _useState19 = (0, _react.useState)(),
173
- _useState20 = (0, _slicedToArray2.default)(_useState19, 2),
174
- activeCellContent = _useState20[0],
175
- setActiveCellContent = _useState20[1];
177
+ var _useState21 = (0, _react.useState)(),
178
+ _useState22 = (0, _slicedToArray2.default)(_useState21, 2),
179
+ activeCellContent = _useState22[0],
180
+ setActiveCellContent = _useState22[1];
176
181
 
177
182
  var activeCellRef = (0, _react.useRef)();
178
183
  var cellEditorRulerRef = (0, _react.useRef)();
@@ -200,13 +205,15 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
200
205
  columns: columns,
201
206
  data: data,
202
207
  defaultColumn: defaultColumn
203
- }, _reactTable.useBlockLayout),
208
+ }, _reactTable.useBlockLayout, _reactTable.useColumnOrder),
204
209
  getTableProps = _useTable.getTableProps,
205
210
  getTableBodyProps = _useTable.getTableBodyProps,
206
211
  headerGroups = _useTable.headerGroups,
207
212
  rows = _useTable.rows,
208
213
  totalColumnsWidth = _useTable.totalColumnsWidth,
209
- prepareRow = _useTable.prepareRow; // Update the spreadsheet data after editing a cell
214
+ prepareRow = _useTable.prepareRow,
215
+ setColumnOrder = _useTable.setColumnOrder,
216
+ visibleColumns = _useTable.visibleColumns; // Update the spreadsheet data after editing a cell
210
217
 
211
218
 
212
219
  var updateData = (0, _react.useCallback)(function (rowIndex, columnId) {
@@ -609,8 +616,9 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
609
616
 
610
617
  var startEditMode = function startEditMode() {
611
618
  setIsEditing(true);
619
+ setClickAndHoldActive(false);
612
620
  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;
613
- var activeCellValue = activeCellFullData ? Object.values(activeCellFullData.row.values)[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column] : null;
621
+ var activeCellValue = activeCellFullData ? activeCellFullData.row.cells[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column].value : null;
614
622
  setCellEditorValue(activeCellValue);
615
623
  cellEditorRulerRef.current.textContent = activeCellValue;
616
624
  cellEditorRef.current.style.width = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.width;
@@ -734,7 +742,7 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
734
742
  activeCellRef: activeCellRef,
735
743
  cellEditorRef: cellEditorRef,
736
744
  cellEditorRulerRef: cellEditorRulerRef,
737
- columns: columns,
745
+ visibleColumns: visibleColumns,
738
746
  defaultColumn: defaultColumn,
739
747
  cellEditorValue: cellEditorValue
740
748
  });
@@ -804,7 +812,9 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
804
812
  setCurrentMatcher: setCurrentMatcher,
805
813
  setSelectionAreaData: setSelectionAreaData,
806
814
  totalVisibleColumns: totalVisibleColumns,
807
- updateActiveCellCoordinates: updateActiveCellCoordinates
815
+ updateActiveCellCoordinates: updateActiveCellCoordinates,
816
+ setHeaderCellHoldActive: setHeaderCellHoldActive,
817
+ headerCellHoldActive: headerCellHoldActive
808
818
  }), /*#__PURE__*/_react.default.createElement(_DataSpreadsheetBody.DataSpreadsheetBody, {
809
819
  activeCellCoordinates: activeCellCoordinates,
810
820
  ref: spreadsheetRef,
@@ -833,7 +843,10 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
833
843
  columns: columns,
834
844
  defaultEmptyRowCount: defaultEmptyRowCount,
835
845
  setActiveCellInsideSelectionArea: setActiveCellInsideSelectionArea,
836
- totalVisibleColumns: totalVisibleColumns
846
+ totalVisibleColumns: totalVisibleColumns,
847
+ setHeaderCellHoldActive: setHeaderCellHoldActive,
848
+ setColumnOrder: setColumnOrder,
849
+ visibleColumns: visibleColumns
837
850
  }), /*#__PURE__*/_react.default.createElement("button", {
838
851
  onMouseDown: handleActiveCellMouseDown,
839
852
  onClick: handleActiveCellClick,
@@ -15,6 +15,8 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
15
15
 
16
16
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
17
17
 
18
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
19
+
18
20
  var _react = _interopRequireWildcard(require("react"));
19
21
 
20
22
  var _propTypes = _interopRequireDefault(require("prop-types"));
@@ -45,6 +47,8 @@ var _handleHeaderCellSelection = require("./utils/handleHeaderCellSelection");
45
47
 
46
48
  var _getSpreadsheetWidth = require("./utils/getSpreadsheetWidth");
47
49
 
50
+ var _hooks2 = require("./hooks");
51
+
48
52
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
49
53
 
50
54
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -79,7 +83,16 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
79
83
  setCurrentMatcher = _ref.setCurrentMatcher,
80
84
  onSelectionAreaChange = _ref.onSelectionAreaChange,
81
85
  setActiveCellInsideSelectionArea = _ref.setActiveCellInsideSelectionArea,
82
- totalVisibleColumns = _ref.totalVisibleColumns;
86
+ totalVisibleColumns = _ref.totalVisibleColumns,
87
+ setHeaderCellHoldActive = _ref.setHeaderCellHoldActive,
88
+ setColumnOrder = _ref.setColumnOrder,
89
+ visibleColumns = _ref.visibleColumns;
90
+
91
+ var _useState = (0, _react.useState)(false),
92
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
93
+ validStartingPoint = _useState2[0],
94
+ setValidStartingPoint = _useState2[1];
95
+
83
96
  var contentScrollRef = (0, _react.useRef)();
84
97
  var previousState = (0, _hooks.usePreviousValue)({
85
98
  selectionAreaData: selectionAreaData,
@@ -141,18 +154,18 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
141
154
  ref: ref,
142
155
  area: area,
143
156
  blockClass: blockClass,
144
- columns: columns,
145
157
  defaultColumn: defaultColumn,
146
158
  selectionAreas: selectionAreas,
147
159
  setSelectionAreas: setSelectionAreas,
148
- setActiveCellInsideSelectionArea: setActiveCellInsideSelectionArea
160
+ setActiveCellInsideSelectionArea: setActiveCellInsideSelectionArea,
161
+ visibleColumns: visibleColumns
149
162
  });
150
163
  }
151
164
 
152
165
  return;
153
166
  });
154
167
  }
155
- }, [selectionAreas, setSelectionAreas, defaultColumn, onSelectionAreaChange, setSelectionAreaData, ref, activeCellCoordinates, setActiveCellInsideSelectionArea, columns]);
168
+ }, [selectionAreas, setSelectionAreas, defaultColumn, onSelectionAreaChange, setSelectionAreaData, ref, activeCellCoordinates, setActiveCellInsideSelectionArea, visibleColumns]);
156
169
 
157
170
  var populateSelectionAreaCellData = function populateSelectionAreaCellData(_ref2) {
158
171
  var rowStart = _ref2.rowStart,
@@ -168,41 +181,23 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
168
181
  }
169
182
 
170
183
  return cellContainer;
171
- }; // Mouse up
172
-
173
-
174
- (0, _react.useEffect)(function () {
175
- var handleMouseUp = function handleMouseUp(event) {
176
- setClickAndHoldActive(false);
177
- var cellButton = event.target.closest(".".concat(blockClass, "__body--td"));
178
-
179
- if (cellButton) {
180
- var endCellCoordinates = {
181
- row: Number(cellButton.getAttribute('data-row-index')),
182
- column: Number(cellButton.getAttribute('data-column-index'))
183
- };
184
- setSelectionAreas(function (prev) {
185
- var selectionAreaClone = (0, _deepCloneObject.deepCloneObject)(prev);
186
- var indexOfItemToUpdate = selectionAreaClone.findIndex(function (item) {
187
- return item.matcher === currentMatcher;
188
- }); // No items in the array have an object that matches the value of currentMatcher
189
-
190
- if (indexOfItemToUpdate === -1) {
191
- return prev;
192
- }
193
-
194
- selectionAreaClone[indexOfItemToUpdate].point2 = endCellCoordinates;
195
- selectionAreaClone[indexOfItemToUpdate].areaCreated = false;
196
- return selectionAreaClone;
197
- });
198
- }
199
- };
184
+ };
200
185
 
201
- document.addEventListener('mouseup', handleMouseUp);
202
- return function () {
203
- document.removeEventListener('mouseup', handleMouseUp);
204
- };
205
- }, [selectionAreas, currentMatcher, setSelectionAreas, setClickAndHoldActive, setCurrentMatcher, ref]); // Make sure that if the cellSize prop changes, the active
186
+ (0, _hooks2.useSpreadsheetMouseUp)({
187
+ currentMatcher: currentMatcher,
188
+ setClickAndHoldActive: setClickAndHoldActive,
189
+ setSelectionAreas: setSelectionAreas,
190
+ setValidStartingPoint: setValidStartingPoint,
191
+ validStartingPoint: validStartingPoint,
192
+ ref: ref,
193
+ setHeaderCellHoldActive: setHeaderCellHoldActive,
194
+ setColumnOrder: setColumnOrder,
195
+ visibleColumns: visibleColumns,
196
+ setActiveCellCoordinates: setActiveCellCoordinates,
197
+ rows: rows,
198
+ activeCellCoordinates: activeCellCoordinates,
199
+ defaultColumn: defaultColumn
200
+ }); // Make sure that if the cellSize prop changes, the active
206
201
  // cell also gets updated with the new size
207
202
 
208
203
  (0, _react.useEffect)(function () {
@@ -218,6 +213,9 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
218
213
  var handleBodyCellClick = (0, _react.useCallback)(function (cell, columnIndex) {
219
214
  return function (event) {
220
215
  event.preventDefault();
216
+ var closestBodyCell = event.target.closest(".".concat(blockClass, "__body--td"));
217
+ var isValidSelectionAreaStart = closestBodyCell.classList.contains("".concat(blockClass, "__body--td"));
218
+ setValidStartingPoint(isValidSelectionAreaStart);
221
219
  var isHoldingCommandKey = event.metaKey || event.ctrlKey;
222
220
  var isHoldingShiftKey = event.shiftKey;
223
221
  setContainerHasFocus(true);
@@ -549,6 +547,11 @@ DataSpreadsheetBody.propTypes = {
549
547
  */
550
548
  setClickAndHoldActive: _propTypes.default.func,
551
549
 
550
+ /**
551
+ * Setter fn for column ordering, provided from react-table
552
+ */
553
+ setColumnOrder: _propTypes.default.func,
554
+
552
555
  /**
553
556
  * Setter fn for containerHasFocus state value
554
557
  */
@@ -559,6 +562,11 @@ DataSpreadsheetBody.propTypes = {
559
562
  */
560
563
  setCurrentMatcher: _propTypes.default.func,
561
564
 
565
+ /**
566
+ * Setter fn for header cell hold active value
567
+ */
568
+ setHeaderCellHoldActive: _propTypes.default.func,
569
+
562
570
  /**
563
571
  * Setter fn for selectionAreaData state value
564
572
  */
@@ -578,5 +586,10 @@ DataSpreadsheetBody.propTypes = {
578
586
  * The total number of columns to be initially visible, additional columns will be rendered and
579
587
  * visible via horizontal scrollbar
580
588
  */
581
- totalVisibleColumns: _propTypes.default.number
589
+ totalVisibleColumns: _propTypes.default.number,
590
+
591
+ /**
592
+ * Prop from react-table used to reorder columns
593
+ */
594
+ visibleColumns: _propTypes.default.array
582
595
  };