@carbon/ibm-products 1.9.0 → 1.11.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. package/css/index-full-carbon.css +364 -5838
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +5 -5
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +68 -3430
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +3 -3
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +185 -4098
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +5 -5
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +302 -4099
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +5 -5
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/AddSelect/AddSelect.js +98 -92
  18. package/es/components/AddSelect/AddSelectColumn.js +219 -8
  19. package/es/components/AddSelect/AddSelectList.js +5 -5
  20. package/es/components/AddSelect/AddSelectSidebar.js +3 -15
  21. package/es/components/AddSelect/add-select-utils.js +64 -0
  22. package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -1
  23. package/es/components/ButtonMenu/ButtonMenu.js +12 -4
  24. package/es/components/DataSpreadsheet/DataSpreadsheet.js +480 -182
  25. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +124 -81
  26. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +74 -8
  27. package/es/components/DataSpreadsheet/hooks/useMoveActiveCell.js +27 -0
  28. package/es/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +28 -0
  29. package/es/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +41 -0
  30. package/es/components/DataSpreadsheet/utils/checkActiveHeaderCell.js +34 -0
  31. package/es/components/DataSpreadsheet/{createActiveCellFn.js → utils/createActiveCellFn.js} +21 -8
  32. package/es/components/DataSpreadsheet/{createCellSelectionArea.js → utils/createCellSelectionArea.js} +8 -4
  33. package/es/components/DataSpreadsheet/{generateData.js → utils/generateData.js} +6 -0
  34. package/es/components/DataSpreadsheet/{getCellSize.js → utils/getCellSize.js} +0 -0
  35. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +46 -0
  36. package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +82 -0
  37. package/es/components/DataSpreadsheet/utils/removeCellSelections.js +30 -0
  38. package/es/components/InlineEdit/InlineEdit.js +58 -27
  39. package/es/components/OptionsTile/OptionsTile.js +31 -21
  40. package/es/components/OptionsTile/index.js +1 -1
  41. package/es/components/PageHeader/PageHeader.js +26 -15
  42. package/es/components/PageHeader/PageHeaderTitle.js +2 -1
  43. package/es/components/PageHeader/PageHeaderUtils.js +24 -29
  44. package/es/components/TagSet/TagSet.js +12 -3
  45. package/es/components/UserProfileImage/UserProfileImage.js +2 -1
  46. package/es/components/index.js +0 -1
  47. package/es/global/js/package-settings.js +1 -2
  48. package/lib/components/AddSelect/AddSelect.js +101 -92
  49. package/lib/components/AddSelect/AddSelectColumn.js +232 -13
  50. package/lib/components/AddSelect/AddSelectList.js +5 -5
  51. package/lib/components/AddSelect/AddSelectSidebar.js +9 -15
  52. package/lib/components/AddSelect/add-select-utils.js +78 -0
  53. package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -1
  54. package/lib/components/ButtonMenu/ButtonMenu.js +12 -4
  55. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +490 -186
  56. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +127 -82
  57. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +82 -9
  58. package/lib/components/DataSpreadsheet/hooks/useMoveActiveCell.js +37 -0
  59. package/lib/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +39 -0
  60. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +52 -0
  61. package/lib/components/DataSpreadsheet/utils/checkActiveHeaderCell.js +45 -0
  62. package/lib/components/DataSpreadsheet/{createActiveCellFn.js → utils/createActiveCellFn.js} +21 -8
  63. package/lib/components/DataSpreadsheet/{createCellSelectionArea.js → utils/createCellSelectionArea.js} +8 -4
  64. package/lib/components/DataSpreadsheet/{generateData.js → utils/generateData.js} +6 -0
  65. package/lib/components/DataSpreadsheet/{getCellSize.js → utils/getCellSize.js} +0 -0
  66. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +59 -0
  67. package/lib/components/DataSpreadsheet/utils/handleMultipleKeys.js +92 -0
  68. package/lib/components/DataSpreadsheet/utils/removeCellSelections.js +41 -0
  69. package/lib/components/InlineEdit/InlineEdit.js +60 -28
  70. package/lib/components/OptionsTile/OptionsTile.js +30 -20
  71. package/lib/components/PageHeader/PageHeader.js +25 -15
  72. package/lib/components/PageHeader/PageHeaderTitle.js +2 -1
  73. package/lib/components/PageHeader/PageHeaderUtils.js +24 -29
  74. package/lib/components/TagSet/TagSet.js +13 -3
  75. package/lib/components/UserProfileImage/UserProfileImage.js +2 -1
  76. package/lib/components/index.js +0 -8
  77. package/lib/global/js/package-settings.js +1 -2
  78. package/package.json +17 -17
  79. package/scss/components/AddSelect/_add-select.scss +47 -14
  80. package/scss/components/BreadcrumbWithOverflow/_breadcrumb-with-overflow.scss +7 -3
  81. package/scss/components/CreateInfluencer/_create-influencer.scss +2 -0
  82. package/scss/components/CreateModal/_create-modal.scss +1 -0
  83. package/scss/components/CreateSidePanel/_create-side-panel.scss +1 -1
  84. package/scss/components/CreateSidePanel/_storybook-styles.scss +1 -1
  85. package/scss/components/CreateTearsheet/_create-tearsheet.scss +1 -0
  86. package/scss/components/CreateTearsheetNarrow/_create-tearsheet-narrow.scss +1 -0
  87. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +25 -7
  88. package/scss/components/EditSidePanel/_edit-side-panel.scss +9 -0
  89. package/scss/components/EditSidePanel/_storybook-styles.scss +1 -1
  90. package/scss/components/InlineEdit/_inline-edit.scss +46 -39
  91. package/scss/components/InlineEdit/_storybook-styles.scss +1 -0
  92. package/scss/components/ModifiedTabs/_modified-tabs.scss +5 -0
  93. package/scss/components/NotificationsPanel/_notifications-panel.scss +10 -3
  94. package/scss/components/OptionsTile/_index.scss +1 -1
  95. package/scss/components/OptionsTile/_options-tile.scss +17 -17
  96. package/scss/components/OptionsTile/_storybook-styles.scss +4 -4
  97. package/scss/components/PageHeader/_page-header.scss +5 -2
  98. package/scss/components/SidePanel/_side-panel.scss +19 -12
  99. package/scss/components/StatusIcon/_status-icon.scss +1 -0
  100. package/scss/components/Tearsheet/_tearsheet.scss +4 -0
  101. package/scss/components/UserProfileImage/_user-profile-image.scss +9 -0
  102. package/scss/components/WebTerminal/_web-terminal.scss +2 -0
  103. package/scss/components/_index.scss +0 -1
  104. package/es/components/LoadingBar/LoadingBar.js +0 -156
  105. package/es/components/LoadingBar/index.js +0 -7
  106. package/lib/components/LoadingBar/LoadingBar.js +0 -170
  107. package/lib/components/LoadingBar/index.js +0 -13
  108. package/scss/components/LoadingBar/_index.scss +0 -8
  109. package/scss/components/LoadingBar/_loading-bar.scss +0 -211
  110. package/scss/components/LoadingBar/_storybook-styles.scss +0 -14
