@carbon/ibm-products 2.0.0-rc.25 → 2.0.0-rc.26

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. package/README.md +10 -4
  2. package/css/index-full-carbon.css +69 -97
  3. package/css/index-full-carbon.css.map +1 -1
  4. package/css/index-full-carbon.min.css +3 -3
  5. package/css/index-full-carbon.min.css.map +1 -1
  6. package/css/index-without-carbon-released-only.css +9 -88
  7. package/css/index-without-carbon-released-only.css.map +1 -1
  8. package/css/index-without-carbon-released-only.min.css +2 -2
  9. package/css/index-without-carbon-released-only.min.css.map +1 -1
  10. package/css/index-without-carbon.css +69 -97
  11. package/css/index-without-carbon.css.map +1 -1
  12. package/css/index-without-carbon.min.css +3 -3
  13. package/css/index-without-carbon.min.css.map +1 -1
  14. package/css/index.css +69 -97
  15. package/css/index.css.map +1 -1
  16. package/css/index.min.css +3 -3
  17. package/css/index.min.css.map +1 -1
  18. package/es/components/AddSelect/AddSelectBody.js +1 -0
  19. package/es/components/AddSelect/AddSelectFormControl.js +92 -0
  20. package/es/components/AddSelect/AddSelectList.js +26 -195
  21. package/es/components/AddSelect/AddSelectRow.js +220 -0
  22. package/es/components/AddSelect/hooks/useFocus.js +35 -0
  23. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +1 -1
  24. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +15 -65
  25. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +5 -2
  26. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +112 -0
  27. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +1 -0
  28. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +29 -23
  29. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +1 -0
  30. package/es/components/Datagrid/index.js +7 -7
  31. package/es/components/Datagrid/useInfiniteScroll.js +5 -1
  32. package/es/components/Datagrid/useOnRowClick.js +3 -3
  33. package/es/components/Datagrid/useSortableColumns.js +7 -5
  34. package/es/components/Datagrid/utils/getAutoSizedColumnWidth.js +29 -0
  35. package/es/components/ExampleComponent/ExampleComponent.js +39 -5
  36. package/es/components/ExampleComponent/useExample.js +51 -0
  37. package/es/components/InlineEditV1/InlineEditV1.js +15 -20
  38. package/es/components/InlineEditV2/InlineEditV2.js +21 -31
  39. package/es/components/index.js +1 -1
  40. package/es/global/js/package-settings.js +24 -3
  41. package/es/global/js/utils/story-helper.js +9 -0
  42. package/es/global/js/utils/test-helper.js +38 -6
  43. package/lib/components/AddSelect/AddSelectBody.js +1 -0
  44. package/lib/components/AddSelect/AddSelectFormControl.js +110 -0
  45. package/lib/components/AddSelect/AddSelectList.js +29 -203
  46. package/lib/components/AddSelect/AddSelectRow.js +247 -0
  47. package/lib/components/AddSelect/hooks/useFocus.js +46 -0
  48. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +1 -1
  49. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +16 -69
  50. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +5 -2
  51. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +132 -0
  52. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +1 -0
  53. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +23 -16
  54. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +1 -0
  55. package/lib/components/Datagrid/index.js +9 -1
  56. package/lib/components/Datagrid/useInfiniteScroll.js +5 -0
  57. package/lib/components/Datagrid/useOnRowClick.js +3 -3
  58. package/lib/components/Datagrid/useSortableColumns.js +7 -5
  59. package/lib/components/Datagrid/utils/getAutoSizedColumnWidth.js +40 -0
  60. package/lib/components/ExampleComponent/ExampleComponent.js +47 -4
  61. package/lib/components/ExampleComponent/useExample.js +63 -0
  62. package/lib/components/InlineEditV1/InlineEditV1.js +14 -19
  63. package/lib/components/InlineEditV2/InlineEditV2.js +20 -30
  64. package/lib/components/index.js +6 -0
  65. package/lib/global/js/package-settings.js +24 -3
  66. package/lib/global/js/utils/story-helper.js +13 -2
  67. package/lib/global/js/utils/test-helper.js +42 -8
  68. package/package.json +2 -2
  69. package/scss/components/AddSelect/_add-select.scss +4 -16
  70. package/scss/components/Datagrid/styles/addons/_CustomizeColumnsTearsheet.scss +15 -2
  71. package/scss/components/Datagrid/styles/addons/_RowSizeDropdown.scss +18 -6
  72. package/scss/components/InlineEditV1/_inline-edit-v1.scss +5 -89
  73. package/scss/components/InlineEditV2/_inline-edit-v2.scss +42 -3
  74. package/scss/components/SidePanel/_side-panel.scss +2 -1
