@carbon/ibm-products 1.10.0 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. package/css/index-full-carbon.css +76 -30
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +3 -3
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +10 -4
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +1 -1
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +76 -30
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +3 -3
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +76 -30
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +3 -3
  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 +143 -6
  19. package/es/components/AddSelect/AddSelectSidebar.js +1 -14
  20. package/es/components/AddSelect/add-select-utils.js +64 -0
  21. package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -1
  22. package/es/components/DataSpreadsheet/DataSpreadsheet.js +255 -140
  23. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +37 -38
  24. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +55 -6
  25. package/es/components/DataSpreadsheet/hooks/useMoveActiveCell.js +27 -0
  26. package/es/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +28 -0
  27. package/es/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +41 -0
  28. package/es/components/DataSpreadsheet/{checkActiveHeaderCell.js → utils/checkActiveHeaderCell.js} +1 -1
  29. package/es/components/DataSpreadsheet/{createActiveCellFn.js → utils/createActiveCellFn.js} +20 -9
  30. package/es/components/DataSpreadsheet/{createCellSelectionArea.js → utils/createCellSelectionArea.js} +8 -4
  31. package/es/components/DataSpreadsheet/{generateData.js → utils/generateData.js} +6 -0
  32. package/es/components/DataSpreadsheet/{getCellSize.js → utils/getCellSize.js} +0 -0
  33. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +46 -0
  34. package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +82 -0
  35. package/es/components/DataSpreadsheet/utils/removeCellSelections.js +30 -0
  36. package/es/components/InlineEdit/InlineEdit.js +49 -8
  37. package/es/components/OptionsTile/OptionsTile.js +20 -20
  38. package/es/components/OptionsTile/index.js +1 -1
  39. package/es/components/PageHeader/PageHeader.js +35 -32
  40. package/es/components/PageHeader/PageHeaderTitle.js +2 -1
  41. package/es/components/PageHeader/PageHeaderUtils.js +21 -22
  42. package/lib/components/AddSelect/AddSelect.js +91 -87
  43. package/lib/components/AddSelect/AddSelectColumn.js +144 -4
  44. package/lib/components/AddSelect/AddSelectSidebar.js +7 -14
  45. package/lib/components/AddSelect/add-select-utils.js +78 -0
  46. package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -1
  47. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +263 -142
  48. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +39 -36
  49. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +62 -8
  50. package/lib/components/DataSpreadsheet/hooks/useMoveActiveCell.js +37 -0
  51. package/lib/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +39 -0
  52. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +52 -0
  53. package/lib/components/DataSpreadsheet/{checkActiveHeaderCell.js → utils/checkActiveHeaderCell.js} +1 -1
  54. package/lib/components/DataSpreadsheet/{createActiveCellFn.js → utils/createActiveCellFn.js} +20 -9
  55. package/lib/components/DataSpreadsheet/{createCellSelectionArea.js → utils/createCellSelectionArea.js} +8 -4
  56. package/lib/components/DataSpreadsheet/{generateData.js → utils/generateData.js} +6 -0
  57. package/lib/components/DataSpreadsheet/{getCellSize.js → utils/getCellSize.js} +0 -0
  58. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +59 -0
  59. package/lib/components/DataSpreadsheet/utils/handleMultipleKeys.js +92 -0
  60. package/lib/components/DataSpreadsheet/utils/removeCellSelections.js +41 -0
  61. package/lib/components/InlineEdit/InlineEdit.js +52 -10
  62. package/lib/components/OptionsTile/OptionsTile.js +19 -19
  63. package/lib/components/PageHeader/PageHeader.js +35 -32
  64. package/lib/components/PageHeader/PageHeaderTitle.js +2 -1
  65. package/lib/components/PageHeader/PageHeaderUtils.js +21 -22
  66. package/package.json +2 -2
  67. package/scss/components/AddSelect/_add-select.scss +16 -0
  68. package/scss/components/BreadcrumbWithOverflow/_breadcrumb-with-overflow.scss +7 -3
  69. package/scss/components/CreateSidePanel/_create-side-panel.scss +1 -1
  70. package/scss/components/CreateSidePanel/_storybook-styles.scss +1 -1
  71. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +14 -1
  72. package/scss/components/EditSidePanel/_edit-side-panel.scss +9 -0
  73. package/scss/components/EditSidePanel/_storybook-styles.scss +1 -1
  74. package/scss/components/InlineEdit/_inline-edit.scss +31 -37
  75. package/scss/components/OptionsTile/_index.scss +1 -1
  76. package/scss/components/OptionsTile/_options-tile.scss +17 -17
  77. package/scss/components/OptionsTile/_storybook-styles.scss +4 -4
  78. package/scss/components/PageHeader/_page-header.scss +3 -2
  79. package/scss/components/SidePanel/_side-panel.scss +8 -8
@@ -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,10 +23,14 @@ 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
 