@@ -39,31 +39,24 @@ var _AddSelectList = require("./AddSelectList");
39
39
 
40
40
  var _AddSelectColumn = require("./AddSelectColumn");
41
41
 
42
- var _excluded = ["className", "description", "influencerTitle", "inputPlaceholder", "items", "itemsLabel", "multi", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onClose", "onCloseButtonText", "onSearchFilter", "onSubmit", "onSubmitButtonText", "open", "removeIconDescription", "textInputLabel", "title"],
43
- _excluded2 = ["children"];
42
+ var _addSelectUtils = require("./add-select-utils");
43
+
44
+ var _excluded = ["className", "columnInputPlaceholder", "description", "influencerTitle", "inputPlaceholder", "items", "itemsLabel", "multi", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onClose", "onCloseButtonText", "onSearchFilter", "onSubmit", "onSubmitButtonText", "open", "removeIconDescription", "textInputLabel", "title"];
44
45
 
45
46
  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); }
46
47
 
47
48
  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; }
48
49
 
49
- 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; }
50
-
51
- 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) { (0, _defineProperty2.default)(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; }
52
-
53
- var componentName = 'AddSelect'; // Default values for props
54
-
55
- var defaults = {
56
- items: Object.freeze([])
57
- };
50
+ var componentName = 'AddSelect';
58
51
  var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
59
52
  var _cx;
60
53
 
61
54
  var className = _ref.className,
55
+ columnInputPlaceholder = _ref.columnInputPlaceholder,
62
56
  description = _ref.description,
63
57
  influencerTitle = _ref.influencerTitle,
64
58
  inputPlaceholder = _ref.inputPlaceholder,
65
- _ref$items = _ref.items,
66
- items = _ref$items === void 0 ? defaults.items : _ref$items,
59
+ items = _ref.items,
67
60
  itemsLabel = _ref.itemsLabel,
68
61
  multi = _ref.multi,
69
62
  noResultsDescription = _ref.noResultsDescription,
@@ -112,74 +105,64 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
112
105
  useNormalizedItems = _useState12[0],
113
106
  setUsedNormalizedItems = _useState12[1];
114
107
 
108
+ var _useState13 = (0, _react.useState)([]),
109
+ _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
110
+ sidebarItems = _useState14[0],
111
+ setSidebarItems = _useState14[1];
112
+
115
113
  (0, _react.useEffect)(function () {
116
- var normalize = function normalize(arr, parentId) {
117
- return arr.reduce(function (acc, cur) {
118
- var children = cur.children,
119
- item = (0, _objectWithoutProperties2.default)(cur, _excluded2);
120
- acc[cur.id] = _objectSpread({}, item);
121
-
122
- if (parentId) {
123
- acc[cur.id].parent = parentId;
124
- }
125
-
126
- if (children) {
127
- acc[cur.id].children = children.map(function (child) {
128
- return child.id;
129
- });
130
- var child = normalize(children, cur.id);
131
- return _objectSpread(_objectSpread({}, acc), child);
132
- }
133
-
134
- return acc;
135
- }, {});
136
- };
137
-
138
- if (multi && items.find(function (item) {
139
- return item.children;
114
+ var entries = items.entries;
115
+ setSidebarItems((0, _addSelectUtils.flatten)(entries)); // multi select with nested data needs to be normalized
116
+
117
+ if (multi && entries.find(function (entry) {
118
+ return entry.children;
140
119
  })) {
141
- var newItems = normalize(items);
120
+ var newItems = (0, _addSelectUtils.normalize)(items);
142
121
  setNormalizedItems(newItems);
143
122
  setUsedNormalizedItems(true);
144
123
  }
145
- }, [items, multi]);
124
+ }, [items, multi]); // used to generate columns of results for multi select with hierarchy
146
125
 
147
126
  var getPages = function getPages() {
148
- var results = [];
149
- var itemIds = Object.keys(normalizedItems);
127
+ var pages = [];
128
+ var itemIds = Object.keys(normalizedItems); // top level items are just items with no parents so they're the top results
129
+
150
130
  var topLevelItems = [];
151
131
  itemIds.forEach(function (itemId) {
152
132
  if (!normalizedItems[itemId].parent) {
153
133
  topLevelItems.push(normalizedItems[itemId]);
154
134
  }
155
135
  });
156
- results.push(topLevelItems);
136
+ pages.push(topLevelItems);
157
137
 
158
138
  if (path.length) {
139
+ /**
140
+ * the path is set when you initially traverse the child entries
141
+ * path is an array of item id's
142
+ * when a path is present the normalized items are searched
143
+ * any item who's has a matching parent id is added to the results
144
+ * in the end you have an array of arrays for each column of the hierarchy
145
+ */
159
146
  var pathIds = path.map(function (p) {
160
147
  return p.id;
161
148
  });
162
149
  pathIds.forEach(function (pathId) {
163
- var childItems = [];
150
+ var entries = [];
164
151
  itemIds.forEach(function (itemId) {
165
152
  if (normalizedItems[itemId].parent === pathId) {
166
- childItems.push(normalizedItems[itemId]);
153
+ entries.push(normalizedItems[itemId]);
167
154
  }
168
155
  });
169
- results.push(childItems);
156
+ pages.push(entries);
170
157
  });
171
158
  }
172
159
 
173
- return results;
174
- }; // handlers
175
-
176
-
177
- var handleSearch = function handleSearch(e) {
178
- setSearchTerm(e.target.value);
160
+ return pages;
179
161
  }; // item filtering
180
162
 
181
163
 
182
164
  var getFilteredItems = function getFilteredItems() {
165
+ var entries = items.entries;
183
166
  var hasPath = path.length > 0;
184
167
  /**
185
168
  * how to traverse the levels of items-
@@ -188,10 +171,12 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
188
171
  */
189
172
 
190
173
  var itemsToFilter = hasPath ? path.reduce(function (prev, cur) {
191
- return prev.find(function (item) {
174
+ var _prev$find, _prev$find$children;
175
+
176
+ return (_prev$find = prev.find(function (item) {
192
177
  return item.id === cur.id;
193
- }).children;
194
- }, items) : items;
178
+ })) === null || _prev$find === void 0 ? void 0 : (_prev$find$children = _prev$find.children) === null || _prev$find$children === void 0 ? void 0 : _prev$find$children.entries;
179
+ }, entries) : entries;
195
180
  var results = itemsToFilter.filter(function (item) {
196
181
  if (!searchTerm) {
197
182
  return item;
@@ -206,7 +191,8 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
206
191
  return item.title.toLowerCase().includes(searchTerm);
207
192
  });
208
193
  return results;
209
- };
194
+ }; // only multi select with hierarchy requires the the normalized items
195
+
210
196
 
