@carbon/ibm-products 1.10.0 → 1.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/css/index-full-carbon.css +249 -218
  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 +21 -4
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +2 -2
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +102 -212
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +4 -4
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +219 -212
  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 +88 -87
  18. package/es/components/AddSelect/AddSelectColumn.js +193 -19
  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 +11 -3
  24. package/es/components/CreateFullPage/CreateFullPageStep.js +4 -4
  25. package/es/components/CreateTearsheet/CreateTearsheetStep.js +4 -4
  26. package/es/components/DataSpreadsheet/DataSpreadsheet.js +255 -140
  27. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +37 -38
  28. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +55 -6
  29. package/es/components/DataSpreadsheet/hooks/useMoveActiveCell.js +27 -0
  30. package/es/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +28 -0
  31. package/es/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +41 -0
  32. package/es/components/DataSpreadsheet/{checkActiveHeaderCell.js → utils/checkActiveHeaderCell.js} +1 -1
  33. package/es/components/DataSpreadsheet/{createActiveCellFn.js → utils/createActiveCellFn.js} +20 -9
  34. package/es/components/DataSpreadsheet/{createCellSelectionArea.js → utils/createCellSelectionArea.js} +8 -4
  35. package/es/components/DataSpreadsheet/{generateData.js → utils/generateData.js} +6 -0
  36. package/es/components/DataSpreadsheet/{getCellSize.js → utils/getCellSize.js} +0 -0
  37. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +46 -0
  38. package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +82 -0
  39. package/es/components/DataSpreadsheet/utils/removeCellSelections.js +30 -0
  40. package/es/components/InlineEdit/InlineEdit.js +49 -8
  41. package/es/components/OptionsTile/OptionsTile.js +20 -20
  42. package/es/components/OptionsTile/index.js +1 -1
  43. package/es/components/PageHeader/PageHeader.js +35 -32
  44. package/es/components/PageHeader/PageHeaderTitle.js +2 -1
  45. package/es/components/PageHeader/PageHeaderUtils.js +21 -22
  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 +91 -87
  49. package/lib/components/AddSelect/AddSelectColumn.js +193 -16
  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 +11 -3
  55. package/lib/components/CreateFullPage/CreateFullPageStep.js +4 -4
  56. package/lib/components/CreateTearsheet/CreateTearsheetStep.js +4 -4
  57. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +263 -142
  58. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +39 -36
  59. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +62 -8
  60. package/lib/components/DataSpreadsheet/hooks/useMoveActiveCell.js +37 -0
  61. package/lib/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +39 -0
  62. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +52 -0
  63. package/lib/components/DataSpreadsheet/{checkActiveHeaderCell.js → utils/checkActiveHeaderCell.js} +1 -1
  64. package/lib/components/DataSpreadsheet/{createActiveCellFn.js → utils/createActiveCellFn.js} +20 -9
  65. package/lib/components/DataSpreadsheet/{createCellSelectionArea.js → utils/createCellSelectionArea.js} +8 -4
  66. package/lib/components/DataSpreadsheet/{generateData.js → utils/generateData.js} +6 -0
  67. package/lib/components/DataSpreadsheet/{getCellSize.js → utils/getCellSize.js} +0 -0
  68. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +59 -0
  69. package/lib/components/DataSpreadsheet/utils/handleMultipleKeys.js +92 -0
  70. package/lib/components/DataSpreadsheet/utils/removeCellSelections.js +41 -0
  71. package/lib/components/InlineEdit/InlineEdit.js +52 -10
  72. package/lib/components/OptionsTile/OptionsTile.js +19 -19
  73. package/lib/components/PageHeader/PageHeader.js +35 -32
  74. package/lib/components/PageHeader/PageHeaderTitle.js +2 -1
  75. package/lib/components/PageHeader/PageHeaderUtils.js +21 -22
  76. package/lib/components/index.js +0 -8
  77. package/lib/global/js/package-settings.js +1 -2
  78. package/package.json +13 -13
  79. package/scss/components/AddSelect/_add-select.scss +20 -0
  80. package/scss/components/BreadcrumbWithOverflow/_breadcrumb-with-overflow.scss +7 -3
  81. package/scss/components/CreateSidePanel/_create-side-panel.scss +1 -1
  82. package/scss/components/CreateSidePanel/_storybook-styles.scss +1 -1
  83. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +14 -1
  84. package/scss/components/EditSidePanel/_edit-side-panel.scss +9 -0
  85. package/scss/components/EditSidePanel/_storybook-styles.scss +1 -1
  86. package/scss/components/InlineEdit/_inline-edit.scss +35 -37
  87. package/scss/components/ModifiedTabs/_modified-tabs.scss +5 -0
  88. package/scss/components/NotificationsPanel/_notifications-panel.scss +7 -3
  89. package/scss/components/OptionsTile/_index.scss +1 -1
  90. package/scss/components/OptionsTile/_options-tile.scss +17 -17
  91. package/scss/components/OptionsTile/_storybook-styles.scss +4 -4
  92. package/scss/components/PageHeader/_page-header.scss +3 -2
  93. package/scss/components/SidePanel/_side-panel.scss +8 -8
  94. package/scss/components/Tearsheet/_tearsheet.scss +4 -0
  95. package/scss/components/_index.scss +0 -1
  96. package/es/components/LoadingBar/LoadingBar.js +0 -156
  97. package/es/components/LoadingBar/index.js +0 -7
  98. package/lib/components/LoadingBar/LoadingBar.js +0 -170
  99. package/lib/components/LoadingBar/index.js +0 -13
  100. package/scss/components/LoadingBar/_index.scss +0 -8
  101. package/scss/components/LoadingBar/_loading-bar.scss +0 -224
  102. package/scss/components/LoadingBar/_storybook-styles.scss +0 -14
