@carbon/ibm-products 1.18.2 → 1.19.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 +6 -0
- package/css/index-full-carbon.css.map +1 -1
- package/css/index-full-carbon.min.css +2 -2
- package/css/index-full-carbon.min.css.map +1 -1
- package/css/index-without-carbon.css +6 -0
- 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 +6 -0
- package/css/index.css.map +1 -1
- package/css/index.min.css +2 -2
- package/css/index.min.css.map +1 -1
- package/es/components/ActionSet/ActionSet.js +1 -0
- package/es/components/AddSelect/AddSelectFilter.js +9 -3
- package/es/components/AddSelect/AddSelectSidebar.js +3 -2
- package/es/components/DataSpreadsheet/DataSpreadsheet.js +3 -1
- package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +4 -3
- package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +25 -9
- package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +1 -3
- package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +63 -34
- package/es/components/DataSpreadsheet/utils/checkSelectedHeaderCell.js +17 -3
- package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +113 -19
- package/es/components/Datagrid/Datagrid/DraggableElement.js +0 -7
- package/es/global/js/hooks/useWindowResize.js +2 -1
- package/es/global/js/hooks/useWindowScroll.js +2 -1
- package/es/global/js/utils/scrollableAncestor.js +2 -1
- package/lib/components/ActionSet/ActionSet.js +1 -0
- package/lib/components/AddSelect/AddSelectFilter.js +10 -3
- package/lib/components/AddSelect/AddSelectSidebar.js +3 -2
- package/lib/components/DataSpreadsheet/DataSpreadsheet.js +3 -1
- package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +4 -3
- package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +25 -9
- package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +1 -4
- package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +64 -34
- package/lib/components/DataSpreadsheet/utils/checkSelectedHeaderCell.js +17 -3
- package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +112 -19
- package/lib/components/Datagrid/Datagrid/DraggableElement.js +0 -7
- package/lib/global/js/hooks/useWindowResize.js +3 -1
- package/lib/global/js/hooks/useWindowScroll.js +5 -1
- package/lib/global/js/utils/scrollableAncestor.js +6 -1
- package/package.json +4 -4
- package/scss/components/AddSelect/_add-select.scss +6 -0
- package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +1 -0
@@ -29,6 +29,7 @@ export var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref)
|
|
29
29
|
var activeCellCoordinates = _ref.activeCellCoordinates,
|
30
30
|
cellSize = _ref.cellSize,
|
31
31
|
columns = _ref.columns,
|
32
|
+
currentMatcher = _ref.currentMatcher,
|
32
33
|
defaultColumn = _ref.defaultColumn,
|
33
34
|
headerGroups = _ref.headerGroups,
|
34
35
|
scrollBarSize = _ref.scrollBarSize,
|
@@ -71,6 +72,7 @@ export var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref)
|
|
71
72
|
var handleColumnHeaderClick = function handleColumnHeaderClick(index) {
|
72
73
|
return function (event) {
|
73
74
|
var isHoldingCommandKey = event.metaKey || event.ctrlKey;
|
75
|
+
var isHoldingShiftKey = event.shiftKey;
|
74
76
|
handleHeaderCellSelection({
|
75
77
|
type: 'column',
|
76
78
|
activeCellCoordinates: activeCellCoordinates,
|
@@ -82,7 +84,9 @@ export var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref)
|
|
82
84
|
spreadsheetRef: ref,
|
83
85
|
index: index,
|
84
86
|
setSelectionAreaData: setSelectionAreaData,
|
85
|
-
isHoldingCommandKey: isHoldingCommandKey
|
87
|
+
isHoldingCommandKey: isHoldingCommandKey,
|
88
|
+
isHoldingShiftKey: isHoldingShiftKey,
|
89
|
+
currentMatcher: currentMatcher
|
86
90
|
});
|
87
91
|
};
|
88
92
|
};
|
@@ -103,23 +107,30 @@ export var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref)
|
|
103
107
|
return function (event) {
|
104
108
|
var _selectionAreaToClone;
|
105
109
|
|
110
|
+
if (event.shiftKey) {
|
111
|
+
// Remove columns, need to call handleHeaderCellSelection
|
112
|
+
return;
|
113
|
+
}
|
114
|
+
|
106
115
|
setSelectedHeaderReorderActive(true);
|
116
|
+
var selectionAreaToClone = selectionAreas.filter(function (item) {
|
117
|
+
return (item === null || item === void 0 ? void 0 : item.matcher) === currentMatcher;
|
118
|
+
});
|
119
|
+
var selectionAreaElement = ref.current.querySelector("[data-matcher-id=\"".concat((_selectionAreaToClone = selectionAreaToClone[0]) === null || _selectionAreaToClone === void 0 ? void 0 : _selectionAreaToClone.matcher, "\"]"));
|
107
120
|
var clickXPosition = event.clientX;
|
108
121
|
var headerButtonCoords = event.target.getBoundingClientRect();
|
122
|
+
var headerIndex = event.target.getAttribute('data-column-index');
|
109
123
|
var offsetXValue = clickXPosition - headerButtonCoords.left;
|
124
|
+
var lowestColumnIndexFromSelectionArea = Math.min(selectionAreaToClone[0].point1.column, selectionAreaToClone[0].point2.column);
|
125
|
+
var selectionAreaCoords = selectionAreaElement.getBoundingClientRect();
|
126
|
+
var updatedOffsetDifference = lowestColumnIndexFromSelectionArea < parseInt(headerIndex) ? offsetXValue + (headerButtonCoords.left - selectionAreaCoords.left) : offsetXValue;
|
110
127
|
var bodyContainer = document.querySelector(".".concat(blockClass, "__list--container")).firstElementChild;
|
111
|
-
var selectionAreaToClone = selectionAreas.filter(function (item) {
|
112
|
-
var _item$header;
|
113
|
-
|
114
|
-
return (item === null || item === void 0 ? void 0 : (_item$header = item.header) === null || _item$header === void 0 ? void 0 : _item$header.index) === index;
|
115
|
-
});
|
116
|
-
var selectionAreaElement = ref.current.querySelector("[data-matcher-id=\"".concat((_selectionAreaToClone = selectionAreaToClone[0]) === null || _selectionAreaToClone === void 0 ? void 0 : _selectionAreaToClone.matcher, "\"]"));
|
117
128
|
var selectionAreaClonedElement = selectionAreaElement.cloneNode();
|
118
129
|
var reorderIndicatorLine = selectionAreaElement.cloneNode();
|
119
130
|
reorderIndicatorLine.className = "".concat(blockClass, "__reorder-indicator-line");
|
120
131
|
reorderIndicatorLine.style.width = px(2);
|
121
132
|
selectionAreaClonedElement.classList.add("".concat(blockClass, "__selection-area--element-cloned"));
|
122
|
-
selectionAreaClonedElement.setAttribute('data-clone-offset-x',
|
133
|
+
selectionAreaClonedElement.setAttribute('data-clone-offset-x', updatedOffsetDifference);
|
123
134
|
selectionAreaClonedElement.setAttribute('data-column-index-original', index);
|
124
135
|
bodyContainer.appendChild(selectionAreaClonedElement);
|
125
136
|
bodyContainer.appendChild(reorderIndicatorLine);
|
@@ -169,7 +180,7 @@ export var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref)
|
|
169
180
|
}, "\xA0")), headerGroup.headers.map(function (column, index) {
|
170
181
|
var _cx2;
|
171
182
|
|
172
|
-
var selectedHeader = checkSelectedHeaderCell(index, selectionAreas, 'column');
|
183
|
+
var selectedHeader = checkSelectedHeaderCell(index, selectionAreas, 'column', rows);
|
173
184
|
return /*#__PURE__*/React.createElement("div", _extends({
|
174
185
|
key: "column_".concat(index),
|
175
186
|
role: "columnheader",
|
@@ -213,6 +224,11 @@ DataSpreadsheetHeader.propTypes = {
|
|
213
224
|
*/
|
214
225
|
columns: PropTypes.array,
|
215
226
|
|
227
|
+
/**
|
228
|
+
* uuid that corresponds to the current selection area
|
229
|
+
*/
|
230
|
+
currentMatcher: PropTypes.string,
|
231
|
+
|
216
232
|
/**
|
217
233
|
* Default spreadsheet sizing values
|
218
234
|
*/
|
@@ -7,7 +7,6 @@
|
|
7
7
|
import { useEffect } from 'react';
|
8
8
|
import { px } from '@carbon/layout';
|
9
9
|
import { pkg } from '../../../settings';
|
10
|
-
import { getScrollbarWidth } from '../../../global/js/utils/getScrollbarWidth';
|
11
10
|
import { moveColumnIndicatorLine } from '../utils/moveColumnIndicatorLine'; // Used specifically for reordering columns, will move the position of the
|
12
11
|
// cloned selection area to follow the position of the cursor
|
13
12
|
|
@@ -34,7 +33,6 @@ export var useSpreadsheetMouseMove = function useSpreadsheetMouseMove(_ref) {
|
|
34
33
|
spreadsheetCoords: spreadsheetCoords,
|
35
34
|
leftScrollAmount: scrollAmount
|
36
35
|
});
|
37
|
-
var scrollbarWidth = getScrollbarWidth();
|
38
36
|
var spreadsheetWrapperElement = ref.current;
|
39
37
|
spreadsheetWrapperElement.getBoundingClientRect();
|
40
38
|
var xPositionRelativeToSpreadsheet = event.clientX - spreadsheetCoords.left;
|
@@ -44,7 +42,7 @@ export var useSpreadsheetMouseMove = function useSpreadsheetMouseMove(_ref) {
|
|
44
42
|
var clonePlacement = Math.max(xPositionRelativeToSpreadsheet - offsetXValue, defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth); // Moves the position of the cloned selection area to follow mouse, and
|
45
43
|
// add the amount horizontally scrolled
|
46
44
|
|
47
|
-
clonedSelectionElement.style.left = px(totalSpreadsheetScrollingWidth - clonedSelectionWidth
|
45
|
+
clonedSelectionElement.style.left = px(totalSpreadsheetScrollingWidth - clonedSelectionWidth >= clonePlacement ? clonePlacement + scrollAmount : totalSpreadsheetScrollingWidth - clonedSelectionWidth);
|
48
46
|
};
|
49
47
|
|
50
48
|
if (headerCellHoldActive) {
|
@@ -30,7 +30,8 @@ export var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
|
|
30
30
|
setActiveCellCoordinates = _ref.setActiveCellCoordinates,
|
31
31
|
activeCellCoordinates = _ref.activeCellCoordinates,
|
32
32
|
rows = _ref.rows,
|
33
|
-
defaultColumn = _ref.defaultColumn
|
33
|
+
defaultColumn = _ref.defaultColumn,
|
34
|
+
selectionAreas = _ref.selectionAreas;
|
34
35
|
useEffect(function () {
|
35
36
|
var handleMouseUp = function handleMouseUp(event) {
|
36
37
|
// Remove the cloned selection area on mouse up
|
@@ -45,8 +46,12 @@ export var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
|
|
45
46
|
|
46
47
|
if (selectionAreaCloneElement) {
|
47
48
|
var closestCell = event.target.closest(".".concat(blockClass, "--interactive-cell-element"));
|
48
|
-
var newColumnIndex = closestCell === null || closestCell === void 0 ? void 0 : closestCell.getAttribute('data-column-index');
|
49
|
-
var originalColumnIndex = selectionAreaCloneElement === null || selectionAreaCloneElement === void 0 ? void 0 : selectionAreaCloneElement.getAttribute('data-column-index-original');
|
49
|
+
var newColumnIndex = parseInt === null || parseInt === void 0 ? void 0 : parseInt(closestCell === null || closestCell === void 0 ? void 0 : closestCell.getAttribute('data-column-index'));
|
50
|
+
var originalColumnIndex = parseInt === null || parseInt === void 0 ? void 0 : parseInt(selectionAreaCloneElement === null || selectionAreaCloneElement === void 0 ? void 0 : selectionAreaCloneElement.getAttribute('data-column-index-original'));
|
51
|
+
var selectionAreaToClone = selectionAreas.filter(function (item) {
|
52
|
+
return (item === null || item === void 0 ? void 0 : item.matcher) === currentMatcher;
|
53
|
+
});
|
54
|
+
var selectionAreaIndexArray = selectionAreaToClone[0].header.selectedIndexList;
|
50
55
|
var columnToMoveToElement = ref.current.querySelector("[data-row-index=\"header\"][data-column-index=\"".concat(newColumnIndex, "\"]")); // Mouse up element was not part of the spreadsheet component
|
51
56
|
|
52
57
|
if (!columnToMoveToElement) {
|
@@ -55,24 +60,11 @@ export var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
|
|
55
60
|
|
56
61
|
var selectionAreaToMove = ref.current.querySelector("[data-matcher-id=\"".concat(currentMatcher, "\"]"));
|
57
62
|
var spreadsheetPosition = ref.current.getBoundingClientRect();
|
58
|
-
var newIndexPosition = columnToMoveToElement.getBoundingClientRect();
|
59
63
|
var listContainer = ref.current.querySelector(".".concat(blockClass, "__list--container"));
|
60
64
|
var leftScrollAmount = listContainer.scrollLeft;
|
61
|
-
var relativeNewPosition = newIndexPosition.left - spreadsheetPosition.left + leftScrollAmount;
|
62
|
-
var cloneColumnWidth = selectionAreaCloneElement.offsetWidth;
|
63
|
-
var columnsWidthUpToNewIndex = 0;
|
64
65
|
var newIndexLessThanStarting = newColumnIndex < originalColumnIndex;
|
65
|
-
|
66
|
-
|
67
|
-
return;
|
68
|
-
}
|
69
|
-
|
70
|
-
if (index <= newColumnIndex) {
|
71
|
-
columnsWidthUpToNewIndex += (item === null || item === void 0 ? void 0 : item.width) || (defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.width);
|
72
|
-
}
|
73
|
-
});
|
74
|
-
var updatedSelectionAreaPlacement = newIndexLessThanStarting ? relativeNewPosition : columnsWidthUpToNewIndex - cloneColumnWidth + (defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth);
|
75
|
-
selectionAreaToMove.style.left = px(updatedSelectionAreaPlacement);
|
66
|
+
var newIndexGreater = newColumnIndex > originalColumnIndex;
|
67
|
+
var differenceBetweenOldNewIndex = newIndexGreater ? newColumnIndex - originalColumnIndex : originalColumnIndex - newColumnIndex;
|
76
68
|
setSelectionAreas(function (prev) {
|
77
69
|
var selectionAreaClone = deepCloneObject(prev);
|
78
70
|
|
@@ -88,28 +80,65 @@ export var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
|
|
88
80
|
return prev;
|
89
81
|
}
|
90
82
|
|
91
|
-
|
92
|
-
|
93
|
-
|
83
|
+
if (!selectionAreaIndexArray.includes(newColumnIndex)) {
|
84
|
+
// We need to not add just the newColumnIndex, but an array of indexes
|
85
|
+
// if there are multiple columns
|
86
|
+
var newIndexArray = newIndexGreater ? selectionAreaIndexArray.map(function (num) {
|
87
|
+
return num + differenceBetweenOldNewIndex;
|
88
|
+
}) : selectionAreaIndexArray.map(function (num) {
|
89
|
+
return num - differenceBetweenOldNewIndex;
|
90
|
+
});
|
91
|
+
selectionAreaClone[indexOfItemToUpdate].header.selectedIndexList = newIndexArray;
|
92
|
+
selectionAreaClone[indexOfItemToUpdate].point1.column = Math.min.apply(Math, _toConsumableArray(newIndexArray));
|
93
|
+
selectionAreaClone[indexOfItemToUpdate].point2.column = Math.max.apply(Math, _toConsumableArray(newIndexArray));
|
94
|
+
}
|
95
|
+
|
94
96
|
return selectionAreaClone;
|
95
|
-
});
|
96
|
-
|
97
|
-
|
98
|
-
|
97
|
+
}); // Only reorder columns if the new index is _not_ part of the
|
98
|
+
// selectionAreaIndexArray, meaning the new placement is outside
|
99
|
+
// of the current selection area. Similarly, the active cell position
|
100
|
+
// should only be changed under the same condition.
|
101
|
+
|
102
|
+
if (!selectionAreaIndexArray.includes(newColumnIndex)) {
|
103
|
+
var deleteCount = selectionAreaIndexArray.length;
|
104
|
+
var startIndex = Math.min.apply(Math, _toConsumableArray(selectionAreaIndexArray));
|
105
|
+
var columnIdArray = visibleColumns.map(function (column) {
|
106
|
+
return column.id;
|
107
|
+
});
|
99
108
|
|
100
|
-
|
109
|
+
var columnIdArrayClone = _toConsumableArray(columnIdArray);
|
101
110
|
|
111
|
+
var getNewColumnOrder = function getNewColumnOrder() {
|
112
|
+
var newColumnList = [];
|
113
|
+
selectionAreaIndexArray.map(function (index) {
|
114
|
+
return newColumnList.push(columnIdArray[index]);
|
115
|
+
});
|
116
|
+
return newColumnList;
|
117
|
+
}; // Remove one element at the original index
|
102
118
|
|
103
|
-
columnIdArrayClone.splice(originalColumnIndex, 1); // Add one element at the new index
|
104
119
|
|
105
|
-
|
106
|
-
|
120
|
+
columnIdArrayClone.splice(startIndex, deleteCount);
|
121
|
+
var originalPointIndex = selectionAreaIndexArray.findIndex(function (item) {
|
122
|
+
return item === originalColumnIndex;
|
123
|
+
});
|
124
|
+
var updatedNewIndexWithNewOrder = newColumnIndex - originalPointIndex; // Add one element at the new index
|
107
125
|
|
108
|
-
|
109
|
-
|
110
|
-
|
126
|
+
columnIdArrayClone.splice.apply(columnIdArrayClone, [updatedNewIndexWithNewOrder, 0].concat(_toConsumableArray(getNewColumnOrder())));
|
127
|
+
setColumnOrder(columnIdArrayClone); // Function provided by useTable (react-table) hook to reorder columns
|
128
|
+
|
129
|
+
var newCellCoords = _objectSpread(_objectSpread({}, activeCellCoordinates), {}, {
|
130
|
+
column: newIndexGreater ? activeCellCoordinates.column + differenceBetweenOldNewIndex : activeCellCoordinates.column - differenceBetweenOldNewIndex
|
131
|
+
});
|
132
|
+
|
133
|
+
setActiveCellCoordinates(newCellCoords);
|
134
|
+
var firstSelectedHeader = Array.from(ref.current.querySelectorAll(".".concat(blockClass, "__th--selected-header")))[0];
|
135
|
+
var firstSelectedHeaderCoords = firstSelectedHeader.getBoundingClientRect();
|
136
|
+
var newRelativePosition = firstSelectedHeaderCoords.left - spreadsheetPosition.left + leftScrollAmount; // console.log(firstSelectedHeaderCoords.left - spreadsheetPosition.left + leftScrollAmount);
|
137
|
+
|
138
|
+
var updatedSelectionAreaPlacement = newIndexLessThanStarting ? newRelativePosition : newColumnIndex === originalColumnIndex ? selectionAreaToMove.style.left : newRelativePosition;
|
139
|
+
selectionAreaToMove.style.left = px(updatedSelectionAreaPlacement);
|
140
|
+
} // Remove the cloned column and indicator elements
|
111
141
|
|
112
|
-
setActiveCellCoordinates(newCellCoords); // Remove the cloned column and indicator elements
|
113
142
|
|
114
143
|
var indicatorLineElement = ref.current.querySelector(".".concat(blockClass, "__reorder-indicator-line"));
|
115
144
|
indicatorLineElement === null || indicatorLineElement === void 0 ? void 0 : indicatorLineElement.remove();
|
@@ -151,5 +180,5 @@ export var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
|
|
151
180
|
return function () {
|
152
181
|
document.removeEventListener('mouseup', handleMouseUp);
|
153
182
|
};
|
154
|
-
}, [blockClass, currentMatcher, setSelectionAreas, setClickAndHoldActive, setValidStartingPoint, validStartingPoint, ref, setHeaderCellHoldActive, setColumnOrder, visibleColumns, setActiveCellCoordinates, activeCellCoordinates, rows, defaultColumn]);
|
183
|
+
}, [blockClass, currentMatcher, setSelectionAreas, setClickAndHoldActive, setValidStartingPoint, validStartingPoint, ref, setHeaderCellHoldActive, setColumnOrder, visibleColumns, setActiveCellCoordinates, activeCellCoordinates, rows, defaultColumn, selectionAreas]);
|
155
184
|
};
|
@@ -5,12 +5,26 @@
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*/
|
7
7
|
import { deepCloneObject } from '../../../global/js/utils/deepCloneObject';
|
8
|
-
export var checkSelectedHeaderCell = function checkSelectedHeaderCell(headerIndex, selectionAreas, headerType) {
|
8
|
+
export var checkSelectedHeaderCell = function checkSelectedHeaderCell(headerIndex, selectionAreas, headerType, items) {
|
9
9
|
var areasCloned = deepCloneObject(selectionAreas);
|
10
10
|
var isSelectedHeader = areasCloned.some(function (area) {
|
11
|
-
var _area$
|
11
|
+
var _area$point, _area$point2, _area$point3, _area$point4, _area$point5, _area$point6, _area$point7, _area$point8;
|
12
12
|
|
13
|
-
|
13
|
+
var oppositeType = headerType === 'column' ? 'row' : 'column';
|
14
|
+
var minOppositeSelection = Math.min(area === null || area === void 0 ? void 0 : (_area$point = area.point1) === null || _area$point === void 0 ? void 0 : _area$point[oppositeType], area === null || area === void 0 ? void 0 : (_area$point2 = area.point2) === null || _area$point2 === void 0 ? void 0 : _area$point2[oppositeType]);
|
15
|
+
var maxOppositeSelection = Math.max(area === null || area === void 0 ? void 0 : (_area$point3 = area.point1) === null || _area$point3 === void 0 ? void 0 : _area$point3[oppositeType], area === null || area === void 0 ? void 0 : (_area$point4 = area.point2) === null || _area$point4 === void 0 ? void 0 : _area$point4[oppositeType]);
|
16
|
+
var minSelection = Math.min(area === null || area === void 0 ? void 0 : (_area$point5 = area.point1) === null || _area$point5 === void 0 ? void 0 : _area$point5[headerType], area === null || area === void 0 ? void 0 : (_area$point6 = area.point2) === null || _area$point6 === void 0 ? void 0 : _area$point6[headerType]);
|
17
|
+
var maxSelection = Math.max(area === null || area === void 0 ? void 0 : (_area$point7 = area.point1) === null || _area$point7 === void 0 ? void 0 : _area$point7[headerType], area === null || area === void 0 ? void 0 : (_area$point8 = area.point2) === null || _area$point8 === void 0 ? void 0 : _area$point8[headerType]);
|
18
|
+
var isTrueSelectedState = (items === null || items === void 0 ? void 0 : items.length) - 1 === maxOppositeSelection && minOppositeSelection === 0; // console.log({minSelection, maxSelection});
|
19
|
+
// Iterate over all columns included in the selection area
|
20
|
+
|
21
|
+
for (var i = minSelection; i <= maxSelection; i++) {
|
22
|
+
if (headerIndex === i && isTrueSelectedState) {
|
23
|
+
return true;
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
return false;
|
14
28
|
});
|
15
29
|
return isSelectedHeader;
|
16
30
|
};
|
@@ -10,19 +10,37 @@ import { deepCloneObject } from '../../../global/js/utils/deepCloneObject';
|
|
10
10
|
import uuidv4 from '../../../global/js/utils/uuidv4';
|
11
11
|
import { removeCellSelections } from './removeCellSelections';
|
12
12
|
import { checkActiveHeaderCell } from './checkActiveHeaderCell';
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
13
|
+
|
14
|
+
var getSelectedItemIndexList = function getSelectedItemIndexList(_ref) {
|
15
|
+
var indexList = _ref.indexList,
|
16
|
+
newIndex = _ref.newIndex,
|
17
|
+
activeCellIndex = _ref.activeCellIndex;
|
18
|
+
var lowestIndex = newIndex > activeCellIndex ? activeCellIndex : Math.min.apply(Math, _toConsumableArray(indexList).concat([newIndex]));
|
19
|
+
var highestIndex = newIndex < activeCellIndex ? activeCellIndex : Math.max.apply(Math, _toConsumableArray(indexList).concat([newIndex]));
|
20
|
+
var newIndexList = [];
|
21
|
+
|
22
|
+
for (var i = lowestIndex; i <= highestIndex; i++) {
|
23
|
+
newIndexList.push(i);
|
24
|
+
}
|
25
|
+
|
26
|
+
return [].concat(newIndexList);
|
27
|
+
};
|
28
|
+
|
29
|
+
export var handleHeaderCellSelection = function handleHeaderCellSelection(_ref2) {
|
30
|
+
var type = _ref2.type,
|
31
|
+
activeCellCoordinates = _ref2.activeCellCoordinates,
|
32
|
+
rows = _ref2.rows,
|
33
|
+
columns = _ref2.columns,
|
34
|
+
currentMatcher = _ref2.currentMatcher,
|
35
|
+
setActiveCellCoordinates = _ref2.setActiveCellCoordinates,
|
36
|
+
setCurrentMatcher = _ref2.setCurrentMatcher,
|
37
|
+
setSelectionAreas = _ref2.setSelectionAreas,
|
38
|
+
spreadsheetRef = _ref2.spreadsheetRef,
|
39
|
+
index = _ref2.index,
|
40
|
+
isKeyboard = _ref2.isKeyboard,
|
41
|
+
setSelectionAreaData = _ref2.setSelectionAreaData,
|
42
|
+
isHoldingCommandKey = _ref2.isHoldingCommandKey,
|
43
|
+
isHoldingShiftKey = _ref2.isHoldingShiftKey;
|
26
44
|
|
27
45
|
if (!isHoldingCommandKey) {
|
28
46
|
setSelectionAreaData([]);
|
@@ -43,11 +61,15 @@ export var handleHeaderCellSelection = function handleHeaderCellSelection(_ref)
|
|
43
61
|
column: type === 'column' ? columnValue : columns.length - 1
|
44
62
|
};
|
45
63
|
var tempMatcher = uuidv4();
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
64
|
+
|
65
|
+
if (!isHoldingShiftKey) {
|
66
|
+
setActiveCellCoordinates({
|
67
|
+
row: type === 'column' ? 0 : rowValue,
|
68
|
+
column: type === 'column' ? columnValue : 0
|
69
|
+
});
|
70
|
+
setCurrentMatcher(tempMatcher);
|
71
|
+
}
|
72
|
+
|
51
73
|
var newSelectionArea = {
|
52
74
|
point1: point1,
|
53
75
|
point2: point2,
|
@@ -55,7 +77,7 @@ export var handleHeaderCellSelection = function handleHeaderCellSelection(_ref)
|
|
55
77
|
matcher: tempMatcher,
|
56
78
|
header: {
|
57
79
|
type: type,
|
58
|
-
|
80
|
+
selectedIndexList: [type === 'column' ? columnValue : rowValue]
|
59
81
|
}
|
60
82
|
};
|
61
83
|
setSelectionAreas(function (prev) {
|
@@ -81,6 +103,78 @@ export var handleHeaderCellSelection = function handleHeaderCellSelection(_ref)
|
|
81
103
|
return [].concat(_toConsumableArray(prev), [newSelectionArea]);
|
82
104
|
}
|
83
105
|
|
106
|
+
if (isHoldingShiftKey) {
|
107
|
+
var _selectionAreasClone$, _selectionAreasClone$2;
|
108
|
+
|
109
|
+
var _selectionsFromHeaderCell = selectionsClone.filter(function (item) {
|
110
|
+
var _item$header3;
|
111
|
+
|
112
|
+
return (_item$header3 = item.header) === null || _item$header3 === void 0 ? void 0 : _item$header3.type;
|
113
|
+
}); // Shift/click behavior should not occur unless there are activeCellCoordinates set
|
114
|
+
|
115
|
+
|
116
|
+
var currentSelectionArea = _selectionsFromHeaderCell.filter(function (item) {
|
117
|
+
return item.matcher === currentMatcher;
|
118
|
+
})[0];
|
119
|
+
|
120
|
+
var originalAreaIndex = Math.max(currentSelectionArea === null || currentSelectionArea === void 0 ? void 0 : currentSelectionArea.point1[type], currentSelectionArea === null || currentSelectionArea === void 0 ? void 0 : currentSelectionArea.point2[type], activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates[type]);
|
121
|
+
var newIndexValue = type === 'column' ? columnValue : rowValue;
|
122
|
+
var newPoint = {
|
123
|
+
row: originalAreaIndex < newIndexValue ? rows.length - 1 : 0,
|
124
|
+
column: columnValue
|
125
|
+
};
|
126
|
+
var selectionAreasClone = deepCloneObject(prev);
|
127
|
+
var indexOfCurrentArea = selectionAreasClone.findIndex(function (item) {
|
128
|
+
return item.matcher === currentMatcher;
|
129
|
+
});
|
130
|
+
var newIndexList = getSelectedItemIndexList({
|
131
|
+
indexList: ((_selectionAreasClone$ = selectionAreasClone[indexOfCurrentArea]) === null || _selectionAreasClone$ === void 0 ? void 0 : (_selectionAreasClone$2 = _selectionAreasClone$.header) === null || _selectionAreasClone$2 === void 0 ? void 0 : _selectionAreasClone$2.selectedIndexList) || [type === 'column' ? columnValue : rowValue],
|
132
|
+
newIndex: newIndexValue,
|
133
|
+
activeCellIndex: activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates[type]
|
134
|
+
});
|
135
|
+
|
136
|
+
var setPoint1 = function setPoint1(value) {
|
137
|
+
return value < newIndexValue ? {
|
138
|
+
row: type === 'column' ? 0 : Math.min.apply(Math, _toConsumableArray(newIndexList)),
|
139
|
+
column: type === 'column' ? Math.min.apply(Math, _toConsumableArray(newIndexList)) : 0
|
140
|
+
} : newPoint;
|
141
|
+
};
|
142
|
+
|
143
|
+
var setPoint2 = function setPoint2(value) {
|
144
|
+
return value < newIndexValue ? newPoint : {
|
145
|
+
row: type === 'column' ? rows.length - 1 : Math.max.apply(Math, _toConsumableArray(newIndexList)),
|
146
|
+
column: type === 'column' ? Math.max.apply(Math, _toConsumableArray(newIndexList)) : columns.length - 1
|
147
|
+
};
|
148
|
+
}; // If there is no active cell set and shift is clicked on a header cell
|
149
|
+
|
150
|
+
|
151
|
+
if (!activeCellCoordinates || typeof activeCellCoordinates === 'undefined') {
|
152
|
+
// Need to set positioning of active cell because it doesn't exist yet
|
153
|
+
setCurrentMatcher(tempMatcher);
|
154
|
+
var firstSelectionArea = {
|
155
|
+
point1: setPoint1(type === 'column' ? columnValue : rowValue),
|
156
|
+
point2: setPoint2(type === 'column' ? columnValue : rowValue),
|
157
|
+
areaCreated: false,
|
158
|
+
matcher: tempMatcher,
|
159
|
+
header: {
|
160
|
+
type: type,
|
161
|
+
selectedIndexList: [type === 'column' ? columnValue : rowValue]
|
162
|
+
}
|
163
|
+
};
|
164
|
+
setActiveCellCoordinates({
|
165
|
+
row: type === 'column' ? 0 : rowValue,
|
166
|
+
column: type === 'column' ? columnValue : 0
|
167
|
+
});
|
168
|
+
return [firstSelectionArea];
|
169
|
+
}
|
170
|
+
|
171
|
+
selectionAreasClone[indexOfCurrentArea].point1 = setPoint1(activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates[type]);
|
172
|
+
selectionAreasClone[indexOfCurrentArea].point2 = setPoint2(activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates[type]);
|
173
|
+
selectionAreasClone[indexOfCurrentArea].areaCreated = false;
|
174
|
+
selectionAreasClone[indexOfCurrentArea].header.selectedIndexList = newIndexList;
|
175
|
+
return selectionAreasClone;
|
176
|
+
}
|
177
|
+
|
84
178
|
return [newSelectionArea];
|
85
179
|
});
|
86
180
|
};
|
@@ -55,7 +55,6 @@ var DraggableElement = function DraggableElement(_ref) {
|
|
55
55
|
var dragIndex = item.index;
|
56
56
|
var hoverIndex = index; // Don't replace items with themselves
|
57
57
|
|
58
|
-
// Don't replace items with themselves
|
59
58
|
if (dragIndex === hoverIndex || disabled) {
|
60
59
|
return;
|
61
60
|
}
|
@@ -67,12 +66,6 @@ var DraggableElement = function DraggableElement(_ref) {
|
|
67
66
|
// to avoid expensive index searches.
|
68
67
|
// eslint-disable-next-line no-param-reassign
|
69
68
|
|
70
|
-
// Time to actually perform the action
|
71
|
-
// Note: we're mutating the monitor item here!
|
72
|
-
// Generally it's better to avoid mutations,
|
73
|
-
// but it's good here for the sake of performance
|
74
|
-
// to avoid expensive index searches.
|
75
|
-
// eslint-disable-next-line no-param-reassign
|
76
69
|
item.index = hoverIndex;
|
77
70
|
}
|
78
71
|
}),
|
@@ -1,11 +1,12 @@
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
2
|
+
import _typeof from "@babel/runtime/helpers/typeof";
|
2
3
|
|
3
4
|
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; }
|
4
5
|
|
5
6
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
6
7
|
|
7
8
|
import { useRef, useLayoutEffect } from 'react';
|
8
|
-
var windowExists = typeof window !== "undefined";
|
9
|
+
var windowExists = (typeof window === "undefined" ? "undefined" : _typeof(window)) !== "undefined";
|
9
10
|
|
10
11
|
var getWindowSize = function getWindowSize() {
|
11
12
|
if (!windowExists) {
|
@@ -1,6 +1,7 @@
|
|
1
|
+
import _typeof from "@babel/runtime/helpers/typeof";
|
1
2
|
import { useRef, useLayoutEffect } from 'react';
|
2
3
|
import { scrollableAncestor } from '../utils/scrollableAncestor';
|
3
|
-
var windowExists = typeof window !== "undefined";
|
4
|
+
var windowExists = (typeof window === "undefined" ? "undefined" : _typeof(window)) !== "undefined";
|
4
5
|
|
5
6
|
var useTargetScroll = function useTargetScroll(target, effect, deps, throttleInterval) {
|
6
7
|
var scrollPosition = useRef({});
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
import _typeof from "@babel/runtime/helpers/typeof";
|
2
|
+
var windowExists = (typeof window === "undefined" ? "undefined" : _typeof(window)) !== "undefined"; // determine whether the target is scrollable
|
2
3
|
|
3
4
|
var scrollable = function scrollable(target) {
|
4
5
|
var style = window.getComputedStyle(target);
|
@@ -148,6 +148,7 @@ ActionSet.validateActions = function (sizeFn) {
|
|
148
148
|
var problems = [];
|
149
149
|
|
150
150
|
if (actions > 0) {
|
151
|
+
// eslint-disable-next-line react/prop-types
|
151
152
|
var size = sizeFn ? sizeFn(props) : props.size || defaults.size;
|
152
153
|
var stacking = willStack(size, actions);
|
153
154
|
|
@@ -17,6 +17,8 @@ var _react = _interopRequireWildcard(require("react"));
|
|
17
17
|
|
18
18
|
var _carbonComponentsReact = require("carbon-components-react");
|
19
19
|
|
20
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
21
|
+
|
20
22
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
21
23
|
|
22
24
|
var _iconsReact = require("@carbon/icons-react");
|
@@ -79,6 +81,7 @@ var AddSelectFilter = function AddSelectFilter(_ref) {
|
|
79
81
|
|
80
82
|
|
81
83
|
var applyFilters = function applyFilters() {
|
84
|
+
setOpen(false);
|
82
85
|
handleFilter(filters);
|
83
86
|
};
|
84
87
|
|
@@ -104,6 +107,8 @@ var AddSelectFilter = function AddSelectFilter(_ref) {
|
|
104
107
|
};
|
105
108
|
|
106
109
|
var showFilter = multi && (filterOpts === null || filterOpts === void 0 ? void 0 : filterOpts.length) > 0;
|
110
|
+
var filterBtnClassnames = (0, _classnames.default)("".concat(blockClass, "-toggle"), (0, _defineProperty2.default)({}, "".concat(blockClass, "-toggle--open"), open));
|
111
|
+
var dirtyInput = Object.keys(filters).length > 0;
|
107
112
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
108
113
|
className: "".concat(blockClass, "-search")
|
109
114
|
}, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextInput, {
|
@@ -120,7 +125,7 @@ var AddSelectFilter = function AddSelectFilter(_ref) {
|
|
120
125
|
return setOpen(!open);
|
121
126
|
},
|
122
127
|
iconDescription: iconDescription,
|
123
|
-
className:
|
128
|
+
className: filterBtnClassnames,
|
124
129
|
size: "md"
|
125
130
|
}), open && /*#__PURE__*/_react.default.createElement("div", {
|
126
131
|
className: blockClass
|
@@ -146,11 +151,13 @@ var AddSelectFilter = function AddSelectFilter(_ref) {
|
|
146
151
|
}, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
|
147
152
|
kind: "secondary",
|
148
153
|
onClick: resetFilters,
|
149
|
-
className: "".concat(blockClass, "-button")
|
154
|
+
className: "".concat(blockClass, "-button"),
|
155
|
+
disabled: !dirtyInput
|
150
156
|
}, secondaryButtonText), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
|
151
157
|
kind: "primary",
|
152
158
|
onClick: applyFilters,
|
153
|
-
className: "".concat(blockClass, "-button")
|
159
|
+
className: "".concat(blockClass, "-button"),
|
160
|
+
disabled: !dirtyInput && !hasFiltersApplied
|
154
161
|
}, primaryButtonText)))), hasFiltersApplied && /*#__PURE__*/_react.default.createElement("div", {
|
155
162
|
className: "".concat(blockClass, "-applied")
|
156
163
|
}, Object.keys(appliedFilters).map(function (filterType) {
|
@@ -23,7 +23,7 @@ var _settings = require("../../settings");
|
|
23
23
|
|
24
24
|
var _AddSelectMetaPanel = require("./AddSelectMetaPanel");
|
25
25
|
|
26
|
-
var _excluded = ["icon", "avatar"];
|
26
|
+
var _excluded = ["meta", "icon", "avatar"];
|
27
27
|
var componentName = 'AddSelectSidebar';
|
28
28
|
|
29
29
|
var AddSelectSidebar = function AddSelectSidebar(_ref) {
|
@@ -53,7 +53,8 @@ var AddSelectSidebar = function AddSelectSidebar(_ref) {
|
|
53
53
|
}); // certain properties should not be displayed in the sidebar
|
54
54
|
// eslint-disable-next-line no-unused-vars
|
55
55
|
|
56
|
-
var
|
56
|
+
var meta = selectedItem.meta,
|
57
|
+
icon = selectedItem.icon,
|
57
58
|
avatar = selectedItem.avatar,
|
58
59
|
newItem = (0, _objectWithoutProperties2.default)(selectedItem, _excluded);
|
59
60
|
acc.push(newItem);
|
@@ -701,7 +701,8 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
701
701
|
spreadsheetRef: spreadsheetRef,
|
702
702
|
isKeyboard: isKeyboard,
|
703
703
|
setSelectionAreaData: setSelectionAreaData,
|
704
|
-
index: index
|
704
|
+
index: index,
|
705
|
+
currentMatcher: currentMatcher
|
705
706
|
}; // Select an entire column
|
706
707
|
|
707
708
|
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' && (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) !== 'header') {
|
@@ -802,6 +803,7 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
802
803
|
activeCellCoordinates: activeCellCoordinates,
|
803
804
|
cellSize: cellSize,
|
804
805
|
columns: columns,
|
806
|
+
currentMatcher: currentMatcher,
|
805
807
|
defaultColumn: defaultColumn,
|
806
808
|
headerGroups: headerGroups,
|
807
809
|
rows: rows,
|
@@ -197,7 +197,8 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
|
|
197
197
|
setActiveCellCoordinates: setActiveCellCoordinates,
|
198
198
|
rows: rows,
|
199
199
|
activeCellCoordinates: activeCellCoordinates,
|
200
|
-
defaultColumn: defaultColumn
|
200
|
+
defaultColumn: defaultColumn,
|
201
|
+
selectionAreas: selectionAreas
|
201
202
|
}); // Make sure that if the cellSize prop changes, the active
|
202
203
|
// cell also gets updated with the new size and new top placement
|
203
204
|
// value. All of the cell selections will be updated as well
|
@@ -421,7 +422,7 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
|
|
421
422
|
"data-column-index": "header",
|
422
423
|
type: "button",
|
423
424
|
onClick: handleRowHeaderClick(index),
|
424
|
-
className: (0, _classnames.default)("".concat(blockClass, "__td"), "".concat(blockClass, "__td-th"), "".concat(blockClass, "--interactive-cell-element"), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__td-th--active-header"), (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === index || (0, _checkActiveHeaderCell.checkActiveHeaderCell)(index, selectionAreas, 'row')), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__td-th--selected-header"), (0, _checkSelectedHeaderCell.checkSelectedHeaderCell)(index, selectionAreas, 'row')), _cx)),
|
425
|
+
className: (0, _classnames.default)("".concat(blockClass, "__td"), "".concat(blockClass, "__td-th"), "".concat(blockClass, "--interactive-cell-element"), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__td-th--active-header"), (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === index || (0, _checkActiveHeaderCell.checkActiveHeaderCell)(index, selectionAreas, 'row')), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__td-th--selected-header"), (0, _checkSelectedHeaderCell.checkSelectedHeaderCell)(index, selectionAreas, 'row', columns)), _cx)),
|
425
426
|
style: {
|
426
427
|
width: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth
|
427
428
|
}
|
@@ -450,7 +451,7 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
|
|
450
451
|
}, cell.render('Cell')));
|
451
452
|
}));
|
452
453
|
}
|
453
|
-
}, [prepareRow, rows, activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row, selectionAreas, handleRowHeaderClick, handleBodyCellClick, handleBodyCellHover, defaultColumn]);
|
454
|
+
}, [prepareRow, rows, activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row, selectionAreas, handleRowHeaderClick, handleBodyCellClick, handleBodyCellHover, defaultColumn, columns]);
|
454
455
|
var spreadsheetBodyRef = (0, _react.useRef)();
|
455
456
|
return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
|
456
457
|
ref: spreadsheetBodyRef,
|