@@ -0,0 +1,247 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.AddSelectRow = void 0;
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
16
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
17
+
18
+ var _react = _interopRequireWildcard(require("react"));
19
+
20
+ var _react2 = require("@carbon/react");
21
+
22
+ var _icons = require("@carbon/react/icons");
23
+
24
+ var _propTypes = _interopRequireDefault(require("prop-types"));
25
+
26
+ var _classnames = _interopRequireDefault(require("classnames"));
27
+
28
+ var _settings = require("../../settings");
29
+
30
+ var _AddSelectFormControl = require("./AddSelectFormControl");
31
+
32
+ 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); }
33
+
34
+ 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; }
35
+
36
+ //
37
+ // Copyright IBM Corp. 2022, 2022
38
+ //
39
+ // This source code is licensed under the Apache-2.0 license found in the
40
+ // LICENSE file in the root directory of this source tree.
41
+ //
42
+ var blockClass = "".concat(_settings.pkg.prefix, "--add-select__selections");
43
+ var componentName = 'AddSelectList';
44
+
45
+ var AddSelectRow = function AddSelectRow(_ref) {
46
+ var _modifiers$options, _cx;
47
+
48
+ var appliedModifiers = _ref.appliedModifiers,
49
+ displayMetalPanel = _ref.displayMetalPanel,
50
+ index = _ref.index,
51
+ focus = _ref.focus,
52
+ item = _ref.item,
53
+ metaIconDescription = _ref.metaIconDescription,
54
+ modifiers = _ref.modifiers,
55
+ multi = _ref.multi,
56
+ multiSelection = _ref.multiSelection,
57
+ navIconDescription = _ref.navIconDescription,
58
+ parentId = _ref.parentId,
59
+ setAppliedModifiers = _ref.setAppliedModifiers,
60
+ setDisplayMetaPanel = _ref.setDisplayMetaPanel,
61
+ setFocus = _ref.setFocus,
62
+ setMultiSelection = _ref.setMultiSelection,
63
+ setParentSelected = _ref.setParentSelected,
64
+ setSingleSelection = _ref.setSingleSelection,
65
+ singleSelection = _ref.singleSelection;
66
+ var ref = (0, _react.useRef)(null);
67
+ (0, _react.useEffect)(function () {
68
+ if (focus === index) {
69
+ ref.current.focus();
70
+ }
71
+ }, [focus, index]);
72
+
73
+ var isSelected = function isSelected() {
74
+ if (multi) {
75
+ return multiSelection.includes(item.id);
76
+ }
77
+
78
+ return item.id === singleSelection;
79
+ };
80
+
81
+ var getTabIndex = function getTabIndex() {
82
+ // on initial load make the first item tabbable
83
+ if (index === 0 && focus === '') {
84
+ return 0;
85
+ } // make it so only the last focused item is tabbable
86
+
87
+
88
+ if (focus === index && focus !== '') {
89
+ return 0;
90
+ } // make unfocused items un-tabbable
91
+
92
+
93
+ return -1;
94
+ };
95
+
96
+ var focusHandler = (0, _react.useCallback)(function (reset) {
97
+ setFocus(reset ? '' : index);
98
+ }, [setFocus, index]);
99
+
100
+ var handleSingleSelection = function handleSingleSelection() {
101
+ setSingleSelection(item.id);
102
+ };
103
+
104
+ var onSelectKeyDown = function onSelectKeyDown(_ref2) {
105
+ var key = _ref2.key;
106
+
107
+ if (key === 'Enter' || key === ' ') {
108
+ if (multi) {
109
+ handleMultiSelection();
110
+ } else {
111
+ handleSingleSelection();
112
+ }
113
+ } else if (key === 'ArrowRight' && item.children) {
114
+ onNavigateItem();
115
+ }
116
+ };
117
+
118
+ var handleMultiSelection = function handleMultiSelection() {
119
+ var checked = isSelected();
120
+
121
+ if (!checked) {
122
+ var newValues = [].concat((0, _toConsumableArray2.default)(multiSelection), [item.id]);
123
+ setMultiSelection(newValues);
124
+ } else {
125
+ var _newValues = multiSelection.filter(function (v) {
126
+ return v !== item.id;
127
+ });
128
+
129
+ setMultiSelection(_newValues);
130
+ }
131
+ };
132
+
133
+ var onNavigateItem = function onNavigateItem() {
134
+ focusHandler(true);
135
+ setParentSelected(item.id, item.title, parentId);
136
+ };
137
+
138
+ var modifierHandler = function modifierHandler(id, selectedItem) {
139
+ var modifiersClone = (0, _toConsumableArray2.default)(appliedModifiers);
140
+ var modifierIdx = modifiersClone.findIndex(function (item) {
141
+ return item.id === id;
142
+ });
143
+ modifiersClone[modifierIdx] = (0, _defineProperty2.default)({
144
+ id: id
145
+ }, modifiers.id, selectedItem);
146
+ setAppliedModifiers(modifiersClone);
147
+ };
148
+
149
+ var metaPanelHandler = function metaPanelHandler() {
150
+ if (item.meta) {
151
+ setDisplayMetaPanel(item);
152
+ }
153
+ };
154
+
155
+ var isInMetaPanel = function isInMetaPanel(id) {
156
+ return id === (displayMetalPanel === null || displayMetalPanel === void 0 ? void 0 : displayMetalPanel.id);
157
+ };
158
+
159
+ var hasModifiers = (modifiers === null || modifiers === void 0 ? void 0 : (_modifiers$options = modifiers.options) === null || _modifiers$options === void 0 ? void 0 : _modifiers$options.length) > 0;
160
+ var tabIndex = getTabIndex();
161
+ var selected = isSelected();
162
+ return /*#__PURE__*/_react.default.createElement("div", {
163
+ className: (0, _classnames.default)("".concat(blockClass, "-row"), (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "-row--selected"), isSelected(item.id)), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "-row-meta--selected"), isInMetaPanel(item.id)), _cx)),
164
+ onKeyDown: onSelectKeyDown,
165
+ tabIndex: tabIndex,
166
+ ref: ref,
167
+ role: "row"
168
+ }, /*#__PURE__*/_react.default.createElement("div", {
169
+ className: "".concat(blockClass, "-cell")
170
+ }, /*#__PURE__*/_react.default.createElement("div", {
171
+ className: "".concat(blockClass, "-cell-wrapper")
172
+ }, multi ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_AddSelectFormControl.AddSelectFormControl, {
173
+ type: "checkbox",
174
+ item: item,
175
+ selected: selected,
176
+ onClick: handleMultiSelection
177
+ }), hasModifiers && /*#__PURE__*/_react.default.createElement(_react2.Dropdown, {
178
+ id: "add-select-modifier-".concat(item.id),
179
+ type: "inline",
180
+ items: modifiers.options,
181
+ label: modifiers.label,
182
+ disabled: !isSelected(item.id),
183
+ className: "".concat(blockClass, "-dropdown"),
184
+ initialSelectedItem: item[modifiers.id],
185
+ onChange: function onChange(_ref3) {
186
+ var selectedItem = _ref3.selectedItem;
187
+ return modifierHandler(item.id, selectedItem);
188
+ }
189
+ })) : /*#__PURE__*/_react.default.createElement(_AddSelectFormControl.AddSelectFormControl, {
190
+ type: "radio",
191
+ item: item,
192
+ selected: selected,
193
+ onClick: handleSingleSelection
194
+ }), item.children && /*#__PURE__*/_react.default.createElement(_react2.Button, {
195
+ className: "".concat(blockClass, "-view-children"),
196
+ renderIcon: function renderIcon(props) {
197
+ return /*#__PURE__*/_react.default.createElement(_icons.ChevronRight, (0, _extends2.default)({
198
+ size: 16
199
+ }, props));
200
+ },
201
+ iconDescription: navIconDescription,
202
+ tooltipPosition: "left",
203
+ tooltipAlignment: "center",
204
+ hasIconOnly: true,
205
+ onClick: onNavigateItem,
206
+ kind: "ghost",
207
+ size: "sm"
208
+ }), item.meta && /*#__PURE__*/_react.default.createElement(_react2.Button, {
209
+ className: "".concat(blockClass, "-view-meta"),
210
+ renderIcon: function renderIcon(props) {
211
+ return /*#__PURE__*/_react.default.createElement(_icons.View, (0, _extends2.default)({
212
+ size: 16
213
+ }, props));
214
+ },
215
+ iconDescription: metaIconDescription,
216
+ tooltipPosition: "left",
217
+ tooltipAlignment: "center",
218
+ hasIconOnly: true,
219
+ kind: "ghost",
220
+ size: "sm",
221
+ onClick: metaPanelHandler
222
+ }))));
223
+ };
224
+
225
+ exports.AddSelectRow = AddSelectRow;
226
+ AddSelectRow.propTypes = {
227
+ appliedModifiers: _propTypes.default.array,
228
+ displayMetalPanel: _propTypes.default.object,
229
+ filteredItems: _propTypes.default.array,
230
+ focus: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
231
+ index: _propTypes.default.number,
232
+ item: _propTypes.default.object,
233
+ metaIconDescription: _propTypes.default.string,
234
+ modifiers: _propTypes.default.object,
235
+ multi: _propTypes.default.bool,
236
+ multiSelection: _propTypes.default.array,
237
+ navIconDescription: _propTypes.default.string,
238
+ parentId: _propTypes.default.string,
239
+ setAppliedModifiers: _propTypes.default.func,
240
+ setDisplayMetaPanel: _propTypes.default.func,
241
+ setFocus: _propTypes.default.func,
242
+ setMultiSelection: _propTypes.default.func,
243
+ setParentSelected: _propTypes.default.func,
244
+ setSingleSelection: _propTypes.default.func,
245
+ singleSelection: _propTypes.default.string
246
+ };
247
+ AddSelectRow.displayName = componentName;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+
12
+ var _react = require("react");
13
+
14
+ var useFocus = function useFocus(size) {
15
+ // the state should represent the location of the item in the array
16
+ // make it '' initially so that it doesn't automatically focus the first item
17
+ var _useState = (0, _react.useState)(''),
18
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
19
+ currentFocus = _useState2[0],
20
+ setCurrentFocus = _useState2[1];
21
+
22
+ var handleKeyDown = (0, _react.useCallback)(function (e) {
23
+ var focus = currentFocus === '' ? 0 : currentFocus;
24
+
25
+ if (e.keyCode === 40) {
26
+ // Down arrow
27
+ e.preventDefault();
28
+ setCurrentFocus(focus === size - 1 ? 0 : focus + 1);
29
+ } else if (e.keyCode === 38) {
30
+ // Up arrow
31
+ e.preventDefault();
32
+ setCurrentFocus(focus === 0 ? size - 1 : focus - 1);
33
+ }
34
+ }, [size, currentFocus, setCurrentFocus]);
35
+ (0, _react.useEffect)(function () {
36
+ var el = document.querySelector('#add-select-focus');
37
+ el.addEventListener('keydown', handleKeyDown, false);
38
+ return function () {
39
+ el.removeEventListener('keydown', handleKeyDown, false);
40
+ };
41
+ }, [handleKeyDown]);
42
+ return [currentFocus, setCurrentFocus];
43
+ };
44
+
45
+ var _default = useFocus;
46
+ exports.default = _default;
@@ -139,7 +139,7 @@ var DatagridBatchActionsToolbar = function DatagridBatchActionsToolbar(datagridS
139
139
  setGlobalFilter(null);
140
140
  }