@@ -39,22 +39,15 @@ var _AddSelectList = require("./AddSelectList");
39
39
 
40
40
  var _AddSelectColumn = require("./AddSelectColumn");
41
41
 
42
- var _excluded = ["className", "columnInputPlaceholder", "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
 
@@ -63,8 +56,7 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
63
56
  description = _ref.description,
64
57
  influencerTitle = _ref.influencerTitle,
65
58
  inputPlaceholder = _ref.inputPlaceholder,
66
- _ref$items = _ref.items,
67
- items = _ref$items === void 0 ? defaults.items : _ref$items,
59
+ items = _ref.items,
68
60
  itemsLabel = _ref.itemsLabel,
69
61
  multi = _ref.multi,
70
62
  noResultsDescription = _ref.noResultsDescription,
@@ -113,74 +105,64 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
113
105
  useNormalizedItems = _useState12[0],
114
106
  setUsedNormalizedItems = _useState12[1];
115
107
 
108
+ var _useState13 = (0, _react.useState)([]),
109
+ _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
110
+ sidebarItems = _useState14[0],
111
+ setSidebarItems = _useState14[1];
112
+
116
113
  (0, _react.useEffect)(function () {
117
- var normalize = function normalize(arr, parentId) {
118
- return arr.reduce(function (acc, cur) {
119
- var children = cur.children,
120
- item = (0, _objectWithoutProperties2.default)(cur, _excluded2);
121
- acc[cur.id] = _objectSpread({}, item);
122
-
123
- if (parentId) {
124
- acc[cur.id].parent = parentId;
125
- }
126
-
127
- if (children) {
128
- acc[cur.id].children = children.map(function (child) {
129
- return child.id;
130
- });
131
- var child = normalize(children, cur.id);
132
- return _objectSpread(_objectSpread({}, acc), child);
133
- }
134
-
135
- return acc;
136
- }, {});
137
- };
138
-
139
- if (multi && items.find(function (item) {
140
- 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;
141
119
  })) {
142
- var newItems = normalize(items);
120
+ var newItems = (0, _addSelectUtils.normalize)(items);
143
121
  setNormalizedItems(newItems);
144
122
  setUsedNormalizedItems(true);
145
123
  }
146
- }, [items, multi]);
124
+ }, [items, multi]); // used to generate columns of results for multi select with hierarchy
147
125
 
