@carbon/ibm-products 2.7.0 → 2.8.1
Sign up to get free protection for your applications and to get access to all the features.
- package/css/index-full-carbon.css +115 -6
- package/css/index-full-carbon.css.map +1 -1
- package/css/index-full-carbon.min.css +4 -4
- package/css/index-full-carbon.min.css.map +1 -1
- package/css/index-without-carbon-released-only.css +10 -4
- package/css/index-without-carbon-released-only.css.map +1 -1
- package/css/index-without-carbon-released-only.min.css +2 -2
- package/css/index-without-carbon-released-only.min.css.map +1 -1
- package/css/index-without-carbon.css +115 -6
- package/css/index-without-carbon.css.map +1 -1
- package/css/index-without-carbon.min.css +4 -4
- package/css/index-without-carbon.min.css.map +1 -1
- package/css/index.css +108 -4
- package/css/index.css.map +1 -1
- package/css/index.min.css +4 -4
- package/css/index.min.css.map +1 -1
- package/es/components/AddSelect/AddSelectRow.js +2 -1
- package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +6 -7
- package/es/components/ButtonMenu/ButtonMenu.js +4 -0
- package/es/components/ButtonSetWithOverflow/ButtonSetWithOverflow.js +21 -28
- package/es/components/ComboButton/ComboButton.js +5 -0
- package/es/components/CreateFullPage/CreateFullPage.js +4 -3
- package/es/components/CreateInfluencer/CreateInfluencer.js +10 -3
- package/es/components/DataSpreadsheet/DataSpreadsheet.js +1 -1
- package/es/components/Datagrid/Datagrid/DatagridHeaderRow.js +118 -10
- package/es/components/Datagrid/Datagrid/DatagridToolbar.js +8 -14
- package/es/components/Datagrid/Datagrid/addons/stateReducer.js +111 -0
- package/es/components/Datagrid/Datagrid.docs-page.js +6 -0
- package/es/components/Datagrid/useDatagrid.js +5 -2
- package/es/components/Datagrid/utils/DatagridActions.js +9 -10
- package/es/components/FilterSummary/FilterSummary.js +9 -3
- package/es/components/NotificationsPanel/NotificationsPanel.js +3 -5
- package/es/components/PageHeader/PageHeaderUtils.js +10 -3
- package/es/components/SidePanel/SidePanel.js +3 -1
- package/es/components/TagSet/TagSet.js +3 -7
- package/es/components/TooltipTrigger/TooltipTrigger.js +62 -0
- package/es/components/TooltipTrigger/index.js +8 -0
- package/es/components/TooltipTrigger/useExample.js +49 -0
- package/es/components/UserProfileImage/UserProfileImage.js +7 -6
- package/es/global/decorators/sidePanelDecorator.js +11 -0
- package/es/global/js/hooks/useResizeObserver.js +7 -5
- package/es/global/js/utils/StoryDocsPage.js +5 -2
- package/es/global/js/utils/test-helper.js +97 -43
- package/es/settings.js +8 -2
- package/lib/components/AddSelect/AddSelectRow.js +2 -1
- package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +5 -6
- package/lib/components/ButtonMenu/ButtonMenu.js +5 -1
- package/lib/components/ButtonSetWithOverflow/ButtonSetWithOverflow.js +20 -27
- package/lib/components/ComboButton/ComboButton.js +5 -0
- package/lib/components/CreateFullPage/CreateFullPage.js +4 -3
- package/lib/components/CreateInfluencer/CreateInfluencer.js +10 -3
- package/lib/components/DataSpreadsheet/DataSpreadsheet.js +1 -1
- package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +121 -10
- package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +7 -13
- package/lib/components/Datagrid/Datagrid/addons/stateReducer.js +122 -0
- package/lib/components/Datagrid/Datagrid.docs-page.js +6 -0
- package/lib/components/Datagrid/useDatagrid.js +5 -2
- package/lib/components/Datagrid/utils/DatagridActions.js +8 -9
- package/lib/components/FilterSummary/FilterSummary.js +9 -4
- package/lib/components/NotificationsPanel/NotificationsPanel.js +3 -5
- package/lib/components/PageHeader/PageHeaderUtils.js +10 -3
- package/lib/components/SidePanel/SidePanel.js +3 -1
- package/lib/components/TagSet/TagSet.js +2 -6
- package/lib/components/TooltipTrigger/TooltipTrigger.js +67 -0
- package/lib/components/TooltipTrigger/index.js +12 -0
- package/lib/components/TooltipTrigger/useExample.js +58 -0
- package/lib/components/UserProfileImage/UserProfileImage.js +6 -5
- package/lib/global/decorators/sidePanelDecorator.js +19 -0
- package/lib/global/js/hooks/useResizeObserver.js +7 -5
- package/lib/global/js/utils/StoryDocsPage.js +5 -2
- package/lib/global/js/utils/test-helper.js +99 -44
- package/lib/settings.js +8 -2
- package/package.json +8 -8
- package/scss/components/APIKeyModal/_storybook-styles.scss +1 -1
- package/scss/components/AboutModal/_storybook-styles.scss +1 -1
- package/scss/components/ActionSet/_storybook-styles.scss +1 -1
- package/scss/components/CreateFullPage/_storybook-styles.scss +1 -1
- package/scss/components/CreateInfluencer/_create-influencer.scss +6 -2
- package/scss/components/CreateModal/_storybook-styles.scss +1 -1
- package/scss/components/CreateSidePanel/_storybook-styles.scss +4 -1
- package/scss/components/CreateTearsheet/_storybook-styles.scss +1 -1
- package/scss/components/CreateTearsheetNarrow/_storybook-styles.scss +1 -1
- package/scss/components/DataSpreadsheet/_storybook-styles.scss +7 -2
- package/scss/components/Datagrid/_storybook-styles.scss +6 -3
- package/scss/components/Datagrid/styles/_datagrid.scss +92 -0
- package/scss/components/EditSidePanel/_storybook-styles.scss +8 -5
- package/scss/components/EditTearsheet/_storybook-styles.scss +1 -1
- package/scss/components/EditTearsheetNarrow/_storybook-styles.scss +1 -1
- package/scss/components/EditUpdateCards/_storybook-styles.scss +1 -1
- package/scss/components/ExpressiveCard/_storybook-styles.scss +1 -1
- package/scss/components/NotificationsPanel/_storybook-styles.scss +1 -1
- package/scss/components/OptionsTile/_storybook-styles.scss +1 -1
- package/scss/components/PageHeader/_page-header.scss +8 -4
- package/scss/components/SidePanel/_storybook-styles.scss +7 -0
- package/scss/components/Tearsheet/_storybook-styles.scss +1 -1
- package/scss/components/TooltipTrigger/_index-with-carbon.scss +8 -0
- package/scss/components/TooltipTrigger/_index.scss +8 -0
- package/scss/components/TooltipTrigger/_storybook-styles.scss +6 -0
- package/scss/components/TooltipTrigger/_tooltip-trigger.scss +29 -0
- package/scss/components/WebTerminal/_storybook-styles.scss +1 -1
- package/scss/components/_index-with-carbon.scss +1 -0
- package/scss/components/_index.scss +1 -0
- package/scss/global/decorators/_side-panel-decorator.scss +18 -0
- package/scss/global/js/utils/_story-as-full-page.scss +6 -0
@@ -19,7 +19,8 @@ var componentName = 'CreateInfluencer';
|
|
19
19
|
export var CreateInfluencer = function CreateInfluencer(_ref) {
|
20
20
|
var className = _ref.className,
|
21
21
|
currentStep = _ref.currentStep,
|
22
|
-
stepData = _ref.stepData
|
22
|
+
stepData = _ref.stepData,
|
23
|
+
title = _ref.title;
|
23
24
|
var getNumberOfDynamicStepsBeforeCurrentStep = function getNumberOfDynamicStepsBeforeCurrentStep(array, key) {
|
24
25
|
var dynamicSteps = [];
|
25
26
|
array.forEach(function (item, index) {
|
@@ -47,7 +48,9 @@ export var CreateInfluencer = function CreateInfluencer(_ref) {
|
|
47
48
|
var totalDynamicSteps = getNumberOfDynamicStepsBeforeCurrentStep(stepData, 'shouldIncludeStep') || 0;
|
48
49
|
return /*#__PURE__*/React.createElement("div", {
|
49
50
|
className: "".concat(blockClass, "__left-nav")
|
50
|
-
},
|
51
|
+
}, title && /*#__PURE__*/React.createElement("h3", {
|
52
|
+
className: "".concat(blockClass, "__title")
|
53
|
+
}, title), currentStep === 1 && (_stepData$ = stepData[0]) !== null && _stepData$ !== void 0 && _stepData$.introStep ? null : /*#__PURE__*/React.createElement(ProgressIndicator, {
|
51
54
|
currentIndex: (_stepData$2 = stepData[0]) !== null && _stepData$2 !== void 0 && _stepData$2.introStep ? currentStep - totalDynamicSteps - 2 // minus 2 because we need to account for the intro step in addition to `currentIndex` being 0 index based and our steps being 1 index based
|
52
55
|
: currentStep - totalDynamicSteps - 1 // minus 1 because ProgressIndicator currentIndex prop is 0 index based, but our steps are 1 index based
|
53
56
|
,
|
@@ -88,5 +91,9 @@ CreateInfluencer.propTypes = {
|
|
88
91
|
secondaryLabel: PropTypes.string,
|
89
92
|
shouldIncludeStep: PropTypes.bool,
|
90
93
|
title: PropTypes.node
|
91
|
-
}))
|
94
|
+
})),
|
95
|
+
/**
|
96
|
+
* The main title of the full page, displayed in the influencer area.
|
97
|
+
*/
|
98
|
+
title: PropTypes.string
|
92
99
|
};
|
@@ -545,7 +545,7 @@ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref)
|
|
545
545
|
setClickAndHoldActive(false);
|
546
546
|
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;
|
547
547
|
var activeCellValue = activeCellFullData ? activeCellFullData.row.cells[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column].value : null;
|
548
|
-
setCellEditorValue(activeCellValue);
|
548
|
+
setCellEditorValue(activeCellValue || '');
|
549
549
|
cellEditorRulerRef.current.textContent = activeCellValue;
|
550
550
|
cellEditorRef.current.style.width = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.width;
|
551
551
|
};
|
@@ -1,19 +1,22 @@
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
3
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
3
4
|
/**
|
4
|
-
* Copyright IBM Corp. 2020,
|
5
|
+
* Copyright IBM Corp. 2020, 2023
|
5
6
|
*
|
6
7
|
* This source code is licensed under the Apache-2.0 license found in the
|
7
8
|
* LICENSE file in the root directory of this source tree.
|
8
9
|
*/
|
9
10
|
|
10
11
|
// @flow
|
11
|
-
import React from 'react';
|
12
|
+
import React, { useState, useEffect } from 'react';
|
12
13
|
import cx from 'classnames';
|
13
14
|
import { TableHeader, TableRow } from '@carbon/react';
|
15
|
+
import { px } from '@carbon/layout';
|
14
16
|
import { selectionColumnId } from '../common-column-ids';
|
15
17
|
import { pkg } from '../../../settings';
|
16
18
|
import getColTitle from '../utils/getColTitle';
|
19
|
+
import { handleColumnResizeEndEvent, handleColumnResizeStartEvent, handleColumnResizingEvent } from './addons/stateReducer';
|
17
20
|
var blockClass = "".concat(pkg.prefix, "--datagrid");
|
18
21
|
var getAccessibilityProps = function getAccessibilityProps(header) {
|
19
22
|
var props = {};
|
@@ -26,15 +29,76 @@ var getAccessibilityProps = function getAccessibilityProps(header) {
|
|
26
29
|
return props;
|
27
30
|
};
|
28
31
|
var HeaderRow = function HeaderRow(datagridState, headRef, headerGroup) {
|
32
|
+
// Used to measure the height of the table and uses that value
|
33
|
+
// to display a vertical line to indicate the column you are resizing
|
34
|
+
useEffect(function () {
|
35
|
+
var tableId = datagridState.tableId;
|
36
|
+
if (tableId) {
|
37
|
+
var gridElement = document.querySelector("#".concat(tableId));
|
38
|
+
var tableElement = gridElement.querySelector('table');
|
39
|
+
var headerRowElement = document.querySelector("#".concat(tableId, " .").concat(blockClass, "__head"));
|
40
|
+
var hasHorizontalScrollbar = tableElement.scrollWidth > tableElement.clientWidth;
|
41
|
+
var scrollBuffer = hasHorizontalScrollbar ? 18 : 2;
|
42
|
+
var tableToolbar = gridElement.querySelector(".".concat(blockClass, "__table-toolbar"));
|
43
|
+
var tableToolbarHeight = (tableToolbar === null || tableToolbar === void 0 ? void 0 : tableToolbar.offsetHeight) || 0;
|
44
|
+
var setCustomValues = function setCustomValues(_ref) {
|
45
|
+
var _ref$rowHeight = _ref.rowHeight,
|
46
|
+
rowHeight = _ref$rowHeight === void 0 ? 48 : _ref$rowHeight,
|
47
|
+
gridHeight = _ref.gridHeight;
|
48
|
+
headerRowElement.style.setProperty("--".concat(blockClass, "--row-height"), px(rowHeight));
|
49
|
+
headerRowElement.style.setProperty("--".concat(blockClass, "--grid-height"), px(gridHeight - scrollBuffer - tableToolbarHeight));
|
50
|
+
headerRowElement.style.setProperty("--".concat(blockClass, "--header-height"), px(headerRowElement.offsetHeight));
|
51
|
+
};
|
52
|
+
setCustomValues({
|
53
|
+
gridHeight: gridElement.offsetHeight,
|
54
|
+
rowHeight: headerRowElement.clientHeight
|
55
|
+
});
|
56
|
+
}
|
57
|
+
}, [datagridState.rowSize, datagridState.tableId, datagridState]);
|
58
|
+
var _useState = useState(2),
|
59
|
+
_useState2 = _slicedToArray(_useState, 1),
|
60
|
+
incrementAmount = _useState2[0];
|
61
|
+
var getClientXPosition = function getClientXPosition(event) {
|
62
|
+
var isTouchEvent = false;
|
63
|
+
if (event.type === 'touchstart') {
|
64
|
+
// Do not respond to multiple touches (e.g. 2 or 3 fingers)
|
65
|
+
if (event.touches && event.touches.length > 1) {
|
66
|
+
return;
|
67
|
+
}
|
68
|
+
isTouchEvent = true;
|
69
|
+
}
|
70
|
+
var clientX = isTouchEvent ? Math.round(event.touches[0].clientX) : event.clientX;
|
71
|
+
var closestHeader = event.target.closest('th');
|
72
|
+
var closestHeaderCoords = closestHeader.getBoundingClientRect();
|
73
|
+
var headerOffset = closestHeaderCoords.left;
|
74
|
+
var offsetValue = clientX - headerOffset;
|
75
|
+
return offsetValue;
|
76
|
+
};
|
77
|
+
useEffect(function () {
|
78
|
+
var isResizing = datagridState.state.isResizing;
|
79
|
+
if (isResizing) {
|
80
|
+
var onColResizeEnd = datagridState.onColResizeEnd;
|
81
|
+
document.addEventListener('mouseup', function () {
|
82
|
+
handleColumnResizeEndEvent(datagridState.dispatch, onColResizeEnd, isResizing);
|
83
|
+
document.activeElement.blur();
|
84
|
+
});
|
85
|
+
}
|
86
|
+
return function () {
|
87
|
+
document.removeEventListener('mouseup', function () {
|
88
|
+
return handleColumnResizeEndEvent(datagridState.dispatch);
|
89
|
+
});
|
90
|
+
};
|
91
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
92
|
+
}, [datagridState.state.isResizing]);
|
29
93
|
return /*#__PURE__*/React.createElement(TableRow, _extends({}, headerGroup.getHeaderGroupProps({
|
30
94
|
role: false
|
31
95
|
}), {
|
32
96
|
className: cx("".concat(blockClass, "__head"), headerGroup.getHeaderGroupProps().className),
|
33
97
|
ref: headRef
|
34
|
-
}), datagridState.headers.filter(function (
|
35
|
-
var isVisible =
|
98
|
+
}), datagridState.headers.filter(function (_ref2) {
|
99
|
+
var isVisible = _ref2.isVisible;
|
36
100
|
return isVisible;
|
37
|
-
}).map(function (header) {
|
101
|
+
}).map(function (header, index) {
|
38
102
|
var _cx;
|
39
103
|
if (header.id === selectionColumnId) {
|
40
104
|
// render directly without the wrapper TableHeader
|
@@ -42,13 +106,57 @@ var HeaderRow = function HeaderRow(datagridState, headRef, headerGroup) {
|
|
42
106
|
key: header.id
|
43
107
|
});
|
44
108
|
}
|
45
|
-
|
46
|
-
|
47
|
-
|
109
|
+
var _ref3 = header || 50,
|
110
|
+
minWidth = _ref3.minWidth;
|
111
|
+
var visibleColumns = datagridState.visibleColumns,
|
112
|
+
state = datagridState.state,
|
113
|
+
dispatch = datagridState.dispatch,
|
114
|
+
onColResizeEnd = datagridState.onColResizeEnd;
|
115
|
+
var columnResizing = state.columnResizing,
|
116
|
+
isResizing = state.isResizing;
|
117
|
+
var columnWidths = columnResizing.columnWidths;
|
118
|
+
var originalCol = visibleColumns[index];
|
119
|
+
return /*#__PURE__*/React.createElement(TableHeader, _extends({}, header.getHeaderProps(), {
|
48
120
|
className: cx((_cx = {}, _defineProperty(_cx, "".concat(blockClass, "__resizableColumn"), header.getResizerProps), _defineProperty(_cx, "".concat(blockClass, "__isResizing"), header.isResizing), _defineProperty(_cx, "".concat(blockClass, "__sortableColumn"), datagridState.isTableSortable), _defineProperty(_cx, "".concat(blockClass, "__isSorted"), header.isSorted), _cx), header.getHeaderProps().className),
|
49
121
|
key: header.id
|
50
|
-
}, getAccessibilityProps(header)), header.render('Header'), header.getResizerProps && /*#__PURE__*/React.createElement("
|
51
|
-
|
122
|
+
}, getAccessibilityProps(header)), header.render('Header'), header.getResizerProps && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("input", _extends({}, header.getResizerProps(), {
|
123
|
+
onMouseMove: function onMouseMove(event) {
|
124
|
+
if (isResizing) {
|
125
|
+
var newWidth = getClientXPosition(event);
|
126
|
+
// Sets a min width for resizing so at least one character from the column header is visible
|
127
|
+
if (newWidth >= 50) {
|
128
|
+
handleColumnResizingEvent(dispatch, header, newWidth);
|
129
|
+
}
|
130
|
+
}
|
131
|
+
},
|
132
|
+
onMouseDown: function onMouseDown() {
|
133
|
+
return handleColumnResizeStartEvent(dispatch, header.id);
|
134
|
+
},
|
135
|
+
onKeyDown: function onKeyDown(event) {
|
136
|
+
var key = event.key;
|
137
|
+
if (key === 'ArrowLeft' || key === 'ArrowRight') {
|
138
|
+
var currentColumnWidth = columnWidths[header.id] || (datagridState.isTableSortable && originalCol.width < 90 ? 90 : originalCol.width);
|
139
|
+
if (key === 'ArrowLeft') {
|
140
|
+
if (currentColumnWidth - incrementAmount > Math.max(minWidth, 50)) {
|
141
|
+
var newWidth = currentColumnWidth - incrementAmount;
|
142
|
+
handleColumnResizingEvent(dispatch, header, newWidth, true);
|
143
|
+
}
|
144
|
+
}
|
145
|
+
if (key === 'ArrowRight') {
|
146
|
+
var _newWidth = currentColumnWidth + incrementAmount;
|
147
|
+
handleColumnResizingEvent(dispatch, header, _newWidth, true);
|
148
|
+
}
|
149
|
+
}
|
150
|
+
},
|
151
|
+
onKeyUp: function onKeyUp() {
|
152
|
+
return handleColumnResizeEndEvent(dispatch, onColResizeEnd, header.id);
|
153
|
+
},
|
154
|
+
className: cx("".concat(blockClass, "__col-resizer-range")),
|
155
|
+
type: "range",
|
156
|
+
defaultValue: originalCol.width,
|
157
|
+
"aria-label": "Resize column"
|
158
|
+
})), /*#__PURE__*/React.createElement("span", {
|
159
|
+
className: "".concat(blockClass, "__col-resize-indicator")
|
52
160
|
})));
|
53
161
|
}));
|
54
162
|
};
|
@@ -8,10 +8,8 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
8
8
|
*/
|
9
9
|
|
10
10
|
import React, { useEffect, useRef, useState } from 'react';
|
11
|
-
import {
|
12
|
-
import { TableToolbar, TableBatchActions, TableBatchAction } from '@carbon/react';
|
11
|
+
import { TableToolbar, TableBatchActions, TableBatchAction, MenuButton, MenuItem } from '@carbon/react';
|
13
12
|
import { useResizeObserver } from '../../../global/js/hooks/useResizeObserver';
|
14
|
-
import { ButtonMenu, ButtonMenuItem } from '../../ButtonMenu';
|
15
13
|
import { pkg, carbon } from '../../../settings';
|
16
14
|
import cx from 'classnames';
|
17
15
|
var blockClass = "".concat(pkg.prefix, "--datagrid");
|
@@ -76,19 +74,15 @@ var DatagridBatchActionsToolbar = function DatagridBatchActionsToolbar(datagridS
|
|
76
74
|
if ((toolbarBatchActions === null || toolbarBatchActions === void 0 ? void 0 : toolbarBatchActions.length) <= 3 && !displayAllInMenu) {
|
77
75
|
return null;
|
78
76
|
}
|
79
|
-
return /*#__PURE__*/React.createElement(
|
80
|
-
label:
|
81
|
-
|
82
|
-
className: cx("".concat(blockClass, "__button-menu"), _defineProperty({}, "".concat(blockClass, "__button-menu--icon-only"), width <= minWidthBeforeOverflowIcon)),
|
83
|
-
menuOptionsClass: "".concat(blockClass, "__button-menu-options"),
|
84
|
-
flipped: true,
|
85
|
-
menuAriaLabel: 'Batch actions'
|
77
|
+
return /*#__PURE__*/React.createElement(MenuButton, {
|
78
|
+
label: "More",
|
79
|
+
className: cx("".concat(blockClass, "__button-menu"), _defineProperty({}, "".concat(blockClass, "__button-menu--icon-only"), width <= minWidthBeforeOverflowIcon))
|
86
80
|
}, toolbarBatchActions && toolbarBatchActions.map(function (batchAction, index) {
|
87
81
|
if (index < 2) {
|
88
82
|
if (displayAllInMenu) {
|
89
|
-
return /*#__PURE__*/React.createElement(
|
83
|
+
return /*#__PURE__*/React.createElement(MenuItem, {
|
90
84
|
key: "".concat(batchAction.label, "-").concat(index),
|
91
|
-
|
85
|
+
label: batchAction.label,
|
92
86
|
onClick: function onClick(event) {
|
93
87
|
batchAction.onClick(getSelectedRowData(), event);
|
94
88
|
if (batchAction.type === 'select_all') {
|
@@ -99,9 +93,9 @@ var DatagridBatchActionsToolbar = function DatagridBatchActionsToolbar(datagridS
|
|
99
93
|
}
|
100
94
|
return null;
|
101
95
|
}
|
102
|
-
return /*#__PURE__*/React.createElement(
|
96
|
+
return /*#__PURE__*/React.createElement(MenuItem, {
|
103
97
|
key: "".concat(batchAction.label, "-").concat(index),
|
104
|
-
|
98
|
+
label: batchAction.label,
|
105
99
|
onClick: function onClick(event) {
|
106
100
|
batchAction.onClick(getSelectedRowData(), event);
|
107
101
|
if (batchAction.type === 'select_all') {
|
@@ -0,0 +1,111 @@
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
3
|
+
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
|
+
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; }
|
5
|
+
/**
|
6
|
+
* Copyright IBM Corp. 2023, 2023
|
7
|
+
*
|
8
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
9
|
+
* LICENSE file in the root directory of this source tree.
|
10
|
+
*/
|
11
|
+
|
12
|
+
var COLUMN_RESIZE_START = 'columnStartResizing';
|
13
|
+
var COLUMN_RESIZING = 'columnResizing';
|
14
|
+
var COLUMN_RESIZE_END = 'columnDoneResizing';
|
15
|
+
var INIT = 'init';
|
16
|
+
export var handleColumnResizeStartEvent = function handleColumnResizeStartEvent(dispatch, headerId) {
|
17
|
+
dispatch({
|
18
|
+
type: COLUMN_RESIZE_START,
|
19
|
+
payload: {
|
20
|
+
headerId: headerId
|
21
|
+
}
|
22
|
+
});
|
23
|
+
};
|
24
|
+
export var handleColumnResizeEndEvent = function handleColumnResizeEndEvent(dispatch, onColResizeEnd, headerId) {
|
25
|
+
dispatch({
|
26
|
+
type: COLUMN_RESIZE_END,
|
27
|
+
payload: {
|
28
|
+
onColResizeEnd: onColResizeEnd,
|
29
|
+
headerId: headerId
|
30
|
+
}
|
31
|
+
});
|
32
|
+
};
|
33
|
+
export var handleColumnResizingEvent = function handleColumnResizingEvent(dispatch, header, newWidth, isKeyEvent) {
|
34
|
+
if (isKeyEvent) {
|
35
|
+
dispatch({
|
36
|
+
type: COLUMN_RESIZE_START,
|
37
|
+
payload: {
|
38
|
+
newWidth: newWidth,
|
39
|
+
headerId: header.id,
|
40
|
+
defaultWidth: header.originalWidth
|
41
|
+
}
|
42
|
+
});
|
43
|
+
}
|
44
|
+
dispatch({
|
45
|
+
type: COLUMN_RESIZING,
|
46
|
+
payload: {
|
47
|
+
newWidth: newWidth,
|
48
|
+
headerId: header.id,
|
49
|
+
defaultWidth: header.originalWidth
|
50
|
+
}
|
51
|
+
});
|
52
|
+
};
|
53
|
+
export var stateReducer = function stateReducer(newState, action) {
|
54
|
+
switch (action.type) {
|
55
|
+
case INIT:
|
56
|
+
{
|
57
|
+
return _objectSpread(_objectSpread({}, newState), {}, {
|
58
|
+
isResizing: false
|
59
|
+
});
|
60
|
+
}
|
61
|
+
case COLUMN_RESIZE_START:
|
62
|
+
{
|
63
|
+
var headerId = action.payload.headerId;
|
64
|
+
return _objectSpread(_objectSpread({}, newState), {}, {
|
65
|
+
isResizing: headerId
|
66
|
+
});
|
67
|
+
}
|
68
|
+
case COLUMN_RESIZING:
|
69
|
+
{
|
70
|
+
var _ref = action.payload || {},
|
71
|
+
_headerId = _ref.headerId,
|
72
|
+
newWidth = _ref.newWidth,
|
73
|
+
defaultWidth = _ref.defaultWidth;
|
74
|
+
var newColumnWidth = {};
|
75
|
+
if (typeof _headerId === 'undefined') {
|
76
|
+
return _objectSpread({}, newState);
|
77
|
+
}
|
78
|
+
newColumnWidth[_headerId] = newWidth;
|
79
|
+
var cleanedWidths = Object.fromEntries(Object.entries(newState.columnResizing.columnWidths).filter(function (_ref2) {
|
80
|
+
var _ref3 = _slicedToArray(_ref2, 2),
|
81
|
+
_ = _ref3[0],
|
82
|
+
value = _ref3[1];
|
83
|
+
return !isNaN(value);
|
84
|
+
}));
|
85
|
+
return _objectSpread(_objectSpread({}, newState), {}, {
|
86
|
+
isResizing: _headerId,
|
87
|
+
columnResizing: _objectSpread(_objectSpread({}, newState.columnResizing), {}, {
|
88
|
+
columnWidth: defaultWidth,
|
89
|
+
columnWidths: _objectSpread(_objectSpread({}, cleanedWidths), newColumnWidth),
|
90
|
+
headerIdWidths: [_headerId, newWidth]
|
91
|
+
})
|
92
|
+
});
|
93
|
+
}
|
94
|
+
case COLUMN_RESIZE_END:
|
95
|
+
{
|
96
|
+
var _action$payload = action.payload,
|
97
|
+
onColResizeEnd = _action$payload.onColResizeEnd,
|
98
|
+
_headerId2 = _action$payload.headerId;
|
99
|
+
var currentColumn = {};
|
100
|
+
currentColumn[_headerId2] = newState.columnResizing.columnWidths[_headerId2];
|
101
|
+
var allChangedColumns = newState.columnResizing.columnWidths;
|
102
|
+
var isResizing = newState.isResizing;
|
103
|
+
if (isResizing) {
|
104
|
+
onColResizeEnd === null || onColResizeEnd === void 0 ? void 0 : onColResizeEnd(currentColumn, allChangedColumns);
|
105
|
+
}
|
106
|
+
return _objectSpread(_objectSpread({}, newState), {}, {
|
107
|
+
isResizing: false
|
108
|
+
});
|
109
|
+
}
|
110
|
+
}
|
111
|
+
};
|
@@ -41,6 +41,12 @@ export var DocsPage = function DocsPage() {
|
|
41
41
|
language: 'jsx',
|
42
42
|
code: "\n const columns = [\n {\n Header: 'First Name',\n accessor: 'firstName',\n },\n {\n Header: 'Last Name',\n accessor: 'lastName',\n Cell: ({ cell: { value } }) => (\n <span className=\"custom-cell-wrapper\">{value}</span>\n ),\n },\n];\n "
|
43
43
|
}
|
44
|
+
}, {
|
45
|
+
description: "There is also an optional resize callback when resizing columns, allowing you to save the widths of columns that have been resized. The resize callback returns the column that was just resized and it's width, in addition to all of the columns that have been resized and their widths.",
|
46
|
+
source: {
|
47
|
+
language: 'jsx',
|
48
|
+
code: "\nuseDatagrid({\n columns,\n data,\n onColResizeEnd: (currentColumn, allColumns) =>\n console.log(currentColumn, allColumns),\n});\n "
|
49
|
+
}
|
44
50
|
}, {
|
45
51
|
title: 'Rendering the table toolbar',
|
46
52
|
image: /*#__PURE__*/React.createElement("img", {
|
@@ -19,6 +19,7 @@ import useRowSize from './useRowSize';
|
|
19
19
|
import useHeaderRow from './Datagrid/DatagridHeaderRow';
|
20
20
|
import useFlexResize from './useFlexResize';
|
21
21
|
import useFloatingScroll from './useFloatingScroll';
|
22
|
+
import { stateReducer } from './Datagrid/addons/stateReducer';
|
22
23
|
var useDatagrid = function useDatagrid(params) {
|
23
24
|
var defaultPlugins = [useFlexLayout, useHeaderRow, useSkeletonRows, useResizeColumns, useRowRenderer, useDefaultStringRenderer, useRowSize, useFilters, useGlobalFilter, useSortBy, useExpanded];
|
24
25
|
var defaultEndPlugins = [usePagination, useRowSelect, useFlexResize, useFloatingScroll];
|
@@ -29,9 +30,11 @@ var useDatagrid = function useDatagrid(params) {
|
|
29
30
|
for (var _len = arguments.length, plugins = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
30
31
|
plugins[_key - 1] = arguments[_key];
|
31
32
|
}
|
32
|
-
var tableState = useTable.apply(void 0, [_objectSpread({
|
33
|
+
var tableState = useTable.apply(void 0, [_objectSpread(_objectSpread({
|
33
34
|
tableId: tableId
|
34
|
-
}, params)
|
35
|
+
}, params), {}, {
|
36
|
+
stateReducer: stateReducer
|
37
|
+
})].concat(defaultPlugins, plugins, defaultEndPlugins, _toConsumableArray(clientEndPlugins)));
|
35
38
|
return tableState;
|
36
39
|
};
|
37
40
|
export default useDatagrid;
|
@@ -7,8 +7,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
7
7
|
*/
|
8
8
|
|
9
9
|
import { Add, ChevronDown, Download, Filter, Restart } from '@carbon/react/icons';
|
10
|
-
import { Button, ComposedModal, Dropdown, IconButton, ModalBody, ModalFooter, ModalHeader, OverflowMenu, OverflowMenuItem, TableToolbarContent, TableToolbarSearch } from '@carbon/react';
|
11
|
-
import { ButtonMenu, ButtonMenuItem } from '../../ButtonMenu';
|
10
|
+
import { Button, ComposedModal, Dropdown, IconButton, ModalBody, ModalFooter, ModalHeader, OverflowMenu, OverflowMenuItem, TableToolbarContent, TableToolbarSearch, MenuButton, MenuItem } from '@carbon/react';
|
12
11
|
import React, { useLayoutEffect, useState } from 'react';
|
13
12
|
import { action } from '@storybook/addon-actions';
|
14
13
|
import { pkg } from '../../../settings';
|
@@ -151,18 +150,18 @@ export var DatagridActions = function DatagridActions(datagridState) {
|
|
151
150
|
onClick: downloadCsv
|
152
151
|
})), CustomizeColumnsButton && /*#__PURE__*/React.createElement("div", {
|
153
152
|
style: style
|
154
|
-
}, /*#__PURE__*/React.createElement(CustomizeColumnsButton, null)), /*#__PURE__*/React.createElement(RowSizeDropdown, rowSizeDropdownProps), /*#__PURE__*/React.createElement(
|
153
|
+
}, /*#__PURE__*/React.createElement(CustomizeColumnsButton, null)), /*#__PURE__*/React.createElement(RowSizeDropdown, rowSizeDropdownProps), /*#__PURE__*/React.createElement(MenuButton, {
|
155
154
|
label: "Primary button",
|
156
155
|
renderIcon: ChevronDown,
|
157
|
-
|
158
|
-
}, /*#__PURE__*/React.createElement(
|
159
|
-
|
156
|
+
className: "".concat(blockClass, "__toolbar-options")
|
157
|
+
}, /*#__PURE__*/React.createElement(MenuItem, {
|
158
|
+
label: "Option 1",
|
160
159
|
onClick: action("Click on ButtonMenu Option 1")
|
161
|
-
}), /*#__PURE__*/React.createElement(
|
162
|
-
|
160
|
+
}), /*#__PURE__*/React.createElement(MenuItem, {
|
161
|
+
label: "Option 2",
|
163
162
|
onClick: action("Click on ButtonMenu Option 2")
|
164
|
-
}), /*#__PURE__*/React.createElement(
|
165
|
-
|
163
|
+
}), /*#__PURE__*/React.createElement(MenuItem, {
|
164
|
+
label: "Option 3",
|
166
165
|
onClick: action("Click on ButtonMenu Option 3")
|
167
166
|
}))) : /*#__PURE__*/React.createElement(TableToolbarContent, null, renderFilterPanelButton(), /*#__PURE__*/React.createElement(TableToolbarSearch, {
|
168
167
|
size: "xl",
|
@@ -1,3 +1,8 @@
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
3
|
+
var _excluded = ["key", "value"];
|
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; }
|
5
|
+
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; }
|
1
6
|
/**
|
2
7
|
* Copyright IBM Corp. 2022, 2022
|
3
8
|
*
|
@@ -25,11 +30,12 @@ var FilterSummary = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
25
30
|
var tagFilters = filters.map(function (_ref2) {
|
26
31
|
var _renderLabel;
|
27
32
|
var key = _ref2.key,
|
28
|
-
value = _ref2.value
|
29
|
-
|
33
|
+
value = _ref2.value,
|
34
|
+
rest = _objectWithoutProperties(_ref2, _excluded);
|
35
|
+
return _objectSpread(_objectSpread({}, rest), {}, {
|
30
36
|
type: 'gray',
|
31
37
|
label: (_renderLabel = renderLabel === null || renderLabel === void 0 ? void 0 : renderLabel(key, value)) !== null && _renderLabel !== void 0 ? _renderLabel : "".concat(key, ": ").concat(value)
|
32
|
-
};
|
38
|
+
});
|
33
39
|
});
|
34
40
|
return /*#__PURE__*/React.createElement("div", {
|
35
41
|
ref: ref,
|
@@ -20,6 +20,7 @@ import { getDevtoolsProps } from '../../global/js/utils/devtools';
|
|
20
20
|
import { useClickOutside } from '../../global/js/hooks';
|
21
21
|
import { pkg } from '../../settings';
|
22
22
|
import { timeAgo } from './utils';
|
23
|
+
import { prepareProps } from '../../global/js/utils/props-helper';
|
23
24
|
import { NotificationsEmptyState } from '../EmptyStates/NotificationsEmptyState';
|
24
25
|
|
25
26
|
// Carbon and package components we use.
|
@@ -300,7 +301,7 @@ export var NotificationsPanel = /*#__PURE__*/React.forwardRef(function (_ref, re
|
|
300
301
|
}, notification.title), notification.description && notification.description.length && renderDescription(notification.id), notification.link && notification.link.text && notification.link.url && /*#__PURE__*/React.createElement(Link, _extends({
|
301
302
|
href: notification.link.url,
|
302
303
|
className: "".concat(blockClass, "__notifications-link")
|
303
|
-
}, notification.link
|
304
|
+
}, prepareProps({}, notification.link, ['text', 'url'])), notification.link.text)), /*#__PURE__*/React.createElement(IconButton, {
|
304
305
|
align: "left",
|
305
306
|
kind: "ghost",
|
306
307
|
size: "sm",
|
@@ -420,10 +421,7 @@ NotificationsPanel.propTypes = {
|
|
420
421
|
description: PropTypes.string,
|
421
422
|
link: PropTypes.shape({
|
422
423
|
url: PropTypes.string,
|
423
|
-
text: PropTypes.string
|
424
|
-
optional: PropTypes.shape({
|
425
|
-
// Add optional props here
|
426
|
-
})
|
424
|
+
text: PropTypes.string
|
427
425
|
}),
|
428
426
|
unread: PropTypes.bool,
|
429
427
|
onNotificationClick: PropTypes.func
|
@@ -2,7 +2,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
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; }
|
3
3
|
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; }
|
4
4
|
/**
|
5
|
-
* Copyright IBM Corp. 2020,
|
5
|
+
* Copyright IBM Corp. 2020, 2023
|
6
6
|
*
|
7
7
|
* This source code is licensed under the Apache-2.0 license found in the
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
@@ -65,11 +65,14 @@ export var utilCheckUpdateVerticalSpace = function utilCheckUpdateVerticalSpace(
|
|
65
65
|
var scrollableContainer = scrollableAncestor(headerRef.current);
|
66
66
|
|
67
67
|
/* istanbul ignore next */
|
68
|
-
var scrollableContainerTop = scrollableContainer ? scrollableContainer.
|
68
|
+
var scrollableContainerTop = scrollableContainer ? scrollableContainer.getBoundingClientRect().top : 0;
|
69
|
+
|
70
|
+
/* istanbul ignore next */
|
71
|
+
var offsetMeasuringTop = offsetTopMeasuringRef.current ? offsetTopMeasuringRef.current.getBoundingClientRect().top : 0;
|
69
72
|
|
70
73
|
// The header offset calculation is either going to work out at 0 if we have no gap between scrolling container
|
71
74
|
// top and the measuring ref top, or the difference between. It does not change on scroll or resize.
|
72
|
-
update.headerOffset =
|
75
|
+
update.headerOffset = offsetMeasuringTop - scrollableContainerTop;
|
73
76
|
|
74
77
|
/* istanbul ignore next */
|
75
78
|
update.breadcrumbRowHeight = breadcrumbRowEl ? breadcrumbRowEl.clientHeight : 0;
|
@@ -127,6 +130,10 @@ export var utilCheckUpdateVerticalSpace = function utilCheckUpdateVerticalSpace(
|
|
127
130
|
update.pageActionsSpaceAbove = titleRowEl.clientHeight - pageActionsEl.clientHeight + update.titleRowSpaceAbove - (isNaN(val) ? 0 : val);
|
128
131
|
}
|
129
132
|
}
|
133
|
+
if (!hasActionBar && pageActionsEl) {
|
134
|
+
// adjust headerTopValue when there are no page actions or action bar items (margin above title row)
|
135
|
+
update.headerTopValue -= update.titleRowSpaceAbove;
|
136
|
+
}
|
130
137
|
return _objectSpread(_objectSpread({}, previous), update);
|
131
138
|
});
|
132
139
|
};
|
@@ -288,12 +288,14 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
288
288
|
if (includeOverlay && open) {
|
289
289
|
bodyElement.style.overflow = 'hidden';
|
290
290
|
} else if (includeOverlay && !open) {
|
291
|
-
bodyElement.style.overflow = '
|
291
|
+
bodyElement.style.overflow = '';
|
292
292
|
}
|
293
293
|
if (includeOverlay && !preventCloseOnClickOutside) {
|
294
294
|
document.addEventListener('click', handleOutsideClick);
|
295
295
|
}
|
296
296
|
return function () {
|
297
|
+
var bodyElement = document.body;
|
298
|
+
bodyElement.style.overflow = '';
|
297
299
|
document.removeEventListener('click', handleOutsideClick);
|
298
300
|
};
|
299
301
|
}, [includeOverlay, onRequestClose, open, preventCloseOnClickOutside, ref, onUnmount]);
|
@@ -23,7 +23,7 @@ import { TagSetModal } from './TagSetModal';
|
|
23
23
|
import { Tag } from '@carbon/react';
|
24
24
|
import { useResizeObserver } from '../../global/js/hooks/useResizeObserver';
|
25
25
|
import { getDevtoolsProps } from '../../global/js/utils/devtools';
|
26
|
-
import {
|
26
|
+
import { isRequiredIf } from '../../global/js/utils/props-helper';
|
27
27
|
import { pkg } from '../../settings';
|
28
28
|
var componentName = 'TagSet';
|
29
29
|
var blockClass = "".concat(pkg.prefix, "--tag-set");
|
@@ -107,8 +107,7 @@ export var TagSet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
107
107
|
}
|
108
108
|
}, /*#__PURE__*/React.createElement(Tag, _extends({}, other, {
|
109
109
|
// ensure id is not duplicated
|
110
|
-
"data-original-id": id
|
111
|
-
filter: false
|
110
|
+
"data-original-id": id
|
112
111
|
}), label));
|
113
112
|
}) : []);
|
114
113
|
setSizingTags(newSizingTags);
|
@@ -119,7 +118,6 @@ export var TagSet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
119
118
|
var label = _ref3.label,
|
120
119
|
other = _objectWithoutProperties(_ref3, _excluded3);
|
121
120
|
return /*#__PURE__*/React.createElement(Tag, _extends({}, other, {
|
122
|
-
filter: false,
|
123
121
|
key: "displayed-tag-".concat(index)
|
124
122
|
}), label);
|
125
123
|
}) : [];
|
@@ -306,12 +304,10 @@ TagSet.propTypes = {
|
|
306
304
|
* with properties: **label**\* (required) to supply the tag content, and
|
307
305
|
* other properties will be passed to the Carbon Tag component, such as
|
308
306
|
* **type**, **disabled**, **ref**, **className** , and any other Tag props.
|
309
|
-
* NOTE: **filter** is not supported. Any other fields in the object will be passed through to the HTML element
|
310
|
-
* as HTML attributes.
|
311
307
|
*
|
312
308
|
* See https://react.carbondesignsystem.com/?path=/docs/components-tag--default
|
313
309
|
*/
|
314
|
-
tags: PropTypes.arrayOf(PropTypes.shape(_objectSpread(_objectSpread({},
|
310
|
+
tags: PropTypes.arrayOf(PropTypes.shape(_objectSpread(_objectSpread({}, Tag.propTypes), {}, {
|
315
311
|
label: PropTypes.string.isRequired,
|
316
312
|
// we duplicate this prop to improve the DocGen
|
317
313
|
type: PropTypes.oneOf(tagTypes)
|