211
197
  var itemsToDisplay = useNormalizedItems ? getPages() : getFilteredItems();
212
198
  var commonListProps = {
@@ -217,7 +203,42 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
217
203
  setPath: setPath,
218
204
  setSingleSelection: setSingleSelection,
219
205
  singleSelection: singleSelection
220
- }; // main content
206
+ }; // handlers
207
+
208
+ var handleSearch = function handleSearch(e) {
209
+ setSearchTerm(e.target.value);
210
+ };
211
+
212
+ var submitHandler = function submitHandler() {
213
+ onSubmit(multi ? multiSelection : singleSelection);
214
+ };
215
+
216
+ var commonTearsheetProps = {
217
+ open: open,
218
+ title: title,
219
+ description: description,
220
+ closeIconDescription: 'temp description',
221
+ actions: [{
222
+ label: onCloseButtonText,
223
+ kind: 'secondary',
224
+ onClick: onClose
225
+ }, {
226
+ label: onSubmitButtonText,
227
+ kind: 'primary',
228
+ onClick: submitHandler,
229
+ disabled: multi ? multiSelection.length === 0 : !singleSelection
230
+ }]
231
+ };
232
+ var sidebarProps = {
233
+ influencerTitle: influencerTitle,
234
+ items: sidebarItems,
235
+ multiSelection: multiSelection,
236
+ noSelectionDescription: noSelectionDescription,
237
+ noSelectionTitle: noSelectionTitle,
238
+ removeIconDescription: removeIconDescription,
239
+ setMultiSelection: setMultiSelection
240
+ };
241
+ var classNames = (0, _classnames.default)(className, blockClass, (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__single"), !multi), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__multi"), multi), _cx)); // main content
221
242
 
