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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. package/README.md +10 -4
  2. package/css/index-full-carbon.css +129 -127
  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 +69 -118
  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 +129 -127
  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 +129 -127
  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/Card/Card.js +8 -6
  24. package/es/components/Card/CardHeader.js +2 -2
  25. package/es/components/Datagrid/Datagrid/DatagridEmptyBody.js +15 -20
  26. package/es/components/Datagrid/Datagrid/DatagridHeaderRow.js +6 -2
  27. package/es/components/Datagrid/Datagrid/DatagridRefBody.js +3 -1
  28. package/es/components/Datagrid/Datagrid/DatagridRow.js +6 -2
  29. package/es/components/Datagrid/Datagrid/DatagridSimpleBody.js +3 -1
  30. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +1 -1
  31. package/es/components/Datagrid/Datagrid/DatagridVirtualBody.js +3 -1
  32. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +15 -65
  33. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +5 -2
  34. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +112 -0
  35. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +1 -0
  36. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +11 -0
  37. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +29 -23
  38. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +1 -0
  39. package/es/components/Datagrid/index.js +7 -7
  40. package/es/components/Datagrid/useInfiniteScroll.js +5 -1
  41. package/es/components/Datagrid/useOnRowClick.js +3 -3
  42. package/es/components/Datagrid/useSortableColumns.js +7 -5
  43. package/es/components/Datagrid/utils/getAutoSizedColumnWidth.js +29 -0
  44. package/es/components/ExampleComponent/ExampleComponent.js +39 -5
  45. package/es/components/ExampleComponent/useExample.js +51 -0
  46. package/es/components/ExpressiveCard/ExpressiveCard.js +3 -3
  47. package/es/components/InlineEditV1/InlineEditV1.js +15 -20
  48. package/es/components/InlineEditV2/InlineEditV2.js +21 -31
  49. package/es/components/PageHeader/PageHeader.js +4 -3
  50. package/es/components/ProductiveCard/ProductiveCard.js +3 -3
  51. package/es/components/index.js +1 -1
  52. package/es/global/js/package-settings.js +24 -3
  53. package/es/global/js/utils/story-helper.js +9 -0
  54. package/es/global/js/utils/test-helper.js +38 -6
  55. package/lib/components/AddSelect/AddSelectBody.js +1 -0
  56. package/lib/components/AddSelect/AddSelectFormControl.js +110 -0
  57. package/lib/components/AddSelect/AddSelectList.js +29 -203
  58. package/lib/components/AddSelect/AddSelectRow.js +247 -0
  59. package/lib/components/AddSelect/hooks/useFocus.js +46 -0
  60. package/lib/components/Card/Card.js +7 -5
  61. package/lib/components/Card/CardHeader.js +2 -2
  62. package/lib/components/Datagrid/Datagrid/DatagridEmptyBody.js +14 -19
  63. package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +6 -2
  64. package/lib/components/Datagrid/Datagrid/DatagridRefBody.js +3 -1
  65. package/lib/components/Datagrid/Datagrid/DatagridRow.js +6 -2
  66. package/lib/components/Datagrid/Datagrid/DatagridSimpleBody.js +3 -1
  67. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +1 -1
  68. package/lib/components/Datagrid/Datagrid/DatagridVirtualBody.js +3 -1
  69. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +16 -69
  70. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +5 -2
  71. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +132 -0
  72. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +1 -0
  73. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +11 -0
  74. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +23 -16
  75. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +1 -0
  76. package/lib/components/Datagrid/index.js +9 -1
  77. package/lib/components/Datagrid/useInfiniteScroll.js +5 -0
  78. package/lib/components/Datagrid/useOnRowClick.js +3 -3
  79. package/lib/components/Datagrid/useSortableColumns.js +7 -5
  80. package/lib/components/Datagrid/utils/getAutoSizedColumnWidth.js +40 -0
  81. package/lib/components/ExampleComponent/ExampleComponent.js +47 -4
  82. package/lib/components/ExampleComponent/useExample.js +63 -0
  83. package/lib/components/ExpressiveCard/ExpressiveCard.js +3 -3
  84. package/lib/components/InlineEditV1/InlineEditV1.js +14 -19
  85. package/lib/components/InlineEditV2/InlineEditV2.js +20 -30
  86. package/lib/components/PageHeader/PageHeader.js +4 -3
  87. package/lib/components/ProductiveCard/ProductiveCard.js +3 -3
  88. package/lib/components/index.js +6 -0
  89. package/lib/global/js/package-settings.js +24 -3
  90. package/lib/global/js/utils/story-helper.js +13 -2
  91. package/lib/global/js/utils/test-helper.js +42 -8
  92. package/package.json +2 -2
  93. package/scss/components/ActionBar/_action-bar.scss +0 -4
  94. package/scss/components/AddSelect/_add-select.scss +4 -16
  95. package/scss/components/Card/_card.scss +13 -6
  96. package/scss/components/Datagrid/styles/addons/_CustomizeColumnsTearsheet.scss +15 -2
  97. package/scss/components/Datagrid/styles/addons/_RowSizeDropdown.scss +18 -6
  98. package/scss/components/ExportModal/_export-modal.scss +0 -4
  99. package/scss/components/ExpressiveCard/_expressive-card.scss +1 -1
  100. package/scss/components/InlineEditV1/_inline-edit-v1.scss +5 -89
  101. package/scss/components/InlineEditV2/_inline-edit-v2.scss +42 -3
  102. package/scss/components/PageHeader/_page-header.scss +2 -3
  103. package/scss/components/ProductiveCard/_productive-card.scss +31 -2
  104. package/scss/components/SidePanel/_side-panel.scss +2 -1
  105. package/scss/components/TagSet/_tag-set.scss +1 -0
  106. package/scss/components/UserProfileImage/_user-profile-image.scss +5 -0
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.AddSelectFormControl = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _icons = require("@carbon/react/icons");
15
+
16
+ var _propTypes = _interopRequireDefault(require("prop-types"));
17
+
18
+ var _settings = require("../../settings");
19
+
20
+ var _UserProfileImage = require("../UserProfileImage");
21
+
22
+ var componentName = 'AddSelectFormControl';
23
+ var blockClass = "".concat(_settings.pkg.prefix, "--add-select__selections");
24
+
25
+ var AddSelectFormControl = function AddSelectFormControl(_ref) {
26
+ var _controlProps;
27
+
28
+ var item = _ref.item,
29
+ onClick = _ref.onClick,
30
+ selected = _ref.selected,
31
+ type = _ref.type;
32
+ var controlProps = (_controlProps = {
33
+ onClick: onClick,
34
+ id: item.id,
35
+ className: "".concat(blockClass, "-form-control-wrapper")
36
+ }, (0, _defineProperty2.default)(_controlProps, "aria-label", item.title), (0, _defineProperty2.default)(_controlProps, "size", 20), _controlProps);
37
+
38
+ var getCheckbox = function getCheckbox() {
39
+ if (selected) {
40
+ return /*#__PURE__*/_react.default.createElement(_icons.CheckboxCheckedFilled, controlProps);
41
+ }
42
+
43
+ return /*#__PURE__*/_react.default.createElement(_icons.Checkbox, controlProps);
44
+ };
45
+
46
+ var getRadio = function getRadio() {
47
+ if (selected) {
48
+ return /*#__PURE__*/_react.default.createElement(_icons.RadioButtonChecked, controlProps);
49
+ }
50
+
51
+ return /*#__PURE__*/_react.default.createElement(_icons.RadioButton, controlProps);
52
+ };
53
+
54
+ var getFormControl = function getFormControl() {
55
+ if (!item) {
56
+ return;
57
+ }
58
+
59
+ if (type === 'checkbox') {
60
+ return getCheckbox();
61
+ } else {
62
+ return getRadio();
63
+ }
64
+ };
65
+
66
+ var getAvatarProps = function getAvatarProps(_ref2) {
67
+ var src = _ref2.src,
68
+ alt = _ref2.alt,
69
+ icon = _ref2.icon,
70
+ backgroundColor = _ref2.backgroundColor,
71
+ theme = _ref2.theme;
72
+ return {
73
+ className: "".concat(blockClass, "-cell-avatar"),
74
+ size: 'lg',
75
+ theme: theme,
76
+ image: src,
77
+ imageDescription: alt,
78
+ icon: icon,
79
+ backgroundColor: backgroundColor
80
+ };
81
+ };
82
+
83
+ var getItemIcon = function getItemIcon(_ref3) {
84
+ var Icon = _ref3.icon;
85
+ return /*#__PURE__*/_react.default.createElement(Icon, null);
86
+ };
87
+
88
+ return /*#__PURE__*/_react.default.createElement("div", {
89
+ className: "".concat(blockClass, "-form-control")
90
+ }, getFormControl(), /*#__PURE__*/_react.default.createElement("div", {
91
+ className: "".concat(blockClass, "-form-control-label-wrapper")
92
+ }, item.avatar && /*#__PURE__*/_react.default.createElement(_UserProfileImage.UserProfileImage, getAvatarProps(item.avatar)), item.icon && /*#__PURE__*/_react.default.createElement("div", {
93
+ className: "".concat(blockClass, "-cell-icon")
94
+ }, getItemIcon(item)), /*#__PURE__*/_react.default.createElement("div", {
95
+ className: "".concat(blockClass, "-form-control-label-text")
96
+ }, /*#__PURE__*/_react.default.createElement("span", {
97
+ className: "".concat(blockClass, "-cell-title")
98
+ }, item.title), item.subtitle && /*#__PURE__*/_react.default.createElement("span", {
99
+ className: "".concat(blockClass, "-cell-subtitle")
100
+ }, item.subtitle))));
101
+ };
102
+
103
+ exports.AddSelectFormControl = AddSelectFormControl;
104
+ AddSelectFormControl.propTypes = {
105
+ item: _propTypes.default.object,
106
+ onClick: _propTypes.default.func,
107
+ selected: _propTypes.default.bool,
108
+ type: _propTypes.default.oneOf(['checkbox', 'radio'])
109
+ };
110
+ AddSelectFormControl.displayName = componentName;
@@ -11,13 +11,11 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
 