148
126
  var getPages = function getPages() {
149
- var results = [];
150
- 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
+
151
130
  var topLevelItems = [];
152
131
  itemIds.forEach(function (itemId) {
153
132
  if (!normalizedItems[itemId].parent) {
154
133
  topLevelItems.push(normalizedItems[itemId]);
155
134
  }
156
135
  });
157
- results.push(topLevelItems);
136
+ pages.push(topLevelItems);
158
137
 
159
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
+ */
160
146
  var pathIds = path.map(function (p) {
161
147
  return p.id;
162
148
  });
163
149
  pathIds.forEach(function (pathId) {
164
- var childItems = [];
150
+ var entries = [];
165
151
  itemIds.forEach(function (itemId) {
166
152
  if (normalizedItems[itemId].parent === pathId) {
167
- childItems.push(normalizedItems[itemId]);
153
+ entries.push(normalizedItems[itemId]);
168
154
  }
169
155
  });
170
- results.push(childItems);
156
+ pages.push(entries);
171
157
  });
172
158
  }
173
159
 
174
- return results;
175
- }; // handlers
176
-
177
-
178
- var handleSearch = function handleSearch(e) {
179
- setSearchTerm(e.target.value);
160
+ return pages;
180
161
  }; // item filtering
181
162
 
182
163
 
183
164
  var getFilteredItems = function getFilteredItems() {
165
+ var entries = items.entries;
184
166
  var hasPath = path.length > 0;
185
167
  /**
186
168
  * how to traverse the levels of items-
@@ -189,10 +171,12 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
189
171
  */
190
172
 
191
173
  var itemsToFilter = hasPath ? path.reduce(function (prev, cur) {
192
- return prev.find(function (item) {
174
+ var _prev$find, _prev$find$children;
175
+
176
+ return (_prev$find = prev.find(function (item) {
193
177
  return item.id === cur.id;
194
- }).children;
195
- }, 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;
196
180
  var results = itemsToFilter.filter(function (item) {
197
181
  if (!searchTerm) {
198
182
  return item;
@@ -207,7 +191,8 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
207
191
  return item.title.toLowerCase().includes(searchTerm);
208
192
  });
209
193
  return results;
210
- };
194
+ }; // only multi select with hierarchy requires the the normalized items
195
+
211
196
 
212
197
  var itemsToDisplay = useNormalizedItems ? getPages() : getFilteredItems();
213
198
  var commonListProps = {
@@ -218,7 +203,42 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
218
203
  setPath: setPath,
219
204
  setSingleSelection: setSingleSelection,
220
205
  singleSelection: singleSelection
221
- }; // 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
222
242
 
223
243
  var body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
224
244
  className: "".concat(blockClass, "__header")
@@ -259,32 +279,6 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
259
279
  title: noResultsTitle
260
280
  }))));
261
281
 
262
- var commonTearsheetProps = {
263
- open: open,
264
- title: title,
265
- description: description,
266
- closeIconDescription: 'temp description',
267
- actions: [{
268
- label: onCloseButtonText,
269
- kind: 'secondary',
270
- onClick: onClose
271
- }, {
272
- label: onSubmitButtonText,
273
- kind: 'primary',
274
- onClick: onSubmit,
275
- disabled: multi ? multiSelection.length === 0 : !singleSelection
276
- }]
277
- };
278
- var sidebarProps = {
279
- influencerTitle: influencerTitle,
280
- items: items,
281
- multiSelection: multiSelection,
282
- noSelectionDescription: noSelectionDescription,
283
- noSelectionTitle: noSelectionTitle,
284
- removeIconDescription: removeIconDescription,
285
- setMultiSelection: setMultiSelection
286
- };
287
- 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));
288
282
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
289
283
  ref: ref,
290
284
  className: classNames
@@ -300,11 +294,16 @@ AddSelect.propTypes = {
300
294
  description: _propTypes.default.string,
301
295
  influencerTitle: _propTypes.default.string,
302
296
  inputPlaceholder: _propTypes.default.string,
303
- items: _propTypes.default.arrayOf(_propTypes.default.shape({
304
- id: _propTypes.default.string.isRequired,
305
- title: _propTypes.default.string.isRequired,
306
- value: _propTypes.default.string.isRequired
307
- })),
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
+ }),
308
307
  itemsLabel: _propTypes.default.string,
309
308
  multi: _propTypes.default.bool,
310
309
  noResultsDescription: _propTypes.default.string,