141
141
  }, !displayAllInMenu && toolbarBatchActions && (toolbarBatchActions === null || toolbarBatchActions === void 0 ? void 0 : toolbarBatchActions.map(function (batchAction, index) {
142
- if (index < 2 && toolbarBatchActions.length > 3 || index < 3 && toolbarBatchActions.length === 3) {
142
+ if (index < 2 && toolbarBatchActions.length > 3 || index < 3 && toolbarBatchActions.length <= 3) {
143
143
  return /*#__PURE__*/_react.default.createElement(_react2.TableBatchAction, {
144
144
  key: "".concat(batchAction.label, "-").concat(index),
145
145
  renderIcon: batchAction.renderIcon,
@@ -25,12 +25,10 @@ var _immutabilityHelper = _interopRequireDefault(require("immutability-helper"))
25
25
 
26
26
  var _settings = require("../../../../../settings");
27
27
 
28
- var _DraggableElement = _interopRequireDefault(require("../../DraggableElement"));
29
-
30
- var _common = require("./common");
31
-
32
28
  var _classnames = _interopRequireDefault(require("classnames"));
33
29
 
30
+ var _DraggableItemsList = require("./DraggableItemsList");
31
+
34
32
  /**
35
33
  * Copyright IBM Corp. 2022, 2022
36
34
  *
@@ -61,7 +59,8 @@ var Columns = function Columns(_ref) {
61
59
  onSelectColumn = _ref.onSelectColumn,
62
60
  assistiveTextInstructionsLabel = _ref.assistiveTextInstructionsLabel,
63
61
  assistiveTextDisabledInstructionsLabel = _ref.assistiveTextDisabledInstructionsLabel,
64
- selectAllLabel = _ref.selectAllLabel;
62
+ selectAllLabel = _ref.selectAllLabel,
63
+ isTableSortable = _ref.isTableSortable;
65
64
 
66
65
  var _React$useState = _react.default.useState(''),
67
66
  _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
@@ -117,70 +116,17 @@ var Columns = function Columns(_ref) {
117
116
  },
118
117
  id: "".concat(blockClass, "__customization-column-select-all"),
119
118
  labelText: selectAllLabel
120
- })), columns // hide the columns without Header, e.g the sticky actions, spacer
121
- .filter(function (colDef) {
122
- return !!colDef.Header.props && !!colDef.Header.props.title;
123
- }).filter(function (colDef) {
124
- return !colDef.isAction;
125
- }).filter(function (colDef) {
126
- return filterString.length === 0 || colDef.Header.props.title.toLowerCase().includes(filterString);
127
- }).map(function (colDef, i) {
128
- var searchString = new RegExp('(' + filterString + ')');
129
- var res = filterString.length ? colDef.Header.props.title.toLowerCase().split(searchString) : null;
130
- var firstWord = res !== null ? res[0] === '' ? res[1].charAt(0).toUpperCase() + res[1].substring(1) : res[0].charAt(0).toUpperCase() + res[0].substring(1) : null;
131
- var highlightedText = res !== null ? res[0] === '' ? "<strong>".concat(firstWord, "</strong>") + res[2] : firstWord + "<strong>".concat(res[1], "</strong>") + res[2] : colDef.Header.props.title;
132
- var isFrozenColumn = !!colDef.sticky;
133
-
134
- var listContents = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_react2.Checkbox, {
135
- className: (0, _classnames.default)("".concat(blockClass, "__customize-columns-checkbox-wrapper"), "".concat(blockClass, "__customize-columns-checkbox")),
136
- checked: (0, _common.isColumnVisible)(colDef),
137
- disabled: isFrozenColumn,
138
- onChange: function onChange(_, _ref2) {
139
- var checked = _ref2.checked;
140
- return onSelectColumn(colDef, checked);
141
- },
142
- id: "".concat(blockClass, "__customization-column-").concat(colDef.id),
143
- labelText: colDef.Header.props.title,
144
- title: colDef.Header.props.title,
145
- hideLabel: true
146
- }), /*#__PURE__*/_react.default.createElement("div", {
147
- dangerouslySetInnerHTML: {
148
- __html: highlightedText
149
- }
150
- }));
151
-
152
- return /*#__PURE__*/_react.default.createElement(_DraggableElement.default, {
153
- key: colDef.id,
154
- index: i,
155
- listData: columns,
156
- setListData: setColumnsObject,
157
- id: "dnd-datagrid-columns-".concat(colDef.id),
158
- type: "column-customization",
159
- disabled: filterString.length > 0 || isFrozenColumn,
160
- ariaLabel: colDef.Header.props.title,
161
- onGrab: setAriaRegionText,
162
- isFocused: focusIndex === i,
163
- isSticky: isFrozenColumn,
164
- moveElement: moveElement,
165
- onArrowKeyDown: function onArrowKeyDown(e, isGrabbed, currentIndex) {
166
- if (isGrabbed) {
167
- var _columns$nextIndex;
168
-
169
- var nextIndex = getNextIndex(columns, currentIndex, e.key);
170
- e.preventDefault();
171
- e.stopPropagation();
172
-
173
- if (nextIndex >= 0 && !((_columns$nextIndex = columns[nextIndex]) !== null && _columns$nextIndex !== void 0 && _columns$nextIndex.sticky)) {
174
- setFocusIndex(nextIndex);
175
- moveElement(currentIndex, nextIndex);
176
- e.target.scrollIntoView({
177
- block: 'center'
178
- });
179
- }
180
- }
181
- },
182
- selected: (0, _common.isColumnVisible)(colDef)
183
- }, listContents);
119
+ })), /*#__PURE__*/_react.default.createElement(_DraggableItemsList.DraggableItemsList, {
120
+ columns: columns,
121
+ filterString: filterString,
122
+ focusIndex: focusIndex,
123
+ getNextIndex: getNextIndex,
124
+ isTableSortable: isTableSortable,
125
+ moveElement: moveElement,
126
+ onSelectColumn: onSelectColumn,
127
+ setAriaRegionText: setAriaRegionText,
128
+ setColumnsObject: setColumnsObject,
129
+ setFocusIndex: setFocusIndex
184
130
  }))));