12
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
13
 
14
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
15
 
16
- var _react = _interopRequireDefault(require("react"));
17
-
18
- var _react2 = require("@carbon/react");
16
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
19
17
 
20
- var _icons = require("@carbon/react/icons");
18
+ var _react = _interopRequireDefault(require("react"));
21
19
 
22
20
  var _propTypes = _interopRequireDefault(require("prop-types"));
23
21
 
@@ -25,222 +23,50 @@ var _classnames = _interopRequireDefault(require("classnames"));
25
23
 
26
24
  var _settings = require("../../settings");
27
25
 
28
- var _UserProfileImage = require("../UserProfileImage");
26
+ var _AddSelectRow = require("./AddSelectRow");
27
+
28
+ var _useFocus3 = _interopRequireDefault(require("./hooks/useFocus"));
29
29
 
30
- //
31
- // Copyright IBM Corp. 2022, 2022
32
- //
33
- // This source code is licensed under the Apache-2.0 license found in the
34
- // LICENSE file in the root directory of this source tree.
35
- //
30
+ var _excluded = ["filteredItems", "multi"];
36
31
  var blockClass = "".concat(_settings.pkg.prefix, "--add-select__selections");
37
32
  var componentName = 'AddSelectList';
38
33
 
39
34
  var AddSelectList = function AddSelectList(_ref) {
40
- var _modifiers$options;
41
-
42
- var appliedModifiers = _ref.appliedModifiers,
43
- displayMetalPanel = _ref.displayMetalPanel,
44
- filteredItems = _ref.filteredItems,
45
- metaIconDescription = _ref.metaIconDescription,
46
- modifiers = _ref.modifiers,
35
+ var filteredItems = _ref.filteredItems,
47
36
  multi = _ref.multi,
48
- multiSelection = _ref.multiSelection,
49
- navIconDescription = _ref.navIconDescription,
50
- parentId = _ref.parentId,
51
- setAppliedModifiers = _ref.setAppliedModifiers,
52
- setDisplayMetaPanel = _ref.setDisplayMetaPanel,
53
- setMultiSelection = _ref.setMultiSelection,
54
- setParentSelected = _ref.setParentSelected,
55
- setSingleSelection = _ref.setSingleSelection,
56
- singleSelection = _ref.singleSelection;
57
- var hasModifiers = (modifiers === null || modifiers === void 0 ? void 0 : (_modifiers$options = modifiers.options) === null || _modifiers$options === void 0 ? void 0 : _modifiers$options.length) > 0;
58
-
59
- var handleSingleSelection = function handleSingleSelection(value) {
60
- setSingleSelection(value);
61
- };
62
-
63
- var handleMultiSelection = function handleMultiSelection(event, _ref2) {
64
- var checked = _ref2.checked,
65
- id = _ref2.id;
66
-
67
- if (checked) {
68
- var newValues = [].concat((0, _toConsumableArray2.default)(multiSelection), [id]);
69
- setMultiSelection(newValues);
70
- } else {
71
- var _newValues = multiSelection.filter(function (v) {
72
- return v !== id;
73
- });
74
-
75
- setMultiSelection(_newValues);
76
- }
77
- };
78
-
79
- var onNavigateItem = function onNavigateItem(_ref3) {
80
- var id = _ref3.id,
81
- title = _ref3.title;
82
- setParentSelected(id, title, parentId);
83
- };
84
-
85
- var isSelected = function isSelected(id) {
86
- if (multi) {
87
- return multiSelection.includes(id);
88
- }
89
-
90
- return id === singleSelection;
91
- };
92
-
93
- var getAvatarProps = function getAvatarProps(_ref4) {
94
- var src = _ref4.src,
95
- alt = _ref4.alt,
96
- icon = _ref4.icon,
97
- backgroundColor = _ref4.backgroundColor,
98
- theme = _ref4.theme;
99
- return {
100
- className: "".concat(blockClass, "-cell-avatar"),
101
- size: 'lg',
102
- theme: theme,
103
- image: src,
104
- imageDescription: alt,
105
- icon: icon,
106
- backgroundColor: backgroundColor
107
- };
108
- };
109
-
110
- var getItemIcon = function getItemIcon(_ref5) {
111
- var Icon = _ref5.icon;
112
- return /*#__PURE__*/_react.default.createElement(Icon, null);
113
- };
114
-
115
- var modifierHandler = function modifierHandler(id, selectedItem) {
116
- var modifiersClone = (0, _toConsumableArray2.default)(appliedModifiers);
117
- var modifierIdx = modifiersClone.findIndex(function (item) {
118
- return item.id === id;
119
- });
120
- modifiersClone[modifierIdx] = (0, _defineProperty2.default)({
121
- id: id
122
- }, modifiers.id, selectedItem);
123
- setAppliedModifiers(modifiersClone);
124
- };
125
-
126
- var metaPanelHandler = function metaPanelHandler(item) {
127
- if (item.meta) {
128
- setDisplayMetaPanel(item);
129
- }
130
- };
131
-
132
- var isInMetaPanel = function isInMetaPanel(id) {
133
- return id === (displayMetalPanel === null || displayMetalPanel === void 0 ? void 0 : displayMetalPanel.id);
134
- };
37
+ rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
38
+
39
+ var _useFocus = (0, _useFocus3.default)(filteredItems.length),
40
+ _useFocus2 = (0, _slicedToArray2.default)(_useFocus, 2),
41
+ focus = _useFocus2[0],
42
+ setFocus = _useFocus2[1];
135
43
 
136
44
  return /*#__PURE__*/_react.default.createElement("div", {
45
+ id: "add-select-focus",
137
46
  className: (0, _classnames.default)("".concat(blockClass, "-wrapper"), (0, _defineProperty2.default)({}, "".concat(blockClass, "-wrapper-multi"), multi))
138
47
  }, /*#__PURE__*/_react.default.createElement("div", {
139
48
  className: "".concat(blockClass)
140
49
  }, /*#__PURE__*/_react.default.createElement("div", {
141
- className: "".concat(blockClass, "-body")
142
- }, filteredItems.map(function (item) {
143
- var _cx2;
144
-
145
- return /*#__PURE__*/_react.default.createElement("div", {
50
+ className: "".concat(blockClass, "-body"),
51
+ role: "treegrid",
52
+ "aria-label": "add select tree label"
53
+ }, filteredItems.map(function (item, index) {
54
+ return /*#__PURE__*/_react.default.createElement(_AddSelectRow.AddSelectRow, (0, _extends2.default)({
146
55
  key: item.id,
147
- className: (0, _classnames.default)("".concat(blockClass, "-row"), (_cx2 = {}, (0, _defineProperty2.default)(_cx2, "".concat(blockClass, "-row--selected"), isSelected(item.id)), (0, _defineProperty2.default)(_cx2, "".concat(blockClass, "-row-meta--selected"), isInMetaPanel(item.id)), _cx2))
148
- }, /*#__PURE__*/_react.default.createElement("div", {
149
- className: "".concat(blockClass, "-cell")
150
- }, /*#__PURE__*/_react.default.createElement("div", {
151
- className: "".concat(blockClass, "-cell-wrapper")
152
- }, multi ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
153
- className: "".concat(blockClass, "-checkbox")
154
- }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_react2.Checkbox, {
155
- onChange: handleMultiSelection,
156
- labelText: item.title,
157
- id: item.id,
158
- checked: isSelected(item.id),
159
- className: "".concat(blockClass, "-checkbox-wrapper")
160
- })), /*#__PURE__*/_react.default.createElement("div", {
161
- className: "".concat(blockClass, "-checkbox-label-wrapper")
162
- }, item.avatar && /*#__PURE__*/_react.default.createElement(_UserProfileImage.UserProfileImage, getAvatarProps(item.avatar)), item.icon && /*#__PURE__*/_react.default.createElement("div", {
163
- className: "".concat(blockClass, "-cell-icon")
164
- }, getItemIcon(item)), /*#__PURE__*/_react.default.createElement("div", {
165
- className: "".concat(blockClass, "-checkbox-label-text")
166
- }, /*#__PURE__*/_react.default.createElement("span", {
167
- className: "".concat(blockClass, "-cell-title")
168
- }, item.title), item.subtitle && /*#__PURE__*/_react.default.createElement("span", {
169
- className: "".concat(blockClass, "-cell-subtitle")
170
- }, item.subtitle)))), hasModifiers && /*#__PURE__*/_react.default.createElement(_react2.Dropdown, {
171
- id: "add-select-modifier-".concat(item.id),
172
- type: "inline",
173
- items: modifiers.options,
174
- label: modifiers.label,
175
- disabled: !isSelected(item.id),
176
- className: "".concat(blockClass, "-dropdown"),
177
- initialSelectedItem: item[modifiers.id],
178
- onChange: function onChange(_ref6) {
179
- var selectedItem = _ref6.selectedItem;
180
- return modifierHandler(item.id, selectedItem);
181
- }
182
- })) : /*#__PURE__*/_react.default.createElement(_react2.RadioButton, {
183
- className: "".concat(blockClass, "-radio"),
184
- name: "add-select-selections",
185
- id: item.id,
186
- value: item.value,
187
- labelText: item.title,
188
- onChange: function onChange() {
189
- return handleSingleSelection(item.id);
190
- },
191
- checked: isSelected(item.id)
192
- }), item.children && /*#__PURE__*/_react.default.createElement(_react2.Button, {
193
- className: "".concat(blockClass, "-view-children"),
194
- renderIcon: function renderIcon(props) {
195
- return /*#__PURE__*/_react.default.createElement(_icons.ChevronRight, (0, _extends2.default)({
196
- size: 16
197
- }, props));
198
- },
199
- iconDescription: navIconDescription,
200
- tooltipPosition: "left",
201
- tooltipAlignment: "center",
202
- hasIconOnly: true,
203
- onClick: function onClick() {
204
- return onNavigateItem(item);
205
- },
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: function onClick() {
222
- return metaPanelHandler(item);
223
- }
224
- }))));
56
+ index: index,
57
+ focus: focus,
58
+ setSize: filteredItems.length,
59
+ item: item,
60
+ multi: multi,
61
+ setFocus: setFocus
62
+ }, rest));
225
63
  }))));
226
64
  };
227
65
 
228
66
  exports.AddSelectList = AddSelectList;
229
67
  AddSelectList.propTypes = {
230
- appliedModifiers: _propTypes.default.array,
231
- displayMetalPanel: _propTypes.default.object,
232
68
  filteredItems: _propTypes.default.array,
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
- setMultiSelection: _propTypes.default.func,
242
- setParentSelected: _propTypes.default.func,
243
- setSingleSelection: _propTypes.default.func,
244
- singleSelection: _propTypes.default.string
69
+ focus: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
70
+ multi: _propTypes.default.bool
245
71
  };
246
72
  AddSelectList.displayName = componentName;
@@ -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;