@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.
- package/README.md +30 -27
- package/css/index-full-carbon.css +144 -78
- package/css/index-full-carbon.css.map +1 -1
- package/css/index-full-carbon.min.css +4 -4
- package/css/index-full-carbon.min.css.map +1 -1
- package/css/index-without-carbon.css +27 -12
- package/css/index-without-carbon.css.map +1 -1
- package/css/index-without-carbon.min.css +2 -2
- package/css/index-without-carbon.min.css.map +1 -1
- package/css/index.css +53 -43
- package/css/index.css.map +1 -1
- package/css/index.min.css +4 -4
- package/css/index.min.css.map +1 -1
- package/es/components/AddSelect/AddSelect.js +30 -6
- package/es/components/AddSelect/AddSelectColumn.js +31 -73
- package/es/components/AddSelect/AddSelectFilter.js +2 -2
- package/es/components/AddSelect/AddSelectSort.js +61 -0
- package/es/components/AddSelect/add-select-utils.js +21 -0
- package/es/components/AddSelect/hooks/useItemSort.js +20 -0
- package/es/components/DataSpreadsheet/DataSpreadsheet.js +26 -13
- package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +51 -40
- package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +60 -3
- package/es/components/DataSpreadsheet/hooks/index.js +3 -1
- package/es/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +15 -14
- package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +60 -0
- package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +153 -0
- package/es/components/DataSpreadsheet/utils/createCellSelectionArea.js +3 -3
- package/es/components/DataSpreadsheet/utils/moveColumnIndicatorLine.js +34 -0
- package/lib/components/AddSelect/AddSelect.js +31 -6
- package/lib/components/AddSelect/AddSelectColumn.js +32 -71
- package/lib/components/AddSelect/AddSelectFilter.js +2 -2
- package/lib/components/AddSelect/AddSelectSort.js +79 -0
- package/lib/components/AddSelect/add-select-utils.js +29 -2
- package/lib/components/AddSelect/hooks/useItemSort.js +33 -0
- package/lib/components/DataSpreadsheet/DataSpreadsheet.js +25 -12
- package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +52 -39
- package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +62 -3
- package/lib/components/DataSpreadsheet/hooks/index.js +17 -1
- package/lib/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +14 -14
- package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +74 -0
- package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +161 -0
- package/lib/components/DataSpreadsheet/utils/createCellSelectionArea.js +3 -3
- package/lib/components/DataSpreadsheet/utils/moveColumnIndicatorLine.js +45 -0
- package/package.json +11 -10
- package/scss/components/AddSelect/_add-select.scss +6 -0
- 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,
|
15
|
-
import { Filter32
|
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
|
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
|
41
|
-
|
42
|
-
|
43
|
-
|
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
|
51
|
-
|
52
|
-
filters =
|
53
|
-
setFilters =
|
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]); //
|
63
|
-
|
64
|
-
var
|
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$
|
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
|
-
}) : [];
|
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
|
142
|
-
|
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(
|
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
|
-
},
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
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(
|
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:
|
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
|
-
|
129
|
-
|
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
|
139
|
-
|
140
|
-
activeCellContent =
|
141
|
-
setActiveCellContent =
|
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
|
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 ?
|
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
|
-
|
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,
|
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
|
-
};
|
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
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
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
|
};
|