185
131
  };
186
132
 
@@ -192,6 +138,7 @@ Columns.propTypes = {
192
138
  filterString: _propTypes.default.string.isRequired,
193
139
  getVisibleColumnsCount: _propTypes.default.func.isRequired,
194
140
  instructionsLabel: _propTypes.default.string,
141
+ isTableSortable: _propTypes.default.bool.isRequired,
195
142
  onSelectColumn: _propTypes.default.func.isRequired,
196
143
  selectAllLabel: _propTypes.default.string,
197
144
  setColumnStatus: _propTypes.default.func,
@@ -60,7 +60,8 @@ var CustomizeColumnsTearsheet = function CustomizeColumnsTearsheet(_ref) {
60
60
  _ref$assistiveTextDis = _ref.assistiveTextDisabledInstructionsLabel,
61
61
  assistiveTextDisabledInstructionsLabel = _ref$assistiveTextDis === void 0 ? 'Reordering columns are disabled because they are filtered currently.' : _ref$assistiveTextDis,
62
62
  _ref$selectAllLabel = _ref.selectAllLabel,
63
- selectAllLabel = _ref$selectAllLabel === void 0 ? 'Column name' : _ref$selectAllLabel;
63
+ selectAllLabel = _ref$selectAllLabel === void 0 ? 'Column name' : _ref$selectAllLabel,
64
+ isTableSortable = _ref.isTableSortable;
64
65
 
65
66
  var _useState = (0, _react.useState)(''),
66
67
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -183,7 +184,8 @@ var CustomizeColumnsTearsheet = function CustomizeColumnsTearsheet(_ref) {
183
184
  setColumnObjects(cols);
184
185
  setDirty();
185
186
  },
186
- selectAllLabel: selectAllLabel
187
+ selectAllLabel: selectAllLabel,
188
+ isTableSortable: isTableSortable
187
189
  }));
