@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
@@ -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
  };