@carbon/ibm-products 1.11.2 → 1.14.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 +0 -3
- package/css/components/Datagrid/styles/addons/CustomizeColumnsModal.css +47 -0
- package/css/components/Datagrid/styles/addons/CustomizeColumnsModal.css.map +1 -0
- package/css/components/Datagrid/styles/addons/RowSizeDropdown.css +20 -0
- package/css/components/Datagrid/styles/addons/RowSizeDropdown.css.map +1 -0
- package/css/components/Datagrid/styles/datagrid.css +264 -0
- package/css/components/Datagrid/styles/datagrid.css.map +1 -0
- package/css/components/Datagrid/styles/index.css +509 -0
- package/css/components/Datagrid/styles/index.css.map +1 -0
- package/css/components/Datagrid/styles/useActionsColumn.css +23 -0
- package/css/components/Datagrid/styles/useActionsColumn.css.map +1 -0
- package/css/components/Datagrid/styles/useColumnRightAlign.css +28 -0
- package/css/components/Datagrid/styles/useColumnRightAlign.css.map +1 -0
- package/css/components/Datagrid/styles/useNestedRows.css +15 -0
- package/css/components/Datagrid/styles/useNestedRows.css.map +1 -0
- package/css/components/Datagrid/styles/useNestedTable.css +25 -0
- package/css/components/Datagrid/styles/useNestedTable.css.map +1 -0
- package/css/components/Datagrid/styles/useSelectAllToggle.css +28 -0
- package/css/components/Datagrid/styles/useSelectAllToggle.css.map +1 -0
- package/css/components/Datagrid/styles/useSortableColumns.css +50 -0
- package/css/components/Datagrid/styles/useSortableColumns.css.map +1 -0
- package/css/components/Datagrid/styles/useStickyColumn.css +35 -0
- package/css/components/Datagrid/styles/useStickyColumn.css.map +1 -0
- package/css/index-full-carbon.css +2019 -376
- package/css/index-full-carbon.css.map +1 -1
- package/css/index-full-carbon.min.css +6 -6
- package/css/index-full-carbon.min.css.map +1 -1
- package/css/index-without-carbon-released-only.css +18 -6
- 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 +679 -19
- package/css/index-without-carbon.css.map +1 -1
- package/css/index-without-carbon.min.css +5 -5
- package/css/index-without-carbon.min.css.map +1 -1
- package/css/index.css +679 -19
- package/css/index.css.map +1 -1
- package/css/index.min.css +6 -6
- package/css/index.min.css.map +1 -1
- package/es/components/ActionBar/ActionBar.js +3 -1
- package/es/components/ActionBar/ActionBarOverflowItems.js +5 -3
- package/es/components/AddSelect/AddSelect.js +133 -30
- package/es/components/AddSelect/AddSelectColumn.js +0 -1
- package/es/components/AddSelect/AddSelectFilter.js +129 -0
- package/es/components/AddSelect/AddSelectList.js +59 -13
- package/es/components/AddSelect/AddSelectSidebar.js +15 -5
- package/es/components/AddSelect/add-select-utils.js +30 -0
- package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -0
- package/es/components/DataSpreadsheet/DataSpreadsheet.js +262 -164
- package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +191 -51
- package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +65 -13
- package/es/components/DataSpreadsheet/hooks/index.js +10 -0
- package/es/components/DataSpreadsheet/hooks/useMultipleKeyTracking.js +111 -0
- package/es/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +2 -4
- package/es/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +6 -6
- package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +3 -1
- package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +80 -6
- package/es/components/Datagrid/Datagrid/Datagrid.js +70 -0
- package/es/components/Datagrid/Datagrid/DatagridBody.js +36 -0
- package/es/components/Datagrid/Datagrid/DatagridEmptyBody.js +19 -0
- package/es/components/Datagrid/Datagrid/DatagridExpandedRow.js +26 -0
- package/es/components/Datagrid/Datagrid/DatagridHead.js +31 -0
- package/es/components/Datagrid/Datagrid/DatagridHeaderRow.js +57 -0
- package/es/components/Datagrid/Datagrid/DatagridRefBody.js +37 -0
- package/es/components/Datagrid/Datagrid/DatagridRow.js +50 -0
- package/es/components/Datagrid/Datagrid/DatagridSelectAll.js +50 -0
- package/es/components/Datagrid/Datagrid/DatagridSelectAllWithToggle.js +122 -0
- package/es/components/Datagrid/Datagrid/DatagridSimpleBody.js +36 -0
- package/es/components/Datagrid/Datagrid/DatagridToolbar.js +22 -0
- package/es/components/Datagrid/Datagrid/DatagridVirtualBody.js +87 -0
- package/es/components/Datagrid/Datagrid/DraggableElement.js +188 -0
- package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Actions.js +78 -0
- package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/ButtonWrapper.js +51 -0
- package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +140 -0
- package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsModal.js +157 -0
- package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/ModalWrapper.js +62 -0
- package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/common.js +13 -0
- package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/index.js +9 -0
- package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +62 -0
- package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +139 -0
- package/es/components/Datagrid/Datagrid/addons/RowSize/index.js +8 -0
- package/es/components/Datagrid/Datagrid/index.js +8 -0
- package/es/components/Datagrid/Datagrid.stories/CustomizeColumnStory.js +6 -0
- package/es/components/Datagrid/Datagrid.stories/LeftPanelStory.js +6 -0
- package/es/components/Datagrid/Datagrid.stories/RowSizeDropdownStory.js +6 -0
- package/es/components/Datagrid/Datagrid.stories/SelectAllWithToggleStory.js +6 -0
- package/es/components/Datagrid/Datagrid.stories/StickyActionsColumnStory.js +92 -0
- package/es/components/Datagrid/Datagrid.stories/common.js +199 -0
- package/es/components/Datagrid/Datagrid.stories/index.js +5 -0
- package/es/components/Datagrid/common-column-ids.js +8 -0
- package/es/components/Datagrid/index.js +22 -0
- package/es/components/Datagrid/useActionsColumn.js +86 -0
- package/es/components/Datagrid/useColumnRightAlign.js +52 -0
- package/es/components/Datagrid/useCustomizeColumns.js +45 -0
- package/es/components/Datagrid/useDatagrid.js +44 -0
- package/es/components/Datagrid/useDefaultStringRenderer.js +48 -0
- package/es/components/Datagrid/useDisableSelectRows.js +84 -0
- package/es/components/Datagrid/useExpandedRow.js +52 -0
- package/es/components/Datagrid/useFlexResize.js +51 -0
- package/es/components/Datagrid/useFloatingScroll.js +88 -0
- package/es/components/Datagrid/useInfiniteScroll.js +54 -0
- package/es/components/Datagrid/useNestedRows.js +53 -0
- package/es/components/Datagrid/useOnRowClick.js +37 -0
- package/es/components/Datagrid/useParentDimensions.js +65 -0
- package/es/components/Datagrid/useResizeTable.js +40 -0
- package/es/components/Datagrid/useRowExpander.js +34 -0
- package/es/components/Datagrid/useRowIsMouseOver.js +61 -0
- package/es/components/Datagrid/useRowRenderer.js +30 -0
- package/es/components/Datagrid/useRowSize.js +56 -0
- package/es/components/Datagrid/useSelectAllToggle.js +74 -0
- package/es/components/Datagrid/useSelectRows.js +107 -0
- package/es/components/Datagrid/useSkeletonRows.js +32 -0
- package/es/components/Datagrid/useSortableColumns.js +110 -0
- package/es/components/Datagrid/useStickyColumn.js +183 -0
- package/es/components/HTTPErrors/assets/HTTPErrorSvg403.js +2 -3
- package/es/components/HTTPErrors/assets/HTTPErrorSvg404.js +2 -3
- package/es/components/HTTPErrors/assets/HTTPErrorSvgOther.js +2 -3
- package/es/components/ImportModal/ImportModal.js +2 -2
- package/es/components/TagSet/TagSet.js +12 -3
- package/es/components/UserProfileImage/UserProfileImage.js +38 -10
- package/es/components/index.js +2 -1
- package/es/global/js/package-settings.js +2 -1
- package/lib/components/ActionBar/ActionBar.js +3 -1
- package/lib/components/ActionBar/ActionBarOverflowItems.js +5 -3
- package/lib/components/AddSelect/AddSelect.js +132 -28
- package/lib/components/AddSelect/AddSelectColumn.js +0 -1
- package/lib/components/AddSelect/AddSelectFilter.js +147 -0
- package/lib/components/AddSelect/AddSelectList.js +61 -12
- package/lib/components/AddSelect/AddSelectSidebar.js +15 -11
- package/lib/components/AddSelect/add-select-utils.js +35 -2
- package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -0
- package/lib/components/DataSpreadsheet/DataSpreadsheet.js +267 -168
- package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +191 -57
- package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +67 -18
- package/lib/components/DataSpreadsheet/hooks/index.js +37 -0
- package/lib/components/DataSpreadsheet/hooks/useMultipleKeyTracking.js +123 -0
- package/lib/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +2 -4
- package/lib/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +6 -5
- package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +3 -1
- package/lib/components/DataSpreadsheet/utils/handleMultipleKeys.js +83 -7
- package/lib/components/Datagrid/Datagrid/Datagrid.js +86 -0
- package/lib/components/Datagrid/Datagrid/DatagridBody.js +50 -0
- package/lib/components/Datagrid/Datagrid/DatagridEmptyBody.js +31 -0
- package/lib/components/Datagrid/Datagrid/DatagridExpandedRow.js +38 -0
- package/lib/components/Datagrid/Datagrid/DatagridHead.js +43 -0
- package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +73 -0
- package/lib/components/Datagrid/Datagrid/DatagridRefBody.js +44 -0
- package/lib/components/Datagrid/Datagrid/DatagridRow.js +56 -0
- package/lib/components/Datagrid/Datagrid/DatagridSelectAll.js +55 -0
- package/lib/components/Datagrid/Datagrid/DatagridSelectAllWithToggle.js +139 -0
- package/lib/components/Datagrid/Datagrid/DatagridSimpleBody.js +44 -0
- package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +35 -0
- package/lib/components/Datagrid/Datagrid/DatagridVirtualBody.js +101 -0
- package/lib/components/Datagrid/Datagrid/DraggableElement.js +210 -0
- package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Actions.js +92 -0
- package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/ButtonWrapper.js +65 -0
- package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +166 -0
- package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsModal.js +173 -0
- package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/ModalWrapper.js +73 -0
- package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/common.js +25 -0
- package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/index.js +23 -0
- package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +80 -0
- package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +160 -0
- package/lib/components/Datagrid/Datagrid/addons/RowSize/index.js +15 -0
- package/lib/components/Datagrid/Datagrid/index.js +15 -0
- package/lib/components/Datagrid/Datagrid.stories/CustomizeColumnStory.js +13 -0
- package/lib/components/Datagrid/Datagrid.stories/LeftPanelStory.js +13 -0
- package/lib/components/Datagrid/Datagrid.stories/RowSizeDropdownStory.js +13 -0
- package/lib/components/Datagrid/Datagrid.stories/SelectAllWithToggleStory.js +13 -0
- package/lib/components/Datagrid/Datagrid.stories/StickyActionsColumnStory.js +112 -0
- package/lib/components/Datagrid/Datagrid.stories/common.js +215 -0
- package/lib/components/Datagrid/Datagrid.stories/index.js +47 -0
- package/lib/components/Datagrid/common-column-ids.js +16 -0
- package/lib/components/Datagrid/index.js +127 -0
- package/lib/components/Datagrid/useActionsColumn.js +94 -0
- package/lib/components/Datagrid/useColumnRightAlign.js +59 -0
- package/lib/components/Datagrid/useCustomizeColumns.js +55 -0
- package/lib/components/Datagrid/useDatagrid.js +58 -0
- package/lib/components/Datagrid/useDefaultStringRenderer.js +54 -0
- package/lib/components/Datagrid/useDisableSelectRows.js +92 -0
- package/lib/components/Datagrid/useExpandedRow.js +58 -0
- package/lib/components/Datagrid/useFlexResize.js +61 -0
- package/lib/components/Datagrid/useFloatingScroll.js +101 -0
- package/lib/components/Datagrid/useInfiniteScroll.js +67 -0
- package/lib/components/Datagrid/useNestedRows.js +65 -0
- package/lib/components/Datagrid/useOnRowClick.js +45 -0
- package/lib/components/Datagrid/useParentDimensions.js +75 -0
- package/lib/components/Datagrid/useResizeTable.js +48 -0
- package/lib/components/Datagrid/useRowExpander.js +45 -0
- package/lib/components/Datagrid/useRowIsMouseOver.js +66 -0
- package/lib/components/Datagrid/useRowRenderer.js +40 -0
- package/lib/components/Datagrid/useRowSize.js +67 -0
- package/lib/components/Datagrid/useSelectAllToggle.js +88 -0
- package/lib/components/Datagrid/useSelectRows.js +119 -0
- package/lib/components/Datagrid/useSkeletonRows.js +42 -0
- package/lib/components/Datagrid/useSortableColumns.js +117 -0
- package/lib/components/Datagrid/useStickyColumn.js +190 -0
- package/lib/components/HTTPErrors/assets/HTTPErrorSvg403.js +2 -3
- package/lib/components/HTTPErrors/assets/HTTPErrorSvg404.js +2 -3
- package/lib/components/HTTPErrors/assets/HTTPErrorSvgOther.js +2 -3
- package/lib/components/ImportModal/ImportModal.js +1 -1
- package/lib/components/TagSet/TagSet.js +12 -3
- package/lib/components/UserProfileImage/UserProfileImage.js +38 -10
- package/lib/components/index.js +9 -1
- package/lib/global/js/package-settings.js +2 -1
- package/package.json +19 -15
- package/scss/components/AboutModal/_about-modal.scss +2 -2
- package/scss/components/ActionSet/_action-set.scss +3 -1
- package/scss/components/AddSelect/_add-select.scss +87 -3
- package/scss/components/CreateModal/_create-modal.scss +7 -5
- package/scss/components/CreateModal/_storybook-styles.scss +8 -7
- package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +70 -10
- package/scss/components/Datagrid/_datagrid.scss +66 -0
- package/scss/components/Datagrid/_index.scss +8 -0
- package/scss/components/Datagrid/_storybook-styles.scss +26 -0
- package/scss/components/Datagrid/styles/_variables.scss +9 -0
- package/scss/components/Datagrid/styles/addons/CustomizeColumnsModal.scss +48 -0
- package/scss/components/Datagrid/styles/addons/RowSizeDropdown.scss +23 -0
- package/scss/components/Datagrid/styles/datagrid.scss +318 -0
- package/scss/components/Datagrid/styles/index.scss +17 -0
- package/scss/components/Datagrid/styles/useActionsColumn.scss +24 -0
- package/scss/components/Datagrid/styles/useColumnRightAlign.scss +29 -0
- package/scss/components/Datagrid/styles/useNestedRows.scss +17 -0
- package/scss/components/Datagrid/styles/useNestedTable.scss +28 -0
- package/scss/components/Datagrid/styles/useSelectAllToggle.scss +28 -0
- package/scss/components/Datagrid/styles/useSortableColumns.scss +55 -0
- package/scss/components/Datagrid/styles/useStickyColumn.scss +38 -0
- package/scss/components/ExportModal/_export-modal.scss +3 -3
- package/scss/components/HTTPErrors/_http-errors.scss +16 -16
- package/scss/components/InlineEdit/_inline-edit.scss +0 -1
- package/scss/components/ModifiedTabs/_modified-tabs.scss +0 -10
- package/scss/components/NotificationsPanel/_notifications-panel.scss +3 -3
- package/scss/components/OptionsTile/_options-tile.scss +0 -1
- package/scss/components/PageHeader/_page-header.scss +4 -0
- package/scss/components/RemoveModal/_remove-modal.scss +3 -3
- package/scss/components/TagSet/_tag-set.scss +2 -1
- package/scss/components/Tearsheet/_tearsheet.scss +5 -2
- package/scss/components/_index.scss +1 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
6
|
|
|
7
7
|
Object.defineProperty(exports, "__esModule", {
|
|
8
8
|
value: true
|
|
@@ -11,10 +11,6 @@ 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
|
-
|
|
16
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
17
|
-
|
|
18
14
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
19
15
|
|
|
20
16
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
@@ -25,6 +21,8 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
25
21
|
|
|
26
22
|
var _reactTable = require("react-table");
|
|
27
23
|
|
|
24
|
+
var _layout = require("@carbon/layout");
|
|
25
|
+
|
|
28
26
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
29
27
|
|
|
30
28
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
@@ -43,15 +41,9 @@ var _getScrollbarWidth = require("../../global/js/utils/getScrollbarWidth");
|
|
|
43
41
|
|
|
44
42
|
var _hooks = require("../../global/js/hooks");
|
|
45
43
|
|
|
46
|
-
var _deepCloneObject = require("../../global/js/utils/deepCloneObject");
|
|
47
|
-
|
|
48
44
|
var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
|
|
49
45
|
|
|
50
|
-
var
|
|
51
|
-
|
|
52
|
-
var _useSpreadsheetOutsideClick = require("./hooks/useSpreadsheetOutsideClick");
|
|
53
|
-
|
|
54
|
-
var _useMoveActiveCell = require("./hooks/useMoveActiveCell");
|
|
46
|
+
var _hooks2 = require("./hooks");
|
|
55
47
|
|
|
56
48
|
var _createActiveCellFn = require("./utils/createActiveCellFn");
|
|
57
49
|
|
|
@@ -61,11 +53,13 @@ var _handleMultipleKeys = require("./utils/handleMultipleKeys");
|
|
|
61
53
|
|
|
62
54
|
var _handleHeaderCellSelection = require("./utils/handleHeaderCellSelection");
|
|
63
55
|
|
|
64
|
-
var
|
|
56
|
+
var _removeCellSelections = require("./utils/removeCellSelections");
|
|
57
|
+
|
|
58
|
+
var _excluded = ["cellSize", "className", "columns", "data", "defaultEmptyRowCount", "onDataUpdate", "id", "onActiveCellChange", "onSelectionAreaChange"];
|
|
65
59
|
|
|
66
60
|
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); }
|
|
67
61
|
|
|
68
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null ||
|
|
62
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
69
63
|
|
|
70
64
|
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; }
|
|
71
65
|
|
|
@@ -80,7 +74,10 @@ var defaults = {
|
|
|
80
74
|
cellSize: 'standard',
|
|
81
75
|
columns: Object.freeze([]),
|
|
82
76
|
data: Object.freeze([]),
|
|
83
|
-
|
|
77
|
+
defaultEmptyRowCount: 16,
|
|
78
|
+
onDataUpdate: Object.freeze(function () {}),
|
|
79
|
+
onActiveCellChange: Object.freeze(function () {}),
|
|
80
|
+
onSelectionAreaChange: Object.freeze(function () {})
|
|
84
81
|
};
|
|
85
82
|
/**
|
|
86
83
|
* DataSpreadsheet: used to organize and display large amounts of structured data, separated by columns and rows in a grid-like format.
|
|
@@ -94,11 +91,17 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
94
91
|
columns = _ref$columns === void 0 ? defaults.columns : _ref$columns,
|
|
95
92
|
_ref$data = _ref.data,
|
|
96
93
|
data = _ref$data === void 0 ? defaults.data : _ref$data,
|
|
94
|
+
_ref$defaultEmptyRowC = _ref.defaultEmptyRowCount,
|
|
95
|
+
defaultEmptyRowCount = _ref$defaultEmptyRowC === void 0 ? defaults.defaultEmptyRowCount : _ref$defaultEmptyRowC,
|
|
97
96
|
_ref$onDataUpdate = _ref.onDataUpdate,
|
|
98
97
|
onDataUpdate = _ref$onDataUpdate === void 0 ? defaults.onDataUpdate : _ref$onDataUpdate,
|
|
99
98
|
id = _ref.id,
|
|
100
|
-
|
|
99
|
+
_ref$onActiveCellChan = _ref.onActiveCellChange,
|
|
100
|
+
onActiveCellChange = _ref$onActiveCellChan === void 0 ? defaults.onActiveCellChange : _ref$onActiveCellChan,
|
|
101
|
+
_ref$onSelectionAreaC = _ref.onSelectionAreaChange,
|
|
102
|
+
onSelectionAreaChange = _ref$onSelectionAreaC === void 0 ? defaults.onSelectionAreaChange : _ref$onSelectionAreaC,
|
|
101
103
|
rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
104
|
+
var multiKeyTrackingRef = (0, _react.useRef)();
|
|
102
105
|
var localRef = (0, _react.useRef)();
|
|
103
106
|
var spreadsheetRef = ref || localRef;
|
|
104
107
|
var focusedElement = (0, _hooks.useActiveElement)();
|
|
@@ -118,34 +121,45 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
118
121
|
selectionAreas = _useState6[0],
|
|
119
122
|
setSelectionAreas = _useState6[1];
|
|
120
123
|
|
|
121
|
-
var _useState7 = (0, _react.useState)(
|
|
124
|
+
var _useState7 = (0, _react.useState)([]),
|
|
122
125
|
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
|
123
|
-
|
|
124
|
-
|
|
126
|
+
selectionAreaData = _useState8[0],
|
|
127
|
+
setSelectionAreaData = _useState8[1];
|
|
125
128
|
|
|
126
|
-
var _useState9 = (0, _react.useState)(
|
|
129
|
+
var _useState9 = (0, _react.useState)(false),
|
|
127
130
|
_useState10 = (0, _slicedToArray2.default)(_useState9, 2),
|
|
128
|
-
|
|
129
|
-
|
|
131
|
+
clickAndHoldActive = _useState10[0],
|
|
132
|
+
setClickAndHoldActive = _useState10[1];
|
|
130
133
|
|
|
131
|
-
var _useState11 = (0, _react.useState)(
|
|
134
|
+
var _useState11 = (0, _react.useState)(''),
|
|
132
135
|
_useState12 = (0, _slicedToArray2.default)(_useState11, 2),
|
|
133
|
-
|
|
134
|
-
|
|
136
|
+
currentMatcher = _useState12[0],
|
|
137
|
+
setCurrentMatcher = _useState12[1];
|
|
135
138
|
|
|
136
|
-
var _useState13 = (0, _react.useState)(
|
|
139
|
+
var _useState13 = (0, _react.useState)(false),
|
|
137
140
|
_useState14 = (0, _slicedToArray2.default)(_useState13, 2),
|
|
138
|
-
|
|
139
|
-
|
|
141
|
+
isEditing = _useState14[0],
|
|
142
|
+
setIsEditing = _useState14[1];
|
|
143
|
+
|
|
144
|
+
var _useState15 = (0, _react.useState)(''),
|
|
145
|
+
_useState16 = (0, _slicedToArray2.default)(_useState15, 2),
|
|
146
|
+
cellEditorValue = _useState16[0],
|
|
147
|
+
setCellEditorValue = _useState16[1];
|
|
140
148
|
|
|
141
149
|
var previousState = (0, _hooks.usePreviousValue)({
|
|
142
|
-
activeCellCoordinates: activeCellCoordinates
|
|
150
|
+
activeCellCoordinates: activeCellCoordinates,
|
|
151
|
+
isEditing: isEditing
|
|
143
152
|
});
|
|
144
153
|
var cellSizeValue = (0, _getCellSize.getCellSize)(cellSize);
|
|
145
154
|
var cellEditorRef = (0, _react.useRef)();
|
|
146
|
-
|
|
147
|
-
var
|
|
155
|
+
|
|
156
|
+
var _useState17 = (0, _react.useState)(),
|
|
157
|
+
_useState18 = (0, _slicedToArray2.default)(_useState17, 2),
|
|
158
|
+
activeCellContent = _useState18[0],
|
|
159
|
+
setActiveCellContent = _useState18[1];
|
|
160
|
+
|
|
148
161
|
var activeCellRef = (0, _react.useRef)();
|
|
162
|
+
var cellEditorRulerRef = (0, _react.useRef)();
|
|
149
163
|
var defaultColumn = (0, _react.useMemo)(function () {
|
|
150
164
|
return {
|
|
151
165
|
width: 150,
|
|
@@ -153,6 +167,14 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
153
167
|
rowHeight: cellSizeValue
|
|
154
168
|
};
|
|
155
169
|
}, [cellSizeValue]);
|
|
170
|
+
|
|
171
|
+
var _useMultipleKeyTracki = (0, _hooks2.useMultipleKeyTracking)({
|
|
172
|
+
ref: multiKeyTrackingRef,
|
|
173
|
+
containerHasFocus: containerHasFocus,
|
|
174
|
+
isEditing: isEditing
|
|
175
|
+
}),
|
|
176
|
+
keysPressedList = _useMultipleKeyTracki.keysPressedList;
|
|
177
|
+
|
|
156
178
|
var scrollBarSize = (0, _react.useMemo)(function () {
|
|
157
179
|
return (0, _getScrollbarWidth.getScrollbarWidth)();
|
|
158
180
|
}, []);
|
|
@@ -193,22 +215,7 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
193
215
|
setCellEditorValue('');
|
|
194
216
|
setIsEditing(false);
|
|
195
217
|
cellEditorRef.current.style.display = 'none';
|
|
196
|
-
}, []); //
|
|
197
|
-
|
|
198
|
-
var removeCellSelections = (0, _react.useCallback)(function (matcher) {
|
|
199
|
-
if (matcher && typeof matcher === 'string') {
|
|
200
|
-
var selectionToRemove = spreadsheetRef.current.querySelector("[data-matcher-id=\"".concat(matcher, "\"]"));
|
|
201
|
-
|
|
202
|
-
if (selectionToRemove) {
|
|
203
|
-
selectionToRemove.remove();
|
|
204
|
-
}
|
|
205
|
-
} else {
|
|
206
|
-
var cellSelections = spreadsheetRef.current.querySelectorAll(".".concat(blockClass, "__selection-area--element"));
|
|
207
|
-
(0, _toConsumableArray2.default)(cellSelections).forEach(function (element) {
|
|
208
|
-
return element.remove();
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
}, [spreadsheetRef]); // Remove cell editor if the active cell coordinates change and save with new cell data, this will
|
|
218
|
+
}, []); // Remove cell editor if the active cell coordinates change and save with new cell data, this will
|
|
212
219
|
// happen if you click on another cell while isEditing is true
|
|
213
220
|
|
|
214
221
|
(0, _react.useEffect)(function () {
|
|
@@ -218,11 +225,20 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
218
225
|
var cellProps = rows[prevCoords === null || prevCoords === void 0 ? void 0 : prevCoords.row].cells[prevCoords === null || prevCoords === void 0 ? void 0 : prevCoords.column];
|
|
219
226
|
removeCellEditor();
|
|
220
227
|
updateData(prevCoords === null || prevCoords === void 0 ? void 0 : prevCoords.row, cellProps.column.id);
|
|
228
|
+
cellEditorRulerRef.current.textContent = '';
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if ((prevCoords === null || prevCoords === void 0 ? void 0 : prevCoords.row) !== (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) || (prevCoords === null || prevCoords === void 0 ? void 0 : prevCoords.column) !== (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column)) {
|
|
232
|
+
if (activeCellCoordinates && (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) !== 'header' && (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) !== 'header') {
|
|
233
|
+
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;
|
|
234
|
+
setActiveCellContent(activeCellFullData.render('Cell'));
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (activeCellCoordinates && (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
|
|
238
|
+
setActiveCellContent(null);
|
|
239
|
+
}
|
|
221
240
|
}
|
|
222
|
-
}, [activeCellCoordinates, previousState === null || previousState === void 0 ? void 0 : previousState.activeCellCoordinates, updateData, rows, isEditing, removeCellEditor]);
|
|
223
|
-
var handleActiveCellMouseEnter = (0, _react.useCallback)(function () {
|
|
224
|
-
handleActiveCellMouseEnterCallback(selectionAreas, clickAndHoldActive);
|
|
225
|
-
}, [clickAndHoldActive, selectionAreas, handleActiveCellMouseEnterCallback]);
|
|
241
|
+
}, [activeCellCoordinates, previousState === null || previousState === void 0 ? void 0 : previousState.activeCellCoordinates, updateData, rows, isEditing, removeCellEditor, activeCellContent]);
|
|
226
242
|
var createActiveCell = (0, _react.useCallback)(function (_ref2) {
|
|
227
243
|
var placementElement = _ref2.placementElement,
|
|
228
244
|
coords = _ref2.coords,
|
|
@@ -247,23 +263,21 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
247
263
|
});
|
|
248
264
|
}
|
|
249
265
|
}, [spreadsheetRef, rows, onActiveCellChange, previousState === null || previousState === void 0 ? void 0 : previousState.activeCellCoordinates, defaultColumn]);
|
|
250
|
-
(0,
|
|
251
|
-
activeKeys: activeKeys,
|
|
266
|
+
(0, _hooks2.useResetSpreadsheetFocus)({
|
|
252
267
|
focusedElement: focusedElement,
|
|
253
268
|
removeActiveCell: removeActiveCell,
|
|
254
269
|
setContainerHasFocus: setContainerHasFocus
|
|
255
270
|
});
|
|
256
|
-
(0,
|
|
271
|
+
(0, _hooks2.useSpreadsheetOutsideClick)({
|
|
257
272
|
spreadsheetRef: spreadsheetRef,
|
|
258
273
|
setActiveCellCoordinates: setActiveCellCoordinates,
|
|
259
274
|
setSelectionAreas: setSelectionAreas,
|
|
260
275
|
removeActiveCell: removeActiveCell,
|
|
261
|
-
removeCellSelections: removeCellSelections,
|
|
276
|
+
removeCellSelections: _removeCellSelections.removeCellSelections,
|
|
262
277
|
setContainerHasFocus: setContainerHasFocus,
|
|
263
|
-
activeKeys: activeKeys,
|
|
264
278
|
removeCellEditor: removeCellEditor
|
|
265
279
|
});
|
|
266
|
-
(0,
|
|
280
|
+
(0, _hooks2.useMoveActiveCell)({
|
|
267
281
|
spreadsheetRef: spreadsheetRef,
|
|
268
282
|
activeCellCoordinates: activeCellCoordinates,
|
|
269
283
|
containerHasFocus: containerHasFocus,
|
|
@@ -300,10 +314,28 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
300
314
|
setCurrentMatcher(tempMatcher);
|
|
301
315
|
}
|
|
302
316
|
}, []);
|
|
317
|
+
var handleHomeEndKey = (0, _react.useCallback)(function (_ref4) {
|
|
318
|
+
var type = _ref4.type;
|
|
319
|
+
|
|
320
|
+
var coordinatesClone = _objectSpread({}, activeCellCoordinates);
|
|
321
|
+
|
|
322
|
+
updateActiveCellCoordinates({
|
|
323
|
+
coords: coordinatesClone,
|
|
324
|
+
updatedValue: {
|
|
325
|
+
column: type === 'home' ? 0 : columns.length - 1
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
(0, _removeCellSelections.removeCellSelections)({
|
|
329
|
+
spreadsheetRef: spreadsheetRef
|
|
330
|
+
});
|
|
331
|
+
}, [activeCellCoordinates, updateActiveCellCoordinates, spreadsheetRef, columns.length]);
|
|
303
332
|
var handleKeyPress = (0, _react.useCallback)(function (event) {
|
|
304
|
-
var
|
|
333
|
+
var key = event.key;
|
|
334
|
+
|
|
335
|
+
if (isEditing) {
|
|
336
|
+
return;
|
|
337
|
+
} // Command keys need to be returned as there is default browser behavior with these keys
|
|
305
338
|
|
|
306
|
-
var key = event.key; // Command keys need to be returned as there is default browser behavior with these keys
|
|
307
339
|
|
|
308
340
|
if (key === 'Meta' || key === 'Control') {
|
|
309
341
|
return;
|
|
@@ -320,27 +352,20 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
320
352
|
|
|
321
353
|
|
|
322
354
|
if (['ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown'].indexOf(key) > -1) {
|
|
323
|
-
if (
|
|
324
|
-
return;
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
if (selectionAreas !== null && selectionAreas !== void 0 && selectionAreas.length && key !== 'Shift' && !activeKeys.current.includes('Shift')) {
|
|
355
|
+
if (selectionAreas !== null && selectionAreas !== void 0 && selectionAreas.length && keysPressedList.length < 2 && !(0, _handleMultipleKeys.includesShift)(keysPressedList)) {
|
|
328
356
|
setSelectionAreas([]);
|
|
329
|
-
|
|
357
|
+
setSelectionAreaData([]);
|
|
358
|
+
(0, _removeCellSelections.removeCellSelections)({
|
|
330
359
|
spreadsheetRef: spreadsheetRef
|
|
331
360
|
});
|
|
332
361
|
}
|
|
333
|
-
} // Update list of activeKeys
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
if (!((_activeKeys$current = activeKeys.current) !== null && _activeKeys$current !== void 0 && _activeKeys$current.includes(key))) {
|
|
337
|
-
var activeClone = (0, _toConsumableArray2.default)(activeKeys.current);
|
|
338
|
-
activeKeys.current = [].concat((0, _toConsumableArray2.default)(activeClone), [key]);
|
|
339
362
|
}
|
|
340
363
|
|
|
341
|
-
if (
|
|
364
|
+
if (!isEditing && (keysPressedList === null || keysPressedList === void 0 ? void 0 : keysPressedList.length) > 1) {
|
|
342
365
|
(0, _handleMultipleKeys.handleMultipleKeys)({
|
|
343
|
-
|
|
366
|
+
activeCellCoordinates: activeCellCoordinates,
|
|
367
|
+
event: event,
|
|
368
|
+
keysPressedList: keysPressedList,
|
|
344
369
|
selectionAreas: selectionAreas,
|
|
345
370
|
currentMatcher: currentMatcher,
|
|
346
371
|
rows: rows,
|
|
@@ -351,9 +376,26 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
351
376
|
// if one of the activeCellCoordinates is in a header position
|
|
352
377
|
|
|
353
378
|
|
|
354
|
-
if (!
|
|
379
|
+
if (keysPressedList.length < 2 && !(0, _handleMultipleKeys.includesShift)(keysPressedList) || activeCellCoordinates.row === 'header' || activeCellCoordinates.column === 'header') {
|
|
355
380
|
switch (key) {
|
|
381
|
+
// HOME
|
|
382
|
+
case 'Home':
|
|
383
|
+
{
|
|
384
|
+
handleHomeEndKey({
|
|
385
|
+
type: 'home'
|
|
386
|
+
});
|
|
387
|
+
break;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
case 'End':
|
|
391
|
+
{
|
|
392
|
+
handleHomeEndKey({
|
|
393
|
+
type: 'end'
|
|
394
|
+
});
|
|
395
|
+
break;
|
|
396
|
+
}
|
|
356
397
|
// Tab
|
|
398
|
+
|
|
357
399
|
case 'Tab':
|
|
358
400
|
{
|
|
359
401
|
setSelectionAreas([]);
|
|
@@ -502,13 +544,35 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
502
544
|
}
|
|
503
545
|
}
|
|
504
546
|
}
|
|
505
|
-
}, [updateActiveCellCoordinates, handleInitialArrowPress, activeCellCoordinates, removeActiveCell, columns, rows, spreadsheetRef, currentMatcher, isEditing, removeCellEditor,
|
|
547
|
+
}, [updateActiveCellCoordinates, handleInitialArrowPress, activeCellCoordinates, removeActiveCell, columns, rows, spreadsheetRef, currentMatcher, isEditing, removeCellEditor, selectionAreas, handleHomeEndKey, keysPressedList]);
|
|
506
548
|
|
|
507
549
|
var startEditMode = function startEditMode() {
|
|
508
550
|
setIsEditing(true);
|
|
509
551
|
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;
|
|
510
552
|
var activeCellValue = activeCellFullData ? Object.values(activeCellFullData.row.values)[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column] : null;
|
|
511
553
|
setCellEditorValue(activeCellValue);
|
|
554
|
+
cellEditorRulerRef.current.textContent = activeCellValue;
|
|
555
|
+
}; // Sets the initial placement of the cell editor cursor at the end of the text area
|
|
556
|
+
// this is not done for us by default in Safari
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
(0, _react.useEffect)(function () {
|
|
560
|
+
if (isEditing && !(previousState !== null && previousState !== void 0 && previousState.isEditing)) {
|
|
561
|
+
cellEditorRef.current.setSelectionRange(cellEditorRulerRef.current.textContent.length, cellEditorRulerRef.current.textContent.length);
|
|
562
|
+
cellEditorRef.current.focus();
|
|
563
|
+
}
|
|
564
|
+
}, [isEditing, previousState === null || previousState === void 0 ? void 0 : previousState.isEditing]);
|
|
565
|
+
|
|
566
|
+
var handleActiveCellClick = function handleActiveCellClick() {
|
|
567
|
+
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
|
|
568
|
+
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;
|
|
569
|
+
handleRowColumnHeaderClick({
|
|
570
|
+
isKeyboard: false,
|
|
571
|
+
index: indexValue
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
return;
|
|
512
576
|
}; // Go into edit mode if 'Enter' key is pressed on activeCellRef
|
|
513
577
|
|
|
514
578
|
|
|
@@ -521,41 +585,51 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
521
585
|
}
|
|
522
586
|
|
|
523
587
|
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
|
|
524
|
-
|
|
525
|
-
activeCellCoordinates: activeCellCoordinates,
|
|
526
|
-
rows: rows,
|
|
527
|
-
columns: columns,
|
|
528
|
-
setActiveCellCoordinates: setActiveCellCoordinates,
|
|
529
|
-
setCurrentMatcher: setCurrentMatcher,
|
|
530
|
-
setSelectionAreas: setSelectionAreas,
|
|
531
|
-
spreadsheetRef: spreadsheetRef,
|
|
588
|
+
handleRowColumnHeaderClick({
|
|
532
589
|
isKeyboard: true
|
|
533
|
-
};
|
|
534
|
-
|
|
535
|
-
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header') {
|
|
536
|
-
(0, _handleHeaderCellSelection.handleHeaderCellSelection)(_objectSpread({
|
|
537
|
-
type: 'column'
|
|
538
|
-
}, handleHeaderCellProps));
|
|
539
|
-
} // Select an entire row
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
|
|
543
|
-
(0, _handleHeaderCellSelection.handleHeaderCellSelection)(_objectSpread({
|
|
544
|
-
type: 'row'
|
|
545
|
-
}, handleHeaderCellProps));
|
|
546
|
-
}
|
|
590
|
+
});
|
|
547
591
|
}
|
|
548
592
|
}
|
|
593
|
+
};
|
|
594
|
+
|
|
595
|
+
var handleRowColumnHeaderClick = function handleRowColumnHeaderClick(_ref5) {
|
|
596
|
+
var isKeyboard = _ref5.isKeyboard,
|
|
597
|
+
_ref5$index = _ref5.index,
|
|
598
|
+
index = _ref5$index === void 0 ? null : _ref5$index;
|
|
599
|
+
var handleHeaderCellProps = {
|
|
600
|
+
activeCellCoordinates: activeCellCoordinates,
|
|
601
|
+
rows: rows,
|
|
602
|
+
columns: columns,
|
|
603
|
+
setActiveCellCoordinates: setActiveCellCoordinates,
|
|
604
|
+
setCurrentMatcher: setCurrentMatcher,
|
|
605
|
+
setSelectionAreas: setSelectionAreas,
|
|
606
|
+
spreadsheetRef: spreadsheetRef,
|
|
607
|
+
isKeyboard: isKeyboard,
|
|
608
|
+
setSelectionAreaData: setSelectionAreaData,
|
|
609
|
+
index: index
|
|
610
|
+
}; // Select an entire column
|
|
611
|
+
|
|
612
|
+
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header') {
|
|
613
|
+
(0, _handleHeaderCellSelection.handleHeaderCellSelection)(_objectSpread({
|
|
614
|
+
type: 'column'
|
|
615
|
+
}, handleHeaderCellProps));
|
|
616
|
+
} // Select an entire row
|
|
617
|
+
|
|
618
|
+
|
|
619
|
+
if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
|
|
620
|
+
(0, _handleHeaderCellSelection.handleHeaderCellSelection)(_objectSpread({
|
|
621
|
+
type: 'row'
|
|
622
|
+
}, handleHeaderCellProps));
|
|
623
|
+
}
|
|
549
624
|
}; // Go into edit mode if double click is detected on activeCellRef
|
|
550
625
|
|
|
551
626
|
|
|
552
627
|
var handleActiveCellDoubleClick = function handleActiveCellDoubleClick() {
|
|
553
628
|
startEditMode();
|
|
554
|
-
};
|
|
555
|
-
|
|
629
|
+
};
|
|
556
630
|
|
|
557
|
-
var
|
|
558
|
-
var
|
|
631
|
+
var updateSelectionAreaOnCellEditSubmit = function updateSelectionAreaOnCellEditSubmit(_ref6) {
|
|
632
|
+
var type = _ref6.type;
|
|
559
633
|
|
|
560
634
|
var submitEditChanges = function submitEditChanges() {
|
|
561
635
|
var prevCoords = previousState === null || previousState === void 0 ? void 0 : previousState.activeCellCoordinates;
|
|
@@ -564,8 +638,33 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
564
638
|
updateData(prevCoords === null || prevCoords === void 0 ? void 0 : prevCoords.row, cellProps.column.id);
|
|
565
639
|
};
|
|
566
640
|
|
|
641
|
+
(0, _removeCellSelections.removeCellSelections)({
|
|
642
|
+
spreadsheetRef: spreadsheetRef
|
|
643
|
+
});
|
|
644
|
+
submitEditChanges();
|
|
645
|
+
var tempMatcher = (0, _uuidv.default)();
|
|
646
|
+
var newSelectionArea = {
|
|
647
|
+
row: type === 'Enter' ? activeCellCoordinates.row === rows.length - 1 ? activeCellCoordinates.row : activeCellCoordinates.row + 1 : activeCellCoordinates.row,
|
|
648
|
+
column: type === 'Tab' ? activeCellCoordinates.column === columns.length - 1 ? activeCellCoordinates.column : activeCellCoordinates.column + 1 : activeCellCoordinates.column
|
|
649
|
+
};
|
|
650
|
+
setSelectionAreas([{
|
|
651
|
+
point1: newSelectionArea,
|
|
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
|
+
|
|
567
664
|
if (key === 'Enter') {
|
|
568
|
-
|
|
665
|
+
updateSelectionAreaOnCellEditSubmit({
|
|
666
|
+
type: 'Enter'
|
|
667
|
+
});
|
|
569
668
|
setActiveCellCoordinates(function (prev) {
|
|
570
669
|
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
571
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
|
|
@@ -576,7 +675,9 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
576
675
|
|
|
577
676
|
if (key === 'Tab') {
|
|
578
677
|
event.preventDefault();
|
|
579
|
-
|
|
678
|
+
updateSelectionAreaOnCellEditSubmit({
|
|
679
|
+
type: 'Tab'
|
|
680
|
+
});
|
|
580
681
|
setActiveCellCoordinates(function (prev) {
|
|
581
682
|
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
582
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
|
|
@@ -586,44 +687,8 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
586
687
|
}
|
|
587
688
|
|
|
588
689
|
return;
|
|
589
|
-
};
|
|
590
|
-
// Find point object that matches currentMatcher and remove the second point
|
|
591
|
-
// because hovering over the active cell while clicking and holding should
|
|
592
|
-
// remove the previously existing selection area
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
var handleActiveCellMouseEnterCallback = (0, _react.useCallback)(function (areas, clickHold) {
|
|
596
|
-
var freshMatcherValue = currentMatcherRef.current;
|
|
597
|
-
|
|
598
|
-
if (!freshMatcherValue) {
|
|
599
|
-
return;
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
if (areas && areas.length && clickHold && freshMatcherValue) {
|
|
603
|
-
setSelectionAreas(function (prev) {
|
|
604
|
-
var selectionAreaClone = (0, _deepCloneObject.deepCloneObject)(prev);
|
|
605
|
-
var indexOfItemToUpdate = selectionAreaClone.findIndex(function (item) {
|
|
606
|
-
return item.matcher === freshMatcherValue;
|
|
607
|
-
});
|
|
608
|
-
|
|
609
|
-
if (indexOfItemToUpdate === -1) {
|
|
610
|
-
return prev;
|
|
611
|
-
}
|
|
612
|
-
|
|
613
|
-
if ((0, _typeof2.default)(selectionAreaClone[indexOfItemToUpdate].point2) === 'object' && selectionAreaClone[indexOfItemToUpdate].areaCreated) {
|
|
614
|
-
selectionAreaClone[indexOfItemToUpdate].point2 = null;
|
|
615
|
-
selectionAreaClone[indexOfItemToUpdate].areaCreated = false;
|
|
616
|
-
removeCellSelections({
|
|
617
|
-
matcher: freshMatcherValue,
|
|
618
|
-
spreadsheetRef: spreadsheetRef
|
|
619
|
-
});
|
|
620
|
-
return selectionAreaClone;
|
|
621
|
-
}
|
|
690
|
+
};
|
|
622
691
|
|
|
623
|
-
return prev;
|
|
624
|
-
});
|
|
625
|
-
}
|
|
626
|
-
}, [spreadsheetRef, removeCellSelections]);
|
|
627
692
|
(0, _react.useEffect)(function () {
|
|
628
693
|
if (isEditing) {
|
|
629
694
|
var _rows$activeCellCoord, _cellProps$column, _cellEditorRef$curren;
|
|
@@ -636,57 +701,70 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
636
701
|
cellEditorRef.current.style.display = 'block';
|
|
637
702
|
cellEditorRef.current.style.width = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.width;
|
|
638
703
|
cellEditorRef.current.style.height = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.height;
|
|
639
|
-
cellEditorRef.current.style.paddingTop = "".concat((parseInt(activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.height) - 16) / 2, "px"); // calculate paddingTop based on cellHeight which could be variable depending on the cellSize prop
|
|
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
|
|
640
705
|
|
|
641
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';
|
|
642
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';
|
|
730
|
+
}
|
|
731
|
+
}
|
|
643
732
|
}
|
|
644
733
|
|
|
645
734
|
if (!isEditing) {
|
|
735
|
+
cellEditorRef.current.style.overflow = 'hidden';
|
|
646
736
|
cellEditorRef.current.style.display = 'none';
|
|
647
737
|
cellEditorRef.current.blur();
|
|
648
738
|
activeCellRef.current.focus();
|
|
649
739
|
}
|
|
650
|
-
}, [isEditing, activeCellCoordinates, rows]);
|
|
651
|
-
|
|
652
|
-
var handleKeyUp = function handleKeyUp(event) {
|
|
653
|
-
var _activeKeys$current3;
|
|
654
|
-
|
|
655
|
-
var key = event.key; // Remove key from active keys array on key up
|
|
656
|
-
|
|
657
|
-
if ((_activeKeys$current3 = activeKeys.current) !== null && _activeKeys$current3 !== void 0 && _activeKeys$current3.includes(key)) {
|
|
658
|
-
var activeKeysClone = (0, _toConsumableArray2.default)(activeKeys.current);
|
|
659
|
-
var filteredKeysClone = activeKeysClone.filter(function (item) {
|
|
660
|
-
return item !== key;
|
|
661
|
-
});
|
|
662
|
-
activeKeys.current = filteredKeysClone;
|
|
663
|
-
}
|
|
664
|
-
};
|
|
665
|
-
|
|
740
|
+
}, [isEditing, activeCellCoordinates, rows, cellEditorValue, columns.length, defaultColumn]);
|
|
666
741
|
return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, getTableProps(), (0, _devtools.getDevtoolsProps)(componentName), {
|
|
667
|
-
className: (0, _classnames.default)(blockClass, className, (0, _defineProperty2.default)({}, "".concat(blockClass, "__container-has-focus"), containerHasFocus)),
|
|
742
|
+
className: (0, _classnames.default)(blockClass, className, "".concat(blockClass, "--interactive-cell-element"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__container-has-focus"), containerHasFocus)),
|
|
668
743
|
ref: spreadsheetRef,
|
|
669
744
|
role: "grid",
|
|
670
745
|
tabIndex: 0,
|
|
671
746
|
"aria-rowcount": (rows === null || rows === void 0 ? void 0 : rows.length) || 0,
|
|
672
747
|
"aria-colcount": (columns === null || columns === void 0 ? void 0 : columns.length) || 0,
|
|
673
748
|
onKeyDown: handleKeyPress,
|
|
674
|
-
onKeyUp: handleKeyUp,
|
|
675
749
|
onFocus: function onFocus() {
|
|
676
750
|
return setContainerHasFocus(true);
|
|
677
751
|
}
|
|
678
|
-
}), /*#__PURE__*/_react.default.createElement(
|
|
752
|
+
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
753
|
+
ref: multiKeyTrackingRef
|
|
754
|
+
}, /*#__PURE__*/_react.default.createElement(_DataSpreadsheetHeader.DataSpreadsheetHeader, {
|
|
679
755
|
ref: spreadsheetRef,
|
|
680
756
|
activeCellCoordinates: activeCellCoordinates,
|
|
681
|
-
|
|
757
|
+
cellSize: cellSize,
|
|
682
758
|
columns: columns,
|
|
683
759
|
defaultColumn: defaultColumn,
|
|
684
760
|
headerGroups: headerGroups,
|
|
685
761
|
rows: rows,
|
|
762
|
+
scrollBarSize: scrollBarSize,
|
|
686
763
|
selectionAreas: selectionAreas,
|
|
687
764
|
setActiveCellCoordinates: setActiveCellCoordinates,
|
|
688
765
|
setSelectionAreas: setSelectionAreas,
|
|
689
|
-
setCurrentMatcher: setCurrentMatcher
|
|
766
|
+
setCurrentMatcher: setCurrentMatcher,
|
|
767
|
+
setSelectionAreaData: setSelectionAreaData
|
|
690
768
|
}), /*#__PURE__*/_react.default.createElement(_DataSpreadsheetBody.DataSpreadsheetBody, {
|
|
691
769
|
activeCellCoordinates: activeCellCoordinates,
|
|
692
770
|
ref: spreadsheetRef,
|
|
@@ -698,34 +776,45 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
|
698
776
|
selectionAreas: selectionAreas,
|
|
699
777
|
setSelectionAreas: setSelectionAreas,
|
|
700
778
|
cellSize: cellSize,
|
|
779
|
+
headerGroups: headerGroups,
|
|
701
780
|
defaultColumn: defaultColumn,
|
|
702
781
|
getTableBodyProps: getTableBodyProps,
|
|
782
|
+
onDataUpdate: onDataUpdate,
|
|
703
783
|
onActiveCellChange: onActiveCellChange,
|
|
784
|
+
onSelectionAreaChange: onSelectionAreaChange,
|
|
704
785
|
prepareRow: prepareRow,
|
|
705
786
|
rows: rows,
|
|
787
|
+
selectionAreaData: selectionAreaData,
|
|
788
|
+
setSelectionAreaData: setSelectionAreaData,
|
|
706
789
|
setActiveCellCoordinates: setActiveCellCoordinates,
|
|
707
790
|
scrollBarSize: scrollBarSize,
|
|
708
791
|
totalColumnsWidth: totalColumnsWidth,
|
|
709
792
|
id: id,
|
|
710
|
-
columns: columns
|
|
793
|
+
columns: columns,
|
|
794
|
+
defaultEmptyRowCount: defaultEmptyRowCount
|
|
711
795
|
}), /*#__PURE__*/_react.default.createElement("button", {
|
|
796
|
+
onClick: handleActiveCellClick,
|
|
712
797
|
onKeyDown: handleActiveCellKeyDown,
|
|
713
|
-
onMouseEnter: handleActiveCellMouseEnter,
|
|
714
798
|
onDoubleClick: handleActiveCellDoubleClick,
|
|
715
799
|
ref: activeCellRef,
|
|
716
800
|
className: (0, _classnames.default)("".concat(blockClass, "--interactive-cell-element"), "".concat(blockClass, "__active-cell--highlight")),
|
|
717
801
|
type: "button"
|
|
718
|
-
}), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextArea, {
|
|
802
|
+
}, activeCellContent), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextArea, {
|
|
719
803
|
value: cellEditorValue,
|
|
720
804
|
onKeyDown: handleEditSubmit,
|
|
721
805
|
onChange: function onChange(event) {
|
|
722
|
-
|
|
806
|
+
setCellEditorValue(event.target.value);
|
|
807
|
+
cellEditorRulerRef.current.textContent = event.target.value;
|
|
723
808
|
},
|
|
724
809
|
ref: cellEditorRef,
|
|
725
810
|
labelText: "",
|
|
726
811
|
"aria-labelledby": activeCellCoordinates ? "[data-row-index=\"".concat(activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row, "\"][data-column-index=\"").concat(activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column, "\"]") : null,
|
|
727
812
|
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))
|
|
728
|
-
})
|
|
813
|
+
}), /*#__PURE__*/_react.default.createElement("pre", {
|
|
814
|
+
"aria-hidden": true,
|
|
815
|
+
ref: cellEditorRulerRef,
|
|
816
|
+
className: "".concat(blockClass, "__cell-editor-ruler")
|
|
817
|
+
})));
|
|
729
818
|
}); // Return a placeholder if not released and not enabled by feature flag
|
|
730
819
|
|
|
731
820
|
|
|
@@ -763,6 +852,11 @@ DataSpreadsheet.propTypes = {
|
|
|
763
852
|
*/
|
|
764
853
|
data: _propTypes.default.arrayOf(_propTypes.default.shape),
|
|
765
854
|
|
|
855
|
+
/**
|
|
856
|
+
* Sets the number of empty rows to be created when there is no data provided
|
|
857
|
+
*/
|
|
858
|
+
defaultEmptyRowCount: _propTypes.default.number,
|
|
859
|
+
|
|
766
860
|
/**
|
|
767
861
|
* The spreadsheet id
|
|
768
862
|
*/
|
|
@@ -776,7 +870,12 @@ DataSpreadsheet.propTypes = {
|
|
|
776
870
|
/**
|
|
777
871
|
* The setter fn for the data prop
|
|
778
872
|
*/
|
|
779
|
-
onDataUpdate: _propTypes.default.func
|
|
873
|
+
onDataUpdate: _propTypes.default.func,
|
|
874
|
+
|
|
875
|
+
/**
|
|
876
|
+
* The event handler that is called when the selection area values change
|
|
877
|
+
*/
|
|
878
|
+
onSelectionAreaChange: _propTypes.default.func
|
|
780
879
|
/* TODO: add types and DocGen for all props. */
|
|
781
880
|
|
|
782
881
|
};
|