188
190
  };
189
191
 
@@ -195,6 +197,7 @@ CustomizeColumnsTearsheet.propTypes = {
195
197
  findColumnPlaceholderLabel: _propTypes.default.string,
196
198
  instructionsLabel: _propTypes.default.string,
197
199
  isOpen: _propTypes.default.bool.isRequired,
200
+ isTableSortable: _propTypes.default.bool.isRequired,
198
201
  onSaveColumnPrefs: _propTypes.default.func.isRequired,
199
202
  originalColumnDefinitions: _propTypes.default.array.isRequired,
200
203
  primaryButtonTextLabel: _propTypes.default.string,
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.DraggableItemsList = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _propTypes = require("prop-types");
13
+
14
+ var _react2 = require("@carbon/react");
15
+
16
+ var _common = require("./common");
17
+
18
+ var _DraggableElement = _interopRequireDefault(require("../../DraggableElement"));
19
+
20
+ var _settings = require("../../../../../settings");
21
+
22
+ /**
23
+ * Copyright IBM Corp. 2023, 2023
24
+ *
25
+ * This source code is licensed under the Apache-2.0 license found in the
26
+ * LICENSE file in the root directory of this source tree.
27
+ */
28
+ var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
29
+
30
+ var DraggableItemsList = function DraggableItemsList(_ref) {
31
+ var columns = _ref.columns,
32
+ filterString = _ref.filterString,
33
+ focusIndex = _ref.focusIndex,
34
+ getNextIndex = _ref.getNextIndex,
35
+ isTableSortable = _ref.isTableSortable,
36
+ moveElement = _ref.moveElement,
37
+ onSelectColumn = _ref.onSelectColumn,
38
+ setAriaRegionText = _ref.setAriaRegionText,
39
+ setColumnsObject = _ref.setColumnsObject,
40
+ setFocusIndex = _ref.setFocusIndex;
41
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, columns // hide the columns without Header, e.g the sticky actions, spacer
42
+ .filter(function (colDef) {
43
+ var _colDef$Header$props$, _colDef$Header$props;
44
+
45
+ var sortableTitle = isTableSortable && ((_colDef$Header$props$ = colDef.Header().props.children.props) === null || _colDef$Header$props$ === void 0 ? void 0 : _colDef$Header$props$.title);
46
+ return !!colDef.Header.props && !!((_colDef$Header$props = colDef.Header.props) !== null && _colDef$Header$props !== void 0 && _colDef$Header$props.title) || isTableSortable && !!sortableTitle;
47
+ }).filter(function (colDef) {
48
+ return !colDef.isAction;
49
+ }).filter(function (colDef) {
50
+ var _colDef$Header$props$2, _colDef$Header$props2, _colDef$Header$props3;
51
+
52
+ var sortableTitle = isTableSortable && ((_colDef$Header$props$2 = colDef.Header().props.children.props) === null || _colDef$Header$props$2 === void 0 ? void 0 : _colDef$Header$props$2.title);
53
+ return filterString.length === 0 || (isTableSortable ? sortableTitle === null || sortableTitle === void 0 ? void 0 : sortableTitle.toLowerCase().includes(filterString) : (_colDef$Header$props2 = colDef.Header.props) === null || _colDef$Header$props2 === void 0 ? void 0 : (_colDef$Header$props3 = _colDef$Header$props2.title) === null || _colDef$Header$props3 === void 0 ? void 0 : _colDef$Header$props3.toLowerCase().includes(filterString)) && colDef.id !== 'spacer';
54
+ }).map(function (colDef, i) {
55
+ var _colDef$Header$props$3, _colDef$Header$props4, _colDef$Header$props5, _colDef$Header$props6, _colDef$Header$props7;
56
+
57
+ var isSortableColumn = !!colDef.canSort && !!isTableSortable;
58
+ var sortableTitle = isTableSortable && ((_colDef$Header$props$3 = colDef.Header().props.children.props) === null || _colDef$Header$props$3 === void 0 ? void 0 : _colDef$Header$props$3.title);
59
+ var searchString = new RegExp('(' + filterString + ')');
60
+ var res = filterString.length ? isSortableColumn ? sortableTitle.toLowerCase().split(searchString) : colDef.Header.props.title.toLowerCase().split(searchString) : null;
61
+ var firstWord = res !== null ? res[0] === '' ? res[1].charAt(0).toUpperCase() + res[1].substring(1) : res[0].charAt(0).toUpperCase() + res[0].substring(1) : null;
62
+ var highlightedText = res !== null ? res[0] === '' ? "<strong>".concat(firstWord, "</strong>") + res[2] : firstWord + "<strong>".concat(res[1], "</strong>") + res[2] : isSortableColumn ? sortableTitle : (_colDef$Header$props4 = colDef.Header.props) === null || _colDef$Header$props4 === void 0 ? void 0 : _colDef$Header$props4.title;
63
+ var isFrozenColumn = !!colDef.sticky;
64
+
65
+ var listContents = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_react2.Checkbox, {
66
+ wrapperClassName: "".concat(blockClass, "__customize-columns-checkbox-wrapper"),
67
+ checked: (0, _common.isColumnVisible)(colDef),
68
+ disabled: isFrozenColumn,
69
+ onChange: function onChange(_, _ref2) {
70
+ var checked = _ref2.checked;
71
+ return onSelectColumn(colDef, checked);
72
+ },
73
+ id: "".concat(blockClass, "__customization-column-").concat(colDef.id),
74
+ labelText: isSortableColumn ? sortableTitle : (_colDef$Header$props5 = colDef.Header.props) === null || _colDef$Header$props5 === void 0 ? void 0 : _colDef$Header$props5.title,
75
+ title: isSortableColumn ? sortableTitle : (_colDef$Header$props6 = colDef.Header.props) === null || _colDef$Header$props6 === void 0 ? void 0 : _colDef$Header$props6.title,
76
+ className: "".concat(blockClass, "__customize-columns-checkbox"),
77
+ hideLabel: true
78
+ }), /*#__PURE__*/_react.default.createElement("div", {
79
+ dangerouslySetInnerHTML: {
80
+ __html: highlightedText
81
+ },
82
+ className: "".concat(blockClass, "__customize-columns-checkbox-visible-label")
83
+ }));
84
+
85
+ return /*#__PURE__*/_react.default.createElement(_DraggableElement.default, {
86
+ key: colDef.id,
87
+ index: i,
88
+ listData: columns,
89
+ setListData: setColumnsObject,
90
+ id: "dnd-datagrid-columns-".concat(colDef.id),
91
+ type: "column-customization",
92
+ disabled: filterString.length > 0 || isFrozenColumn,
93
+ ariaLabel: isSortableColumn ? sortableTitle : (_colDef$Header$props7 = colDef.Header.props) === null || _colDef$Header$props7 === void 0 ? void 0 : _colDef$Header$props7.title,
94
+ onGrab: setAriaRegionText,
95
+ isFocused: focusIndex === i,
96
+ moveElement: moveElement,
97
+ onArrowKeyDown: function onArrowKeyDown(e, isGrabbed, currentIndex) {
98
+ if (isGrabbed) {
99
+ var _columns$nextIndex;
100
+
101
+ var nextIndex = getNextIndex(columns, currentIndex, e.key);
102
+ e.preventDefault();
103
+ e.stopPropagation();
104
+
105
+ if (nextIndex >= 0 && !((_columns$nextIndex = columns[nextIndex]) !== null && _columns$nextIndex !== void 0 && _columns$nextIndex.sticky)) {
106
+ setFocusIndex(nextIndex);
107
+ moveElement(currentIndex, nextIndex);
108
+ e.target.scrollIntoView({
109
+ block: 'center'
110
+ });
111
+ }
112
+ }
113
+ },
114
+ isSticky: isFrozenColumn,
115
+ selected: (0, _common.isColumnVisible)(colDef)
116
+ }, listContents);
117
+ }));
118
+ };
119
+
120
+ exports.DraggableItemsList = DraggableItemsList;
121
+ DraggableItemsList.propTypes = {
122
+ columns: _propTypes.PropTypes.array.isRequired,
123
+ filterString: _propTypes.PropTypes.string.isRequired,
124
+ focusIndex: _propTypes.PropTypes.number.isRequired,
125
+ getNextIndex: _propTypes.PropTypes.func.isRequired,
126
+ isTableSortable: _propTypes.PropTypes.bool,
127
+ moveElement: _propTypes.PropTypes.func.isRequired,
128
+ onSelectColumn: _propTypes.PropTypes.func.isRequired,
129
+ setAriaRegionText: _propTypes.PropTypes.func.isRequired,
130
+ setColumnsObject: _propTypes.PropTypes.func.isRequired,
131
+ setFocusIndex: _propTypes.PropTypes.func.isRequired
132
+ };
@@ -35,6 +35,7 @@ var TearsheetWrapper = function TearsheetWrapper(_ref) {
35
35
  rest = (0, _objectWithoutProperties2.default)(_instance$customizeCo, _excluded);
36
36
  return /*#__PURE__*/React.createElement(_CustomizeColumnsTearsheet.default, (0, _extends2.default)({}, rest, labels, {
37
37
  isOpen: isTearsheetOpen,
38
+ isTableSortable: instance === null || instance === void 0 ? void 0 : instance.isTableSortable,
38
39
  setIsTearsheetOpen: setIsTearsheetOpen,
39
40
  columnDefinitions: instance.allColumns,
40
41
  originalColumnDefinitions: instance.columns,
@@ -11,8 +11,6 @@ exports.default = void 0;
11
11
 
12
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
13
 
14
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
-
16
14
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
15
 
18
16
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
@@ -31,7 +29,7 @@ var _RowSizeRadioGroup = _interopRequireDefault(require("./RowSizeRadioGroup"));
31
29
 
32
30
  var _settings = require("../../../../../settings");
33
31
 
34
- var _excluded = ["legendText"];
32
+ var _excluded = ["align", "legendText"];
35
33
 
36
34
  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); }
37
35
 
@@ -40,7 +38,9 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
40
38
  var blockClass = "".concat(_settings.pkg.prefix, "--datagrid");
41
39
 
42
40
  var RowSizeDropdown = function RowSizeDropdown(_ref) {
43
- var _ref$legendText = _ref.legendText,
41
+ var _ref$align = _ref.align,
42
+ align = _ref$align === void 0 ? 'bottom' : _ref$align,
43
+ _ref$legendText = _ref.legendText,
44
44
  legendText = _ref$legendText === void 0 ? 'Row height' : _ref$legendText,
45
45
  props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
46
46
 
@@ -49,31 +49,38 @@ var RowSizeDropdown = function RowSizeDropdown(_ref) {
49
49
  isOpen = _React$useState2[0],
50
50
  setIsOpen = _React$useState2[1];
51
51
 
52
- return /*#__PURE__*/React.createElement(_react2.Popover, {
53
- align: "bottom-right",
54
- caret: false,
55
- dropShadow: false,
56
- open: isOpen,
57
- className: "".concat(blockClass, "__row-height-settings-popover")
58
- }, /*#__PURE__*/React.createElement(_react2.IconButton, {
52
+ return /*#__PURE__*/React.createElement(React.Fragment, null, !isOpen && /*#__PURE__*/React.createElement(_react2.IconButton, {
59
53
  kind: "ghost",
60
- align: "left",
54
+ align: align,
61
55
  onClick: function onClick() {
62
- return setIsOpen(!isOpen);
56
+ return setIsOpen(function (prevOpen) {
57
+ return !prevOpen;
58
+ });
63
59
  },
64
60
  label: legendText,
65
- className: (0, _classnames.default)("".concat(blockClass, "__row-size-button"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__row-size-button--open"), isOpen))
61
+ className: (0, _classnames.default)("".concat(blockClass, "__row-size-button"))
62
+ }, /*#__PURE__*/React.createElement(_icons.Settings, {
63
+ size: 16
64
+ })), isOpen && /*#__PURE__*/React.createElement(_react2.Toggletip, {
65
+ defaultOpen: true,
66
+ className: "".concat(blockClass, "__row-size-toggle-tip")
67
+ }, /*#__PURE__*/React.createElement(_react2.ToggletipButton, {
68
+ className: (0, _classnames.default)("".concat(blockClass, "__row-size-toggle-tip-button"), "".concat(blockClass, "__row-size-button--open")),
69
+ label: legendText
66
70
  }, /*#__PURE__*/React.createElement(_icons.Settings, {
67
71
  size: 16
68
- })), /*#__PURE__*/React.createElement(_react2.PopoverContent, null, /*#__PURE__*/React.createElement(_RowSizeRadioGroup.default, (0, _extends2.default)({}, props, {
72
+ })), /*#__PURE__*/React.createElement(_react2.ToggletipContent, {
73
+ className: "".concat(blockClass, "__row-size-toggle-tip-content")
74
+ }, /*#__PURE__*/React.createElement(_RowSizeRadioGroup.default, (0, _extends2.default)({}, props, {
69
75
  legendText: legendText,
70
76
  hideRadioGroup: function hideRadioGroup() {
71
77
  setIsOpen(false);
72
78
  }
73
- }))));
79
+ })))));
74
80
  };
75
81
 
76
82
  RowSizeDropdown.propTypes = {
83
+ align: _react2.IconButton.propTypes.align,
77
84
  datagridName: _propTypes.default.string,
78
85
  legendText: _propTypes.default.string,
79
86
  light: _propTypes.default.bool,