222
243
  var body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
223
244
  className: "".concat(blockClass, "__header")
@@ -228,23 +249,26 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
228
249
  value: searchTerm,
229
250
  onChange: handleSearch
230
251
  }), /*#__PURE__*/_react.default.createElement("div", {
231
- className: "".concat(blockClass, "__items-label-container")
252
+ className: "".concat(blockClass, "__tag-container")
232
253
  }, path.length ? /*#__PURE__*/_react.default.createElement(_AddSelectBreadcrumbs.AddSelectBreadcrumbs, {
233
254
  itemsLabel: itemsLabel,
234
255
  path: path,
235
256
  setPath: setPath
236
257
  }) : /*#__PURE__*/_react.default.createElement("p", {
237
- className: "".concat(blockClass, "__items-label")
258
+ className: "".concat(blockClass, "__tag-container-label")
238
259
  }, itemsLabel), !useNormalizedItems && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Tag, {
239
260
  type: "gray",
240
- size: "sm",
241
- className: "".concat(blockClass, "__items-label-tag")
261
+ size: "sm"
242
262
  }, itemsToDisplay.length))), useNormalizedItems ? /*#__PURE__*/_react.default.createElement("div", {
243
263
  className: "".concat(blockClass, "__columns")
244
264
  }, itemsToDisplay.map(function (page, idx) {
265
+ var _path;
266
+
245
267
  return /*#__PURE__*/_react.default.createElement(_AddSelectColumn.AddSelectColumn, (0, _extends2.default)({}, commonListProps, {
246
268
  key: idx,
247
- filteredItems: page
269
+ filteredItems: page,
270
+ header: idx === 0 ? itemsLabel : (_path = path[idx - 1]) === null || _path === void 0 ? void 0 : _path.title,
271
+ columnInputPlaceholder: columnInputPlaceholder
248
272
  }));
249
273
  })) : /*#__PURE__*/_react.default.createElement("div", null, itemsToDisplay.length > 0 ? /*#__PURE__*/_react.default.createElement(_AddSelectList.AddSelectList, (0, _extends2.default)({}, commonListProps, {
250
274
  filteredItems: itemsToDisplay
@@ -255,32 +279,6 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
255
279
  title: noResultsTitle
256
280
  }))));
