@carbon/ibm-products 1.10.0 → 1.11.2

Sign up to get free protection for your applications and to get access to all the features.
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