32
+ var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
33
+
28
34
  var _excluded = ["columnInputPlaceholder", "filteredItems", "header"];
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); }
@@ -34,6 +40,8 @@ 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,
@@ -44,20 +52,152 @@ var AddSelectColumn = function AddSelectColumn(_ref) {
44
52
  searchTerm = _useState2[0],
45
53
  setSearchTerm = _useState2[1];
46
54
 
55
+ var _useState3 = (0, _react.useState)(''),
56
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
57
+ sortDirection = _useState4[0],
58
+ setSortDirection = _useState4[1];
59
+
60
+ var _useState5 = (0, _react.useState)(''),
61
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
62
+ sortAttribute = _useState6[0],
63
+ setSortAttribute = _useState6[1];
64
+
65
+ var _useState7 = (0, _react.useState)([]),
66
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
67
+ filters = _useState8[0],
68
+ setFilters = _useState8[1];
69
+
47
70
  var blockClass = "".concat(_settings.pkg.prefix, "--add-select");
48
- var colItems = filteredItems.filter(function (item) {
71
+ var colClass = "".concat(blockClass, "__column"); // sorting
72
+
73
+ var colSortBy = (_filteredItems$find = filteredItems.find(function (item) {
74
+ return item.sortBy;
75
+ })) === null || _filteredItems$find === void 0 ? void 0 : _filteredItems$find.sortBy;
76
+ var sortByOpts = colSortBy ? colSortBy.reduce(function (acc, cur) {
77
+ var opts = [{
78
+ id: "".concat(cur, "-asc"),
79
+ itemText: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_iconsReact.ArrowUp16, null), cur),
80
+ direction: 'asc',
81
+ attribute: cur
82
+ }, {
83
+ id: "".concat(cur, "-desc"),
84
+ itemText: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_iconsReact.ArrowDown16, null), cur),
85
+ direction: 'desc',
86
+ attribute: cur
87
+ }];
88
+ return [].concat((0, _toConsumableArray2.default)(acc), opts);
89
+ }, []) : []; // filtering
90
+
91
+ var colFilterBy = (_filteredItems$find2 = filteredItems.find(function (item) {
92
+ return item.filterBy;
93
+ })) === null || _filteredItems$find2 === void 0 ? void 0 : _filteredItems$find2.filterBy;
94
+ var filterByOpts = colFilterBy ? filteredItems.map(function (item) {
95
+ return item[colFilterBy];
96
+ }) : []; // handlers
97
+
98
+ var sortHandler = function sortHandler(_ref2) {
99
+ var direction = _ref2.direction,
100
+ attribute = _ref2.attribute;
101
+ setSortAttribute(attribute);
102
+ setSortDirection(direction);
103
+ };
104
+
105
+ var filterHandler = function filterHandler(checked, opt) {
106
+ if (checked) {
107
+ var newFilters = [].concat((0, _toConsumableArray2.default)(filters), [opt]);
108
+ setFilters(newFilters);
109
+ } else {
110
+ var _newFilters = filters.filter(function (o) {
111
+ return o !== opt;
112
+ });
113
+
114
+ setFilters(_newFilters);
115
+ }
116
+ }; // filter and sort array functions
117
+
118
+
119
+ var filterBySearch = function filterBySearch(item) {
49
120
  return item.title.toLowerCase().includes(searchTerm);
50
- });
121
+ };
122
+
123
+ var filterByAttribute = function filterByAttribute(item) {
124
+ if (filters.length === 0) {
125
+ return true;
126
+ }
127
+
128
+ var filterBy = item.filterBy;
129
+ var filterByValue = item[filterBy];
130
+ return filters.some(function (filter) {
131
+ return filter === filterByValue;
132
+ });
133
+ };
134
+
135
+ var sortItems = function sortItems(a, b) {
136
+ var _a$sortAttribute, _b$sortAttribute;
137
+
138
+ var valueA = (_a$sortAttribute = a[sortAttribute]) === null || _a$sortAttribute === void 0 ? void 0 : _a$sortAttribute.split(' ').join('');
139
+ var valueB = (_b$sortAttribute = b[sortAttribute]) === null || _b$sortAttribute === void 0 ? void 0 : _b$sortAttribute.split(' ').join('');
140
+
141
+ if (sortDirection === 'desc') {
142
+ return valueA > valueB ? -1 : 1;
143
+ }
144
+
145
+ return valueA < valueB ? -1 : 1;
146
+ };
147
+
148
+ var colItems = filteredItems.filter(filterBySearch) // first check if the item meets the search
149
+ .filter(filterByAttribute) // then check if the item is included in the filter
150
+ .sort(sortItems); // then sort the items by whatever criteria
151
+
51
152
  return /*#__PURE__*/_react.default.createElement("div", {
52
- className: "".concat(blockClass, "__column")
153
+ className: colClass
154
+ }, /*#__PURE__*/_react.default.createElement("div", {
155
+ className: "".concat(colClass, "-search-bar")
53
156
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextInput, {
54
157
  value: searchTerm,
55
158
  onChange: function onChange(e) {
56
159
  return setSearchTerm(e.target.value);
57
160
  },
58
161
  light: true,
59
- placeholder: columnInputPlaceholder
162
+ placeholder: columnInputPlaceholder,
163
+ className: "".concat(colClass, "-input"),
164
+ id: (0, _uuidv.default)(),
165
+ labelText: columnInputPlaceholder
60
166
  }), /*#__PURE__*/_react.default.createElement("div", {
167
+ className: "".concat(colClass, "-sort-filter")
168
+ }, sortByOpts.length > 0 && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenu, {
169
+ renderIcon: _iconsReact.ArrowsVertical32,
170
+ className: "".concat(colClass, "-overflow"),
171
+ flipped: true
172
+ }, sortByOpts.map(function (opt) {
173
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenuItem, {
174
+ key: opt.id,
175
+ itemText: opt.itemText,
176
+ onClick: function onClick() {
177
+ return sortHandler(opt);
178
+ }
179
+ });
180
+ })), filterByOpts.length > 0 && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenu, {
181
+ renderIcon: _iconsReact.Filter32,
182
+ className: "".concat(colClass, "-overflow"),
183
+ flipped: true
184
+ }, filterByOpts.map(function (opt) {
185
+ return /*#__PURE__*/_react.default.createElement("div", {
186
+ key: opt,
187
+ className: "".concat(_settings.carbon.prefix, "--overflow-menu-options__option")
188
+ }, /*#__PURE__*/_react.default.createElement("div", {
189
+ className: "".concat(_settings.carbon.prefix, "--overflow-menu-options__btn")
190
+ }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, {
191
+ id: opt,
192
+ labelText: opt,
193
+ onChange: function onChange(checked) {
194
+ return filterHandler(checked, opt);
195
+ },
196
+ checked: filters.find(function (o) {
197
+ return o === opt;
198
+ }) ? true : false
199
+ })));
200
+ })))), /*#__PURE__*/_react.default.createElement("div", {
61
201
  className: "".concat(blockClass, "__tag-container")
62
202
  }, /*#__PURE__*/_react.default.createElement("p", {
63
203
  className: "".concat(blockClass, "__tag-container-label")
@@ -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
  });
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.normalize = exports.flatten = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
+
14
+ var _excluded = ["children"],
15
+ _excluded2 = ["children"];
16
+
17
+ 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; }
18
+
19
+ 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; }
20
+
21
+ /**
22
+ * used to normalize nested data into a single object
23
+ * @param {Array} items - list of entries
24
+ * @returns an object of normalized item data
25
+ */
26
+ var normalize = function normalize(items) {
27
+ var entries = items.entries,
28
+ parentId = items.parentId,
29
+ sortBy = items.sortBy,
30
+ filterBy = items.filterBy;
31
+ return entries.reduce(function (acc, cur) {
32
+ var children = cur.children,
33
+ entry = (0, _objectWithoutProperties2.default)(cur, _excluded);
34
+ acc[cur.id] = _objectSpread({}, entry);
35
+
36
+ if (parentId) {
37
+ acc[cur.id].parent = parentId;
38
+ }
39
+
40
+ if (sortBy !== null && sortBy !== void 0 && sortBy.length) {
41
+ acc[cur.id].sortBy = sortBy;
42
+ }
43
+
44
+ if (filterBy) {
45
+ acc[cur.id].filterBy = filterBy;
46
+ }
47
+
48
+ if (children) {
49
+ acc[cur.id].children = children.entries.map(function (child) {
50
+ return child.id;
51
+ });
52
+ var child = normalize(_objectSpread(_objectSpread({}, children), {}, {
53
+ parentId: cur.id
54
+ }));
55
+ return _objectSpread(_objectSpread({}, acc), child);
56
+ }
57
+
58
+ return acc;
59
+ }, {});
60
+ };
61
+ /**
62
+ * used to create a single searchable array of nested items
63
+ * @param {Array} entries - list of entries
64
+ * @returns an array of items
65
+ */
66
+
67
+
68
+ exports.normalize = normalize;
69
+
70
+ var flatten = function flatten(entries) {
71
+ return entries.reduce(function (prev, cur) {
72
+ var children = cur.children,
73
+ item = (0, _objectWithoutProperties2.default)(cur, _excluded2);
74
+ return prev.concat(item).concat(children ? flatten(children.entries) : []);
75
+ }, []);
76
+ };
77
+
78
+ exports.flatten = flatten;
@@ -94,7 +94,8 @@ var BreadcrumbWithOverflow = function BreadcrumbWithOverflow(_ref) {
94
94
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenu, {
95
95
  ariaLabel: overflowAriaLabel,
96
96
  renderIcon: _iconsReact.OverflowMenuHorizontal32,
97
- className: "".concat(blockClass, "__overflow-menu")
97
+ className: "".concat(blockClass, "__overflow-menu"),
98
+ menuOptionsClass: "".concat(blockClass, "__overflow-menu-options")
98
99
  }, // eslint-disable-next-line react/prop-types
99
100
  overflowItems.map(function (item, index) {
100
101
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.OverflowMenuItem, {