257
281
 
258
- var commonTearsheetProps = {
259
- open: open,
260
- title: title,
261
- description: description,
262
- closeIconDescription: 'temp description',
263
- actions: [{
264
- label: onCloseButtonText,
265
- kind: 'secondary',
266
- onClick: onClose
267
- }, {
268
- label: onSubmitButtonText,
269
- kind: 'primary',
270
- onClick: onSubmit,
271
- disabled: multi ? multiSelection.length === 0 : !singleSelection
272
- }]
273
- };
274
- var sidebarProps = {
275
- influencerTitle: influencerTitle,
276
- items: items,
277
- multiSelection: multiSelection,
278
- noSelectionDescription: noSelectionDescription,
279
- noSelectionTitle: noSelectionTitle,
280
- removeIconDescription: removeIconDescription,
281
- setMultiSelection: setMultiSelection
282
- };
283
- var classNames = (0, _classnames.default)(className, blockClass, (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__single"), !multi), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__multi"), multi), _cx));
284
282
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
285
283
  ref: ref,
286
284
  className: classNames
@@ -292,14 +290,20 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
292
290
  exports.AddSelect = AddSelect;
293
291
  AddSelect.propTypes = {
294
292
  className: _propTypes.default.string,
293
+ columnInputPlaceholder: _propTypes.default.string,
295
294
  description: _propTypes.default.string,
296
295
  influencerTitle: _propTypes.default.string,
297
296
  inputPlaceholder: _propTypes.default.string,
298
- items: _propTypes.default.arrayOf(_propTypes.default.shape({
299
- id: _propTypes.default.string.isRequired,
300
- title: _propTypes.default.string.isRequired,
301
- value: _propTypes.default.string.isRequired
302
- })),
297
+ items: _propTypes.default.shape({
298
+ sortBy: _propTypes.default.array,
299
+ filterBy: _propTypes.default.array,
300
+ entries: _propTypes.default.arrayOf(_propTypes.default.shape({
301
+ id: _propTypes.default.string.isRequired,
302
+ title: _propTypes.default.string.isRequired,
303
+ value: _propTypes.default.string.isRequired,
304
+ children: _propTypes.default.object
305
+ }))
306
+ }),
303
307
  itemsLabel: _propTypes.default.string,
304
308
  multi: _propTypes.default.bool,
305
309
  noResultsDescription: _propTypes.default.string,
@@ -316,4 +320,9 @@ AddSelect.propTypes = {
316
320
  textInputLabel: _propTypes.default.string,
317
321
  title: _propTypes.default.string
318
322
  };
323
+ AddSelect.defaultProps = {
324
+ items: {
325
+ entries: []
326
+ }
327
+ };
319
328
  AddSelect.displayName = componentName;
@@ -2,6 +2,8 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
5
7
  Object.defineProperty(exports, "__esModule", {
6
8
  value: true
7
9
  });
@@ -9,29 +11,246 @@ exports.AddSelectColumn = void 0;
9
11
 
10
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
13
 
12
- var _react = _interopRequireDefault(require("react"));
14
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
+
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
+
18
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
19
+
20
+ var _react = _interopRequireWildcard(require("react"));
21
+
22
+ var _propTypes = _interopRequireDefault(require("prop-types"));
23
+
24
+ var _carbonComponentsReact = require("carbon-components-react");
25
+
26
+ var _iconsReact = require("@carbon/icons-react");
13
27
 
14
28
  var _settings = require("../../settings");
15
29
 
16
30
  var _AddSelectList = require("./AddSelectList");
17
31
 
18
- //
19
- // Copyright IBM Corp. 2022
20
- //
21
- // This source code is licensed under the Apache-2.0 license found in the
22
- // LICENSE file in the root directory of this source tree.
23
- //
24
- // import PropTypes from 'prop-types';
32
+ var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
33
+
34
+ var _excluded = ["columnInputPlaceholder", "filteredItems", "header", "multiSelection", "setMultiSelection"];
35
+
36
+ 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
+
38
+ 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; }
39
+
25
40
  var componentName = 'AddSelect';
