@carbon/ibm-products 1.14.0 → 1.15.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/css/index-full-carbon.css +23 -5
- package/css/index-full-carbon.css.map +1 -1
- package/css/index-full-carbon.min.css +3 -3
- package/css/index-full-carbon.min.css.map +1 -1
- package/css/index-without-carbon-released-only.css +4 -4
- package/css/index-without-carbon-released-only.css.map +1 -1
- package/css/index-without-carbon-released-only.min.css +2 -2
- package/css/index-without-carbon-released-only.min.css.map +1 -1
- package/css/index-without-carbon.css +23 -5
- package/css/index-without-carbon.css.map +1 -1
- package/css/index-without-carbon.min.css +3 -3
- package/css/index-without-carbon.min.css.map +1 -1
- package/css/index.css +23 -5
- package/css/index.css.map +1 -1
- package/css/index.min.css +3 -3
- package/css/index.min.css.map +1 -1
- package/es/components/AddSelect/AddSelect.js +25 -19
- package/es/components/AddSelect/AddSelectFilter.js +5 -5
- package/es/components/DataSpreadsheet/DataSpreadsheet.js +174 -127
- package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +24 -8
- package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +31 -6
- package/es/components/DataSpreadsheet/hooks/index.js +2 -1
- package/es/components/DataSpreadsheet/hooks/useMultipleKeyTracking.js +36 -8
- package/es/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +68 -0
- package/es/components/DataSpreadsheet/utils/createCellSelectionArea.js +20 -8
- package/es/components/DataSpreadsheet/utils/getSelectionAreaPoints.js +18 -0
- package/es/components/DataSpreadsheet/utils/handleActiveCellInSelectionEnter.js +121 -0
- package/es/components/DataSpreadsheet/utils/handleActiveCellInSelectionTab.js +108 -0
- package/es/components/DataSpreadsheet/utils/handleEditSubmit.js +87 -0
- package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +42 -8
- package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +153 -15
- package/es/components/DataSpreadsheet/utils/selectAllCells.js +53 -0
- package/es/components/MultiAddSelect/MultiAddSelect.js +150 -3
- package/es/components/PageHeader/PageHeader.js +3 -1
- package/es/components/SingleAddSelect/SingleAddSelect.js +90 -4
- package/es/components/TagSet/TagSet.js +13 -6
- package/es/components/Tearsheet/TearsheetShell.js +34 -10
- package/es/global/js/package-settings.js +2 -1
- package/lib/components/AddSelect/AddSelect.js +25 -19
- package/lib/components/AddSelect/AddSelectFilter.js +5 -5
- package/lib/components/DataSpreadsheet/DataSpreadsheet.js +178 -126
- package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +24 -8
- package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +32 -6
- package/lib/components/DataSpreadsheet/hooks/index.js +9 -1
- package/lib/components/DataSpreadsheet/hooks/useMultipleKeyTracking.js +36 -8
- package/lib/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +79 -0
- package/lib/components/DataSpreadsheet/utils/createCellSelectionArea.js +21 -8
- package/lib/components/DataSpreadsheet/utils/getSelectionAreaPoints.js +27 -0
- package/lib/components/DataSpreadsheet/utils/handleActiveCellInSelectionEnter.js +127 -0
- package/lib/components/DataSpreadsheet/utils/handleActiveCellInSelectionTab.js +118 -0
- package/lib/components/DataSpreadsheet/utils/handleEditSubmit.js +94 -0
- package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +44 -8
- package/lib/components/DataSpreadsheet/utils/handleMultipleKeys.js +161 -22
- package/lib/components/DataSpreadsheet/utils/selectAllCells.js +60 -0
- package/lib/components/MultiAddSelect/MultiAddSelect.js +150 -2
- package/lib/components/PageHeader/PageHeader.js +3 -1
- package/lib/components/SingleAddSelect/SingleAddSelect.js +91 -3
- package/lib/components/TagSet/TagSet.js +13 -6
- package/lib/components/Tearsheet/TearsheetShell.js +36 -10
- package/lib/global/js/package-settings.js +2 -1
- package/package.json +11 -11
- package/scss/components/AboutModal/_about-modal.scss +4 -0
- package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +22 -1
- package/scss/components/ExportModal/_export-modal.scss +0 -4
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
4
|
|
5
|
-
var
|
5
|
+
var _typeof3 = require("@babel/runtime/helpers/typeof");
|
6
6
|
|
7
7
|
Object.defineProperty(exports, "__esModule", {
|
8
8
|
value: true
|
@@ -11,6 +11,8 @@ exports.DataSpreadsheet = void 0;
|
|
11
11
|
|
12
12
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
13
13
|
|
14
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
15
|
+
|
14
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
15
17
|
|
16
18
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
@@ -21,8 +23,6 @@ var _react = _interopRequireWildcard(require("react"));
|
|
21
23
|
|
22
24
|
var _reactTable = require("react-table");
|
23
25
|
|
24
|
-
var _layout = require("@carbon/layout");
|
25
|
-
|
26
26
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
27
27
|
|
28
28
|
var _classnames = _interopRequireDefault(require("classnames"));
|
@@ -43,6 +43,8 @@ var _hooks = require("../../global/js/hooks");
|
|
43
43
|
|
44
44
|
var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
|
45
45
|
|
46
|
+
var _deepCloneObject = require("../../global/js/utils/deepCloneObject");
|
47
|
+
|
46
48
|
var _hooks2 = require("./hooks");
|
47
49
|
|
48
50
|
var _createActiveCellFn = require("./utils/createActiveCellFn");
|
@@ -55,11 +57,19 @@ var _handleHeaderCellSelection = require("./utils/handleHeaderCellSelection");
|
|
55
57
|
|
56
58
|
var _removeCellSelections = require("./utils/removeCellSelections");
|
57
59
|
|
60
|
+
var _selectAllCells = require("./utils/selectAllCells");
|
61
|
+
|
62
|
+
var _handleEditSubmit = require("./utils/handleEditSubmit");
|
63
|
+
|
64
|
+
var _handleActiveCellInSelectionEnter = require("./utils/handleActiveCellInSelectionEnter");
|
65
|
+
|
66
|
+
var _handleActiveCellInSelectionTab = require("./utils/handleActiveCellInSelectionTab");
|
67
|
+
|
58
68
|
var _excluded = ["cellSize", "className", "columns", "data", "defaultEmptyRowCount", "onDataUpdate", "id", "onActiveCellChange", "onSelectionAreaChange"];
|
59
69
|
|
60
70
|
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); }
|
61
71
|
|
62
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null ||
|
72
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(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; }
|
63
73
|
|
64
74
|
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; }
|
65
75
|
|
@@ -146,6 +156,11 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
146
156
|
cellEditorValue = _useState16[0],
|
147
157
|
setCellEditorValue = _useState16[1];
|
148
158
|
|
159
|
+
var _useState17 = (0, _react.useState)(false),
|
160
|
+
_useState18 = (0, _slicedToArray2.default)(_useState17, 2),
|
161
|
+
activeCellInsideSelectionArea = _useState18[0],
|
162
|
+
setActiveCellInsideSelectionArea = _useState18[1];
|
163
|
+
|
149
164
|
var previousState = (0, _hooks.usePreviousValue)({
|
150
165
|
activeCellCoordinates: activeCellCoordinates,
|
151
166
|
isEditing: isEditing
|
@@ -153,10 +168,10 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
153
168
|
var cellSizeValue = (0, _getCellSize.getCellSize)(cellSize);
|
154
169
|
var cellEditorRef = (0, _react.useRef)();
|
155
170
|
|
156
|
-
var
|
157
|
-
|
158
|
-
activeCellContent =
|
159
|
-
setActiveCellContent =
|
171
|
+
var _useState19 = (0, _react.useState)(),
|
172
|
+
_useState20 = (0, _slicedToArray2.default)(_useState19, 2),
|
173
|
+
activeCellContent = _useState20[0],
|
174
|
+
setActiveCellContent = _useState20[1];
|
160
175
|
|
161
176
|
var activeCellRef = (0, _react.useRef)();
|
162
177
|
var cellEditorRulerRef = (0, _react.useRef)();
|
@@ -173,7 +188,8 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
173
188
|
containerHasFocus: containerHasFocus,
|
174
189
|
isEditing: isEditing
|
175
190
|
}),
|
176
|
-
keysPressedList = _useMultipleKeyTracki.keysPressedList
|
191
|
+
keysPressedList = _useMultipleKeyTracki.keysPressedList,
|
192
|
+
usingMac = _useMultipleKeyTracki.usingMac;
|
177
193
|
|
178
194
|
var scrollBarSize = (0, _react.useMemo)(function () {
|
179
195
|
return (0, _getScrollbarWidth.getScrollbarWidth)();
|
@@ -286,6 +302,8 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
286
302
|
var handleInitialArrowPress = (0, _react.useCallback)(function () {
|
287
303
|
// If activeCellCoordinates is null then we need to set an initial value
|
288
304
|
// which will place the activeCell on the select all cell/button
|
305
|
+
setActiveCellInsideSelectionArea(false);
|
306
|
+
|
289
307
|
if (!activeCellCoordinates) {
|
290
308
|
setActiveCellCoordinates({
|
291
309
|
column: 'header',
|
@@ -296,16 +314,20 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
296
314
|
return;
|
297
315
|
}, [activeCellCoordinates]);
|
298
316
|
var updateActiveCellCoordinates = (0, _react.useCallback)(function (_ref3) {
|
299
|
-
var coords = _ref3.coords,
|
300
|
-
|
317
|
+
var _ref3$coords = _ref3.coords,
|
318
|
+
coords = _ref3$coords === void 0 ? _objectSpread({}, activeCellCoordinates) : _ref3$coords,
|
319
|
+
updatedValue = _ref3.updatedValue,
|
320
|
+
_ref3$optOutOfSelecti = _ref3.optOutOfSelectionAreaUpdate,
|
321
|
+
optOutOfSelectionAreaUpdate = _ref3$optOutOfSelecti === void 0 ? false : _ref3$optOutOfSelecti;
|
301
322
|
|
302
323
|
var newActiveCell = _objectSpread(_objectSpread({}, coords), updatedValue);
|
303
324
|
|
304
325
|
setActiveCellCoordinates(newActiveCell); // Only run if the active cell is _not_ a header cell. This will add a point1 object
|
305
326
|
// to selectionAreas every time the active cell changes, allowing us to create cell
|
306
|
-
// selections using keyboard
|
327
|
+
// selections using keyboard. Opting out of the selection area updates here means
|
328
|
+
// that the active cell is being moved within a selection area
|
307
329
|
|
308
|
-
if (newActiveCell.row !== 'header' && newActiveCell.column !== 'header') {
|
330
|
+
if (newActiveCell.row !== 'header' && newActiveCell.column !== 'header' && !optOutOfSelectionAreaUpdate) {
|
309
331
|
var tempMatcher = (0, _uuidv.default)();
|
310
332
|
setSelectionAreas([{
|
311
333
|
point1: newActiveCell,
|
@@ -313,7 +335,7 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
313
335
|
}]);
|
314
336
|
setCurrentMatcher(tempMatcher);
|
315
337
|
}
|
316
|
-
}, []);
|
338
|
+
}, [activeCellCoordinates]);
|
317
339
|
var handleHomeEndKey = (0, _react.useCallback)(function (_ref4) {
|
318
340
|
var type = _ref4.type;
|
319
341
|
|
@@ -370,7 +392,13 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
370
392
|
currentMatcher: currentMatcher,
|
371
393
|
rows: rows,
|
372
394
|
setSelectionAreas: setSelectionAreas,
|
373
|
-
columns: columns
|
395
|
+
columns: columns,
|
396
|
+
updateActiveCellCoordinates: updateActiveCellCoordinates,
|
397
|
+
spreadsheetRef: spreadsheetRef,
|
398
|
+
removeCellSelections: _removeCellSelections.removeCellSelections,
|
399
|
+
blockClass: blockClass,
|
400
|
+
setCurrentMatcher: setCurrentMatcher,
|
401
|
+
usingMac: usingMac
|
374
402
|
});
|
375
403
|
} // Allow arrow key navigation if there are less than two activeKeys OR
|
376
404
|
// if one of the activeCellCoordinates is in a header position
|
@@ -378,9 +406,26 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
378
406
|
|
379
407
|
if (keysPressedList.length < 2 && !(0, _handleMultipleKeys.includesShift)(keysPressedList) || activeCellCoordinates.row === 'header' || activeCellCoordinates.column === 'header') {
|
380
408
|
switch (key) {
|
409
|
+
// Enter
|
410
|
+
case 'Enter':
|
411
|
+
{
|
412
|
+
(0, _handleActiveCellInSelectionEnter.handleActiveCellInSelectionEnter)({
|
413
|
+
activeCellInsideSelectionArea: activeCellInsideSelectionArea,
|
414
|
+
activeCellCoordinates: activeCellCoordinates,
|
415
|
+
activeCellRef: activeCellRef,
|
416
|
+
selectionAreas: selectionAreas,
|
417
|
+
updateActiveCellCoordinates: updateActiveCellCoordinates
|
418
|
+
});
|
419
|
+
break;
|
420
|
+
}
|
381
421
|
// HOME
|
422
|
+
|
382
423
|
case 'Home':
|
383
424
|
{
|
425
|
+
if ((0, _handleMultipleKeys.includesResourceKey)(keysPressedList, usingMac)) {
|
426
|
+
return;
|
427
|
+
}
|
428
|
+
|
384
429
|
handleHomeEndKey({
|
385
430
|
type: 'home'
|
386
431
|
});
|
@@ -389,6 +434,10 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
389
434
|
|
390
435
|
case 'End':
|
391
436
|
{
|
437
|
+
if ((0, _handleMultipleKeys.includesResourceKey)(keysPressedList, usingMac)) {
|
438
|
+
return;
|
439
|
+
}
|
440
|
+
|
392
441
|
handleHomeEndKey({
|
393
442
|
type: 'end'
|
394
443
|
});
|
@@ -398,6 +447,17 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
398
447
|
|
399
448
|
case 'Tab':
|
400
449
|
{
|
450
|
+
if (activeCellInsideSelectionArea) {
|
451
|
+
event.preventDefault();
|
452
|
+
return (0, _handleActiveCellInSelectionTab.handleActiveCellInSelectionTab)({
|
453
|
+
activeCellInsideSelectionArea: activeCellInsideSelectionArea,
|
454
|
+
activeCellCoordinates: activeCellCoordinates,
|
455
|
+
activeCellRef: activeCellRef,
|
456
|
+
selectionAreas: selectionAreas,
|
457
|
+
updateActiveCellCoordinates: updateActiveCellCoordinates
|
458
|
+
});
|
459
|
+
}
|
460
|
+
|
401
461
|
setSelectionAreas([]);
|
402
462
|
removeActiveCell();
|
403
463
|
removeCellEditor();
|
@@ -544,7 +604,7 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
544
604
|
}
|
545
605
|
}
|
546
606
|
}
|
547
|
-
}, [updateActiveCellCoordinates, handleInitialArrowPress, activeCellCoordinates, removeActiveCell, columns, rows, spreadsheetRef, currentMatcher, isEditing, removeCellEditor, selectionAreas, handleHomeEndKey, keysPressedList]);
|
607
|
+
}, [activeCellInsideSelectionArea, updateActiveCellCoordinates, handleInitialArrowPress, activeCellCoordinates, removeActiveCell, columns, rows, spreadsheetRef, currentMatcher, isEditing, removeCellEditor, selectionAreas, handleHomeEndKey, keysPressedList, usingMac]);
|
548
608
|
|
549
609
|
var startEditMode = function startEditMode() {
|
550
610
|
setIsEditing(true);
|
@@ -566,12 +626,37 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
566
626
|
var handleActiveCellClick = function handleActiveCellClick() {
|
567
627
|
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
|
568
628
|
var indexValue = (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' ? activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column : activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row;
|
629
|
+
|
630
|
+
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' && (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
|
631
|
+
return;
|
632
|
+
}
|
633
|
+
|
569
634
|
handleRowColumnHeaderClick({
|
570
635
|
isKeyboard: false,
|
571
636
|
index: indexValue
|
572
637
|
});
|
573
638
|
}
|
574
639
|
|
640
|
+
return;
|
641
|
+
}; // Mouse down on active cell
|
642
|
+
|
643
|
+
|
644
|
+
var handleActiveCellMouseDown = function handleActiveCellMouseDown() {
|
645
|
+
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) !== 'header' || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) !== 'header') {
|
646
|
+
var tempMatcher = (0, _uuidv.default)();
|
647
|
+
setClickAndHoldActive(true);
|
648
|
+
(0, _removeCellSelections.removeCellSelections)({
|
649
|
+
spreadsheetRef: spreadsheetRef
|
650
|
+
});
|
651
|
+
setSelectionAreas([{
|
652
|
+
point1: activeCellCoordinates,
|
653
|
+
matcher: tempMatcher
|
654
|
+
}]);
|
655
|
+
setCurrentMatcher(tempMatcher);
|
656
|
+
setSelectionAreaData([]);
|
657
|
+
setActiveCellInsideSelectionArea(false);
|
658
|
+
}
|
659
|
+
|
575
660
|
return;
|
576
661
|
}; // Go into edit mode if 'Enter' key is pressed on activeCellRef
|
577
662
|
|
@@ -579,7 +664,7 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
579
664
|
var handleActiveCellKeyDown = function handleActiveCellKeyDown(event) {
|
580
665
|
var key = event.key;
|
581
666
|
|
582
|
-
if (key === 'Enter') {
|
667
|
+
if (key === 'Enter' && !activeCellInsideSelectionArea) {
|
583
668
|
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) !== 'header' && (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) !== 'header') {
|
584
669
|
startEditMode();
|
585
670
|
}
|
@@ -609,18 +694,30 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
609
694
|
index: index
|
610
695
|
}; // Select an entire column
|
611
696
|
|
612
|
-
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header') {
|
697
|
+
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' && (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) !== 'header') {
|
613
698
|
(0, _handleHeaderCellSelection.handleHeaderCellSelection)(_objectSpread({
|
614
699
|
type: 'column'
|
615
700
|
}, handleHeaderCellProps));
|
616
701
|
} // Select an entire row
|
617
702
|
|
618
703
|
|
619
|
-
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
|
704
|
+
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header' && (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) !== 'header') {
|
620
705
|
(0, _handleHeaderCellSelection.handleHeaderCellSelection)(_objectSpread({
|
621
706
|
type: 'row'
|
622
707
|
}, handleHeaderCellProps));
|
623
708
|
}
|
709
|
+
|
710
|
+
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header' && (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header') {
|
711
|
+
(0, _selectAllCells.selectAllCells)({
|
712
|
+
ref: spreadsheetRef,
|
713
|
+
setCurrentMatcher: setCurrentMatcher,
|
714
|
+
setSelectionAreas: setSelectionAreas,
|
715
|
+
rows: rows,
|
716
|
+
columns: columns,
|
717
|
+
activeCellCoordinates: activeCellCoordinates,
|
718
|
+
updateActiveCellCoordinates: updateActiveCellCoordinates
|
719
|
+
});
|
720
|
+
}
|
624
721
|
}; // Go into edit mode if double click is detected on activeCellRef
|
625
722
|
|
626
723
|
|
@@ -628,116 +725,55 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
628
725
|
startEditMode();
|
629
726
|
};
|
630
727
|
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
point2: newSelectionArea,
|
653
|
-
matcher: tempMatcher,
|
654
|
-
areaCreated: false
|
655
|
-
}]);
|
656
|
-
setCurrentMatcher(tempMatcher);
|
657
|
-
cellEditorRulerRef.current.textContent = '';
|
658
|
-
}; // Update the data
|
659
|
-
|
660
|
-
|
661
|
-
var handleEditSubmit = function handleEditSubmit(event) {
|
662
|
-
var key = event.key;
|
663
|
-
|
664
|
-
if (key === 'Enter') {
|
665
|
-
updateSelectionAreaOnCellEditSubmit({
|
666
|
-
type: 'Enter'
|
667
|
-
});
|
668
|
-
setActiveCellCoordinates(function (prev) {
|
669
|
-
return _objectSpread(_objectSpread({}, prev), {}, {
|
670
|
-
row: prev.row === rows.length - 1 ? prev.row : prev.row + 1 // do not move to next cell below if we're already in the last row
|
671
|
-
|
672
|
-
});
|
673
|
-
});
|
728
|
+
(0, _hooks2.useSpreadsheetEdit)({
|
729
|
+
isEditing: isEditing,
|
730
|
+
rows: rows,
|
731
|
+
activeCellCoordinates: activeCellCoordinates,
|
732
|
+
activeCellRef: activeCellRef,
|
733
|
+
cellEditorRef: cellEditorRef,
|
734
|
+
cellEditorRulerRef: cellEditorRulerRef,
|
735
|
+
columns: columns,
|
736
|
+
defaultColumn: defaultColumn,
|
737
|
+
cellEditorValue: cellEditorValue
|
738
|
+
});
|
739
|
+
var handleActiveCellMouseEnter = (0, _react.useCallback)(function () {
|
740
|
+
handleActiveCellMouseEnterCallback(selectionAreas, clickAndHoldActive);
|
741
|
+
}, [clickAndHoldActive, selectionAreas, handleActiveCellMouseEnterCallback]); // Only update if there are cell selection areas
|
742
|
+
// Find point object that matches currentMatcher and remove the second point
|
743
|
+
// because hovering over the active cell while clicking and holding should
|
744
|
+
// remove the previously existing selection area
|
745
|
+
|
746
|
+
var handleActiveCellMouseEnterCallback = (0, _react.useCallback)(function (areas, clickHold) {
|
747
|
+
if (!currentMatcher) {
|
748
|
+
return;
|
674
749
|
}
|
675
750
|
|
676
|
-
if (
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
setActiveCellCoordinates(function (prev) {
|
682
|
-
return _objectSpread(_objectSpread({}, prev), {}, {
|
683
|
-
column: prev.column === columns.length - 1 ? prev.column : prev.column + 1 // do not move to next cell below if we're already in the last column
|
684
|
-
|
751
|
+
if (areas && areas.length && clickHold && currentMatcher) {
|
752
|
+
setSelectionAreas(function (prev) {
|
753
|
+
var selectionAreaClone = (0, _deepCloneObject.deepCloneObject)(prev);
|
754
|
+
var indexOfItemToUpdate = selectionAreaClone.findIndex(function (item) {
|
755
|
+
return item.matcher === currentMatcher;
|
685
756
|
});
|
686
|
-
});
|
687
|
-
}
|
688
757
|
|
689
|
-
|
690
|
-
|
758
|
+
if (indexOfItemToUpdate === -1) {
|
759
|
+
return prev;
|
760
|
+
}
|
691
761
|
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
cellEditorRef.current.style.display = 'block';
|
702
|
-
cellEditorRef.current.style.width = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.width;
|
703
|
-
cellEditorRef.current.style.height = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.height;
|
704
|
-
cellEditorRef.current.style.paddingTop = "".concat((parseInt(activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.height) - 16) / 2 - 1, "px"); // calculate paddingTop based on cellHeight which could be variable depending on the cellSize prop
|
705
|
-
|
706
|
-
cellEditorRef.current.style.textAlign = (cellProps === null || cellProps === void 0 ? void 0 : (_cellProps$column = cellProps.column) === null || _cellProps$column === void 0 ? void 0 : _cellProps$column.placement) === 'right' ? 'right' : 'left';
|
707
|
-
(_cellEditorRef$curren = cellEditorRef.current) === null || _cellEditorRef$curren === void 0 ? void 0 : _cellEditorRef$curren.focus();
|
708
|
-
var rulerWidth = cellEditorRulerRef.current.offsetWidth;
|
709
|
-
var cellWidth = activeCellRef.current.offsetWidth;
|
710
|
-
|
711
|
-
if (rulerWidth >= cellWidth) {
|
712
|
-
var widthMultiplier = Math.floor(rulerWidth / cellWidth) + 1;
|
713
|
-
var startingColumnPosition = activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column;
|
714
|
-
var startingRowPosition = activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row;
|
715
|
-
var totalColumns = columns.length;
|
716
|
-
var totalRows = rows.length;
|
717
|
-
var totalMultiplierPossible = totalColumns - startingColumnPosition;
|
718
|
-
var totalCellEditorMaxHeight = (totalRows - startingRowPosition) * defaultColumn.rowHeight;
|
719
|
-
cellEditorRef.current.style.maxHeight = (0, _layout.px)(totalCellEditorMaxHeight);
|
720
|
-
cellEditorRef.current.style.width = (0, _layout.px)(cellWidth * (widthMultiplier <= totalMultiplierPossible ? widthMultiplier : totalMultiplierPossible));
|
721
|
-
cellEditorRef.current.style.height = (0, _layout.px)(cellEditorRef.current.scrollHeight); // adds dynamic height to cell editor
|
722
|
-
// Cell editor has reached max height, we need to add the scrolling back.
|
723
|
-
// We also need to subtract 1 to account for the fact that the cell editor
|
724
|
-
// is placed one pixel below the cell being edited to account for the border
|
725
|
-
|
726
|
-
if (cellEditorRef.current.clientHeight === totalCellEditorMaxHeight - 1) {
|
727
|
-
cellEditorRef.current.style.overflow = 'auto';
|
728
|
-
} else {
|
729
|
-
cellEditorRef.current.style.overflow = 'hidden';
|
762
|
+
if ((0, _typeof2.default)(selectionAreaClone[indexOfItemToUpdate].point2) === 'object' && selectionAreaClone[indexOfItemToUpdate].areaCreated) {
|
763
|
+
selectionAreaClone[indexOfItemToUpdate].point2 = selectionAreaClone[indexOfItemToUpdate].point1;
|
764
|
+
selectionAreaClone[indexOfItemToUpdate].areaCreated = false;
|
765
|
+
setActiveCellInsideSelectionArea(false);
|
766
|
+
(0, _removeCellSelections.removeCellSelections)({
|
767
|
+
matcher: currentMatcher,
|
768
|
+
spreadsheetRef: spreadsheetRef
|
769
|
+
});
|
770
|
+
return selectionAreaClone;
|
730
771
|
}
|
731
|
-
}
|
732
|
-
}
|
733
772
|
|
734
|
-
|
735
|
-
|
736
|
-
cellEditorRef.current.style.display = 'none';
|
737
|
-
cellEditorRef.current.blur();
|
738
|
-
activeCellRef.current.focus();
|
773
|
+
return prev;
|
774
|
+
});
|
739
775
|
}
|
740
|
-
}, [
|
776
|
+
}, [spreadsheetRef, currentMatcher]);
|
741
777
|
return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, getTableProps(), (0, _devtools.getDevtoolsProps)(componentName), {
|
742
778
|
className: (0, _classnames.default)(blockClass, className, "".concat(blockClass, "--interactive-cell-element"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__container-has-focus"), containerHasFocus)),
|
743
779
|
ref: spreadsheetRef,
|
@@ -764,7 +800,8 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
764
800
|
setActiveCellCoordinates: setActiveCellCoordinates,
|
765
801
|
setSelectionAreas: setSelectionAreas,
|
766
802
|
setCurrentMatcher: setCurrentMatcher,
|
767
|
-
setSelectionAreaData: setSelectionAreaData
|
803
|
+
setSelectionAreaData: setSelectionAreaData,
|
804
|
+
updateActiveCellCoordinates: updateActiveCellCoordinates
|
768
805
|
}), /*#__PURE__*/_react.default.createElement(_DataSpreadsheetBody.DataSpreadsheetBody, {
|
769
806
|
activeCellCoordinates: activeCellCoordinates,
|
770
807
|
ref: spreadsheetRef,
|
@@ -791,24 +828,39 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
791
828
|
totalColumnsWidth: totalColumnsWidth,
|
792
829
|
id: id,
|
793
830
|
columns: columns,
|
794
|
-
defaultEmptyRowCount: defaultEmptyRowCount
|
831
|
+
defaultEmptyRowCount: defaultEmptyRowCount,
|
832
|
+
setActiveCellInsideSelectionArea: setActiveCellInsideSelectionArea
|
795
833
|
}), /*#__PURE__*/_react.default.createElement("button", {
|
834
|
+
onMouseDown: handleActiveCellMouseDown,
|
796
835
|
onClick: handleActiveCellClick,
|
797
836
|
onKeyDown: handleActiveCellKeyDown,
|
798
837
|
onDoubleClick: handleActiveCellDoubleClick,
|
838
|
+
onMouseEnter: handleActiveCellMouseEnter,
|
799
839
|
ref: activeCellRef,
|
800
|
-
className: (0, _classnames.default)("".concat(blockClass, "--interactive-cell-element"), "".concat(blockClass, "__active-cell--highlight")),
|
840
|
+
className: (0, _classnames.default)("".concat(blockClass, "--interactive-cell-element"), "".concat(blockClass, "__active-cell--highlight"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__active-cell--with-selection"), activeCellInsideSelectionArea)),
|
801
841
|
type: "button"
|
802
842
|
}, activeCellContent), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextArea, {
|
803
843
|
value: cellEditorValue,
|
804
|
-
onKeyDown: handleEditSubmit
|
844
|
+
onKeyDown: (0, _handleEditSubmit.handleEditSubmit)({
|
845
|
+
activeCellCoordinates: activeCellCoordinates,
|
846
|
+
cellEditorRulerRef: cellEditorRulerRef,
|
847
|
+
columns: columns,
|
848
|
+
previousState: previousState,
|
849
|
+
removeCellEditor: removeCellEditor,
|
850
|
+
rows: rows,
|
851
|
+
setActiveCellCoordinates: setActiveCellCoordinates,
|
852
|
+
setCurrentMatcher: setCurrentMatcher,
|
853
|
+
setSelectionAreas: setSelectionAreas,
|
854
|
+
spreadsheetRef: spreadsheetRef,
|
855
|
+
updateData: updateData
|
856
|
+
}),
|
805
857
|
onChange: function onChange(event) {
|
806
858
|
setCellEditorValue(event.target.value);
|
807
859
|
cellEditorRulerRef.current.textContent = event.target.value;
|
808
860
|
},
|
809
861
|
ref: cellEditorRef,
|
810
862
|
labelText: "",
|
811
|
-
"aria-labelledby": activeCellCoordinates ? "
|
863
|
+
"aria-labelledby": activeCellCoordinates ? "#".concat(blockClass, "__cell--").concat(activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row, "--").concat(activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) : null,
|
812
864
|
className: (0, _classnames.default)("".concat(blockClass, "__cell-editor"), "".concat(blockClass, "--interactive-cell-element"), "".concat(blockClass, "__cell-editor--").concat(cellSize), (0, _defineProperty2.default)({}, "".concat(blockClass, "__cell-editor--active"), isEditing))
|
813
865
|
}), /*#__PURE__*/_react.default.createElement("pre", {
|
814
866
|
"aria-hidden": true,
|
@@ -73,7 +73,8 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
|
|
73
73
|
setClickAndHoldActive = _ref.setClickAndHoldActive,
|
74
74
|
currentMatcher = _ref.currentMatcher,
|
75
75
|
setCurrentMatcher = _ref.setCurrentMatcher,
|
76
|
-
onSelectionAreaChange = _ref.onSelectionAreaChange
|
76
|
+
onSelectionAreaChange = _ref.onSelectionAreaChange,
|
77
|
+
setActiveCellInsideSelectionArea = _ref.setActiveCellInsideSelectionArea;
|
77
78
|
var previousState = (0, _hooks.usePreviousValue)({
|
78
79
|
selectionAreaData: selectionAreaData,
|
79
80
|
clickAndHoldActive: clickAndHoldActive
|
@@ -131,18 +132,20 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
|
|
131
132
|
|
132
133
|
if (!area.areaCreated && area.point1 && area.point2 && area.matcher) {
|
133
134
|
(0, _createCellSelectionArea.createCellSelectionArea)({
|
135
|
+
ref: ref,
|
134
136
|
area: area,
|
135
137
|
blockClass: blockClass,
|
136
138
|
defaultColumn: defaultColumn,
|
137
139
|
selectionAreas: selectionAreas,
|
138
|
-
setSelectionAreas: setSelectionAreas
|
140
|
+
setSelectionAreas: setSelectionAreas,
|
141
|
+
setActiveCellInsideSelectionArea: setActiveCellInsideSelectionArea
|
139
142
|
});
|
140
143
|
}
|
141
144
|
|
142
145
|
return;
|
143
146
|
});
|
144
147
|
}
|
145
|
-
}, [selectionAreas, setSelectionAreas, defaultColumn, onSelectionAreaChange, setSelectionAreaData]);
|
148
|
+
}, [selectionAreas, setSelectionAreas, defaultColumn, onSelectionAreaChange, setSelectionAreaData, ref, activeCellCoordinates, setActiveCellInsideSelectionArea]);
|
146
149
|
|
147
150
|
var populateSelectionAreaCellData = function populateSelectionAreaCellData(_ref2) {
|
148
151
|
var rowStart = _ref2.rowStart,
|
@@ -220,6 +223,9 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
|
|
220
223
|
// meaning that selectionAreas should only have one item by default
|
221
224
|
|
222
225
|
if (isHoldingCommandKey) {
|
226
|
+
var activeCellElement = ref.current.querySelector(".".concat(blockClass, "__active-cell--highlight"));
|
227
|
+
activeCellElement.setAttribute('data-selection-id', tempMatcher);
|
228
|
+
setActiveCellInsideSelectionArea(true);
|
223
229
|
setActiveCellCoordinates(activeCoordinates);
|
224
230
|
setCurrentMatcher(tempMatcher);
|
225
231
|
setSelectionAreas(function (prev) {
|
@@ -250,6 +256,7 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
|
|
250
256
|
setSelectionAreas(selectionAreaClone);
|
251
257
|
}
|
252
258
|
} else {
|
259
|
+
setActiveCellInsideSelectionArea(false);
|
253
260
|
setActiveCellCoordinates(activeCoordinates); // remove all previous cell selections
|
254
261
|
|
255
262
|
(0, _removeCellSelections.removeCellSelections)({
|
@@ -263,7 +270,7 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
|
|
263
270
|
setSelectionAreaData([]);
|
264
271
|
}
|
265
272
|
};
|
266
|
-
}, [currentMatcher, activeCellCoordinates, selectionAreas, setActiveCellCoordinates, setSelectionAreas, setContainerHasFocus, setClickAndHoldActive, setCurrentMatcher, ref, setSelectionAreaData]);
|
273
|
+
}, [currentMatcher, activeCellCoordinates, selectionAreas, setActiveCellCoordinates, setSelectionAreas, setContainerHasFocus, setClickAndHoldActive, setCurrentMatcher, ref, setSelectionAreaData, setActiveCellInsideSelectionArea]);
|
267
274
|
var handleBodyCellHover = (0, _react.useCallback)(function (cell, columnIndex) {
|
268
275
|
return function () {
|
269
276
|
if (clickAndHoldActive) {
|
@@ -296,7 +303,8 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
|
|
296
303
|
};
|
297
304
|
}, [clickAndHoldActive, currentMatcher, setSelectionAreas]);
|
298
305
|
var handleRowHeaderClick = (0, _react.useCallback)(function (index) {
|
299
|
-
return function () {
|
306
|
+
return function (event) {
|
307
|
+
var isHoldingCommandKey = event.metaKey || event.ctrlKey;
|
300
308
|
(0, _handleHeaderCellSelection.handleHeaderCellSelection)({
|
301
309
|
type: 'row',
|
302
310
|
activeCellCoordinates: activeCellCoordinates,
|
@@ -307,7 +315,8 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
|
|
307
315
|
setSelectionAreas: setSelectionAreas,
|
308
316
|
spreadsheetRef: ref,
|
309
317
|
index: index,
|
310
|
-
setSelectionAreaData: setSelectionAreaData
|
318
|
+
setSelectionAreaData: setSelectionAreaData,
|
319
|
+
isHoldingCommandKey: isHoldingCommandKey
|
311
320
|
});
|
312
321
|
};
|
313
322
|
}, [columns, ref, setSelectionAreas, setCurrentMatcher, setActiveCellCoordinates, activeCellCoordinates, rows, setSelectionAreaData]); // Builds the empty rows and calls `onDataUpdate` to set the new empty rows
|
@@ -350,10 +359,11 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
|
|
350
359
|
}), {
|
351
360
|
className: (0, _classnames.default)("".concat(blockClass, "__tr")),
|
352
361
|
"data-row-index": index,
|
353
|
-
"aria-rowindex": index
|
362
|
+
"aria-rowindex": index + 1
|
354
363
|
}), /*#__PURE__*/_react.default.createElement("div", {
|
355
364
|
role: "rowheader"
|
356
365
|
}, /*#__PURE__*/_react.default.createElement("button", {
|
366
|
+
id: "".concat(blockClass, "__cell--").concat(index, "--header"),
|
357
367
|
tabIndex: -1,
|
358
368
|
"data-row-index": index,
|
359
369
|
"data-column-index": "header",
|
@@ -366,13 +376,14 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
|
|
366
376
|
}, index + 1)), row.cells.map(function (cell, index) {
|
367
377
|
return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
|
368
378
|
key: "cell_".concat(index),
|
369
|
-
"aria-colindex": index
|
379
|
+
"aria-colindex": index + 1
|
370
380
|
}, cell.getCellProps(), {
|
371
381
|
role: "gridcell",
|
372
382
|
style: _objectSpread(_objectSpread({}, cell.getCellProps().style), {}, {
|
373
383
|
display: 'grid'
|
374
384
|
})
|
375
385
|
}), /*#__PURE__*/_react.default.createElement("button", {
|
386
|
+
id: "".concat(blockClass, "__cell--").concat(cell.row.index, "--").concat(index),
|
376
387
|
tabIndex: -1,
|
377
388
|
"data-row-index": cell.row.index,
|
378
389
|
"data-column-index": index,
|
@@ -496,6 +507,11 @@ DataSpreadsheetBody.propTypes = {
|
|
496
507
|
*/
|
497
508
|
setActiveCellCoordinates: _propTypes.default.func,
|
498
509
|
|
510
|
+
/**
|
511
|
+
* Setter fn for active cell inside of selection area
|
512
|
+
*/
|
513
|
+
setActiveCellInsideSelectionArea: _propTypes.default.func,
|
514
|
+
|
499
515
|
/**
|
500
516
|
* Setter fn for clickAndHold state value
|
501
517
|
*/
|