@@ -321,4 +320,9 @@ AddSelect.propTypes = {
321
320
  textInputLabel: _propTypes.default.string,
322
321
  title: _propTypes.default.string
323
322
  };
323
+ AddSelect.defaultProps = {
324
+ items: {
325
+ entries: []
326
+ }
327
+ };
324
328
  AddSelect.displayName = componentName;
@@ -11,6 +11,8 @@ exports.AddSelectColumn = void 0;
11
11
 
12
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
13
 
14
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
+
14
16
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
17
 
16
18
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
@@ -21,11 +23,15 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
21
23
 
22
24
  var _carbonComponentsReact = require("carbon-components-react");
23
25
 
26
+ var _iconsReact = require("@carbon/icons-react");
27
+
24
28
  var _settings = require("../../settings");
25
29
 
26
30
  var _AddSelectList = require("./AddSelectList");
27
31
 
28
- var _excluded = ["columnInputPlaceholder", "filteredItems", "header"];
32
+ var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
33
+
34
+ var _excluded = ["columnInputPlaceholder", "filteredItems", "header", "multiSelection", "setMultiSelection"];
29
35
 
30
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); }
31
37
 
@@ -34,39 +40,208 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
34
40
  var componentName = 'AddSelect';
35
41
 
36
42
  var AddSelectColumn = function AddSelectColumn(_ref) {
43
+ var _filteredItems$find, _filteredItems$find2;
44
+
37
45
  var columnInputPlaceholder = _ref.columnInputPlaceholder,
38
46
  filteredItems = _ref.filteredItems,
39
47
  header = _ref.header,
48
+ multiSelection = _ref.multiSelection,
49
+ setMultiSelection = _ref.setMultiSelection,
40
50
  props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
41
51
 
42
- var _useState = (0, _react.useState)(''),
52
+ var _useState = (0, _react.useState)(false),
43
53
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
44
- searchTerm = _useState2[0],
45
- setSearchTerm = _useState2[1];
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];
46
76
 
47
77
  var blockClass = "".concat(_settings.pkg.prefix, "--add-select");
48
- var colItems = filteredItems.filter(function (item) {
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) {
49
148
  return item.title.toLowerCase().includes(searchTerm);
50
- });
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
+
51
180
  return /*#__PURE__*/_react.default.createElement("div", {
52
- className: "".concat(blockClass, "__column")
181
+ className: colClass
182
+ }, /*#__PURE__*/_react.default.createElement("div", {
183
+ className: "".concat(colClass, "-search-bar")
53
184
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextInput, {
54
185
  value: searchTerm,
55
186
  onChange: function onChange(e) {
56
187
  return setSearchTerm(e.target.value);
57
188
  },
58
189
  light: true,
59
- placeholder: columnInputPlaceholder
190
+ placeholder: columnInputPlaceholder,
191
+ className: "".concat(colClass, "-input"),
192
+ id: (0, _uuidv.default)(),
193
+ labelText: columnInputPlaceholder
60
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", {
61
229
  className: "".concat(blockClass, "__tag-container")
62
- }, /*#__PURE__*/_react.default.createElement("p", {
63
- className: "".concat(blockClass, "__tag-container-label")
64
- }, header), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Tag, {
65
- type: "gray",
66
- size: "sm"
67
- }, colItems.length)), /*#__PURE__*/_react.default.createElement(_AddSelectList.AddSelectList, (0, _extends2.default)({}, props, {
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, {
68
241
  inColumn: true,
69
- filteredItems: colItems
242
+ filteredItems: colItems,
243
+ setMultiSelection: setMultiSelection,
244
+ multiSelection: multiSelection
70
245
  })));
71
246
  };
72
247
 
@@ -74,6 +249,8 @@ exports.AddSelectColumn = AddSelectColumn;
74
249
  AddSelectColumn.propTypes = {
75
250
  columnInputPlaceholder: _propTypes.default.string,
76
251
  filteredItems: _propTypes.default.array,
77
- header: _propTypes.default.string
252
+ header: _propTypes.default.string,
253
+ multiSelection: _propTypes.default.array,
254
+ setMultiSelection: _propTypes.default.func
78
255
  };
79
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