26
41
 
27
- var AddSelectColumn = function AddSelectColumn(props) {
28
- var blockClass = "".concat(_settings.pkg.prefix, "--add-select__col");
42
+ var AddSelectColumn = function AddSelectColumn(_ref) {
43
+ var _filteredItems$find, _filteredItems$find2;
44
+
45
+ var columnInputPlaceholder = _ref.columnInputPlaceholder,
46
+ filteredItems = _ref.filteredItems,
47
+ header = _ref.header,
48
+ multiSelection = _ref.multiSelection,
49
+ setMultiSelection = _ref.setMultiSelection,
50
+ props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
51
+
52
+ var _useState = (0, _react.useState)(false),
53
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
54
+ allSelected = _useState2[0],
55
+ setAllSelected = _useState2[1];
56
+
57
+ var _useState3 = (0, _react.useState)(''),
58
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
59
+ searchTerm = _useState4[0],
60
+ setSearchTerm = _useState4[1];
61
+
62
+ var _useState5 = (0, _react.useState)(''),
63
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
64
+ sortDirection = _useState6[0],
65
+ setSortDirection = _useState6[1];
66
+
67
+ var _useState7 = (0, _react.useState)(''),
68
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
69
+ sortAttribute = _useState8[0],
70
+ setSortAttribute = _useState8[1];
71
+
72
+ var _useState9 = (0, _react.useState)([]),
73
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
74
+ filters = _useState10[0],
75
+ setFilters = _useState10[1];
76
+
77
+ var blockClass = "".concat(_settings.pkg.prefix, "--add-select");
78
+ var colClass = "".concat(blockClass, "__column");
79
+ (0, _react.useEffect)(function () {
80
+ var isAllSelected = filteredItems.every(function (item) {
81
+ return multiSelection.includes(item.id);
82
+ });
83
+ setAllSelected(isAllSelected);
84
+ }, [filteredItems, multiSelection]); // sorting
85
+
86
+ var colSortBy = (_filteredItems$find = filteredItems.find(function (item) {
87
+ return item.sortBy;
88
+ })) === null || _filteredItems$find === void 0 ? void 0 : _filteredItems$find.sortBy;
89
+ var sortByOpts = colSortBy ? colSortBy.reduce(function (acc, cur) {
90
+ var opts = [{
91
+ id: "".concat(cur, "-asc"),
92
+ itemText: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_iconsReact.ArrowUp16, null), cur),
93
+ direction: 'asc',
94
+ attribute: cur
95
+ }, {
96
+ id: "".concat(cur, "-desc"),
97
+ itemText: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_iconsReact.ArrowDown16, null), cur),
98
+ direction: 'desc',
99
+ attribute: cur
100
+ }];
101
+ return [].concat((0, _toConsumableArray2.default)(acc), opts);
102
+ }, []) : []; // filtering
103
+
104
+ var colFilterBy = (_filteredItems$find2 = filteredItems.find(function (item) {
105
+ return item.filterBy;
106
+ })) === null || _filteredItems$find2 === void 0 ? void 0 : _filteredItems$find2.filterBy;
107
+ var filterByOpts = colFilterBy ? filteredItems.map(function (item) {
108
+ return item[colFilterBy];
109
+ }) : []; // handlers
110
+
111
+ var sortHandler = function sortHandler(_ref2) {
112
+ var direction = _ref2.direction,
113
+ attribute = _ref2.attribute;
114
+ setSortAttribute(attribute);
115
+ setSortDirection(direction);
116
+ };
117
+
118
+ var selectAllHandler = function selectAllHandler(checked) {
119
+ var itemIds = filteredItems.map(function (item) {
120
+ return item.id;
121
+ });
122
+
123
+ if (checked) {
124
+ setMultiSelection([].concat((0, _toConsumableArray2.default)(multiSelection), (0, _toConsumableArray2.default)(itemIds)));
125
+ } else {
126
+ var newItems = multiSelection.filter(function (i) {
127
+ return !itemIds.includes(i);
128
+ });
129
+ setMultiSelection(newItems);
130
+ }
131
+ };
132
+
133
+ var filterHandler = function filterHandler(checked, opt) {
134
+ if (checked) {
135
+ var newFilters = [].concat((0, _toConsumableArray2.default)(filters), [opt]);
136
+ setFilters(newFilters);
137
+ } else {
138
+ var _newFilters = filters.filter(function (o) {
139
+ return o !== opt;
140
+ });
141
+
142
+ setFilters(_newFilters);
143
+ }
144
+ }; // filter and sort array functions
145
+
146
+
147
+ var filterBySearch = function filterBySearch(item) {
148
+ return item.title.toLowerCase().includes(searchTerm);
149
+ };
150
+
151
+ var filterByAttribute = function filterByAttribute(item) {
152
+ if (filters.length === 0) {
153
+ return true;
154
+ }
155
+
156
+ var filterBy = item.filterBy;
157
+ var filterByValue = item[filterBy];
158
+ return filters.some(function (filter) {
159
+ return filter === filterByValue;
160
+ });
161
+ };
162
+
163
+ var sortItems = function sortItems(a, b) {
164
+ var _a$sortAttribute, _b$sortAttribute;
165
+
166
+ var valueA = (_a$sortAttribute = a[sortAttribute]) === null || _a$sortAttribute === void 0 ? void 0 : _a$sortAttribute.split(' ').join('');
167
+ var valueB = (_b$sortAttribute = b[sortAttribute]) === null || _b$sortAttribute === void 0 ? void 0 : _b$sortAttribute.split(' ').join('');
168
+
169
+ if (sortDirection === 'desc') {
170
+ return valueA > valueB ? -1 : 1;
171
+ }
172
+
173
+ return valueA < valueB ? -1 : 1;
174
+ };
175
+
176
+ var colItems = filteredItems.filter(filterBySearch) // first check if the item meets the search
177
+ .filter(filterByAttribute) // then check if the item is included in the filter
178
+ .sort(sortItems); // then sort the items by whatever criteria
179
+
29
180
  return /*#__PURE__*/_react.default.createElement("div", {
30
- className: blockClass
31
- }, /*#__PURE__*/_react.default.createElement(_AddSelectList.AddSelectList, (0, _extends2.default)({}, props, {
32
- inColumn: true
181
+ className: colClass
182
+ }, /*#__PURE__*/_react.default.createElement("div", {
183
+ className: "".concat(colClass, "-search-bar")
184
+ }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextInput, {
185
+ value: searchTerm,
186
+ onChange: function onChange(e) {
187
+ return setSearchTerm(e.target.value);
188
+ },
189
+ light: true,
190
+ placeholder: columnInputPlaceholder,
191
+ className: "".concat(colClass, "-input"),
192
+ id: (0, _uuidv.default)(),
193
+ labelText: columnInputPlaceholder
194
+ }), /*#__PURE__*/_react.default.createElement("div", {
195
+ className: "".concat(colClass, "-sort-filter")
196
+ }, sortByOpts.length > 0 && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenu, {
197
+ renderIcon: _iconsReact.ArrowsVertical32,
198
+ className: "".concat(colClass, "-overflow"),
199
+ flipped: true
200
+ }, sortByOpts.map(function (opt) {
201
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenuItem, {
202
+ key: opt.id,
203
+ itemText: opt.itemText,
204
+ onClick: function onClick() {
205
+ return sortHandler(opt);
206
+ }
207
+ });
208
+ })), filterByOpts.length > 0 && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenu, {
209
+ renderIcon: _iconsReact.Filter32,
210
+ className: "".concat(colClass, "-overflow"),
211
+ flipped: true
212
+ }, filterByOpts.map(function (opt) {
213
+ return /*#__PURE__*/_react.default.createElement("div", {
214
+ key: opt,
215
+ className: "".concat(_settings.carbon.prefix, "--overflow-menu-options__option")
216
+ }, /*#__PURE__*/_react.default.createElement("div", {
217
+ className: "".concat(_settings.carbon.prefix, "--overflow-menu-options__btn")
218
+ }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, {
219
+ id: opt,
220
+ labelText: opt,
221
+ onChange: function onChange(checked) {
222
+ return filterHandler(checked, opt);
223
+ },
224
+ checked: filters.find(function (o) {
225
+ return o === opt;
226
+ }) ? true : false
227
+ })));
228
+ })))), /*#__PURE__*/_react.default.createElement("div", {
229
+ className: "".concat(blockClass, "__tag-container")
230
+ }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, {
231
+ id: "".concat((0, _uuidv.default)(), "-select-all"),
232
+ checked: allSelected,
233
+ onChange: selectAllHandler,
234
+ labelText: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
235
+ className: "".concat(blockClass, "__tag-container-label")
236
+ }, header), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Tag, {
237
+ type: "gray",
238
+ size: "sm"
239
+ }, colItems.length))
240
+ })), /*#__PURE__*/_react.default.createElement(_AddSelectList.AddSelectList, (0, _extends2.default)({}, props, {
241
+ inColumn: true,
242
+ filteredItems: colItems,
243
+ setMultiSelection: setMultiSelection,
244
+ multiSelection: multiSelection
33
245
  })));
34
246
  };
35
247
 
36
248
  exports.AddSelectColumn = AddSelectColumn;
249
+ AddSelectColumn.propTypes = {
250
+ columnInputPlaceholder: _propTypes.default.string,
251
+ filteredItems: _propTypes.default.array,
252
+ header: _propTypes.default.string,
253
+ multiSelection: _propTypes.default.array,
254
+ setMultiSelection: _propTypes.default.func
255
+ };
37
256
  AddSelectColumn.displayName = componentName;
@@ -43,13 +43,13 @@ var AddSelectList = function AddSelectList(_ref) {
43
43
  setSingleSelection(value);
44
44
  };
45
45
 
46
- var handleMultiSelection = function handleMultiSelection(value, checked) {
46
+ var handleMultiSelection = function handleMultiSelection(id, checked) {
47
47
  if (checked) {
48
- var newValues = [].concat((0, _toConsumableArray2.default)(multiSelection), [value]);
48
+ var newValues = [].concat((0, _toConsumableArray2.default)(multiSelection), [id]);
49
49
  setMultiSelection(newValues);
50
50
  } else {
51
51
  var _newValues = multiSelection.filter(function (v) {
52
- return v !== value;
52
+ return v !== id;
53
53
  });
54
54
 
55
55
  setMultiSelection(_newValues);
@@ -128,8 +128,8 @@ var AddSelectList = function AddSelectList(_ref) {
128
128
  className: "".concat(blockClass, "-cell-wrapper")
129
129
  }, multi ? /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, {
130
130
  className: "".concat(blockClass, "-checkbox"),
131
- onChange: function onChange(value) {
132
- return handleMultiSelection(item.id, value);
131
+ onChange: function onChange(checked) {
132
+ return handleMultiSelection(item.id, checked);
133
133
  },
134
134
  labelText: !inColumn ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
135
135
  className: "".concat(blockClass, "-cell-title")
@@ -7,8 +7,6 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.AddSelectSidebar = void 0;
9
9
 
10
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
-
12
10
  var _react = _interopRequireDefault(require("react"));
13
11
 
14
12
  var _carbonComponentsReact = require("carbon-components-react");
@@ -21,7 +19,12 @@ var _NoDataEmptyState = require("../../components/EmptyStates/NoDataEmptyState")
21
19
 
22
20
  var _settings = require("../../settings");
23
21
 
24
- var _excluded = ["children"];
22
+ //
23
+ // Copyright IBM Corp. 2022
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
+ //
25
28
  var componentName = 'AddSelectSidebar';
26
29
 
27
30
  var AddSelectSidebar = function AddSelectSidebar(_ref) {
@@ -39,20 +42,10 @@ var AddSelectSidebar = function AddSelectSidebar(_ref) {
39
42
  return v !== id;
40
43
  });
41
44
  setMultiSelection(newSelections);
42
- }; // utility to flatten the list of items and their children into a single searchable array
43
-
44
-
45
- var flattenItems = function flattenItems(arr) {
46
- return arr.reduce(function (prev, cur) {
47
- var children = cur.children,
48
- item = (0, _objectWithoutProperties2.default)(cur, _excluded);
49
- return prev.concat(item).concat(children ? flattenItems(children) : []);
50
- }, []);
51
45
  };
52
46
 
53
- var flattenedItems = flattenItems(items);
54
47
  var sidebarItems = multiSelection.map(function (selectedId) {
55
- return flattenedItems.find(function (item) {
48
+ return items.find(function (item) {
56
49
  return item.id === selectedId;
57
50
  });
58
51
  });
@@ -77,7 +70,8 @@ var AddSelectSidebar = function AddSelectSidebar(_ref) {
77
70
  return handleItemRemove(id);
78
71
  },
79
72
  kind: "ghost",
80
- className: "".concat(blockClass, "-item-remove-button")
73
+ className: "".concat(blockClass, "-item-remove-button"),
74
+ size: "sm"
81
75
  }));
82
76
  };
83
77