@carbon/ibm-products 1.8.0 → 1.11.0

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 (111) hide show
  1. package/css/index-full-carbon.css +270 -5656
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +6 -6
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +58 -3432
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +3 -3
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +238 -3922
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +6 -6
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +238 -3923
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +6 -6
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/AddSelect/AddSelect.js +147 -53
  18. package/es/components/AddSelect/AddSelectBreadcrumbs.js +4 -4
  19. package/es/components/AddSelect/AddSelectColumn.js +195 -0
  20. package/es/components/AddSelect/AddSelectList.js +67 -8
  21. package/es/components/AddSelect/AddSelectSidebar.js +8 -15
  22. package/es/components/AddSelect/add-select-utils.js +64 -0
  23. package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -1
  24. package/es/components/ButtonMenu/ButtonMenu.js +1 -1
  25. package/es/components/DataSpreadsheet/DataSpreadsheet.js +505 -167
  26. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +244 -17
  27. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +74 -8
  28. package/es/components/DataSpreadsheet/hooks/useMoveActiveCell.js +27 -0
  29. package/es/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +28 -0
  30. package/es/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +41 -0
  31. package/es/components/DataSpreadsheet/utils/checkActiveHeaderCell.js +34 -0
  32. package/es/components/DataSpreadsheet/utils/createActiveCellFn.js +58 -0
  33. package/es/components/DataSpreadsheet/utils/createCellSelectionArea.js +49 -0
  34. package/es/components/DataSpreadsheet/{generateData.js → utils/generateData.js} +6 -0
  35. package/es/components/DataSpreadsheet/{getCellSize.js → utils/getCellSize.js} +0 -0
  36. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +46 -0
  37. package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +82 -0
  38. package/es/components/DataSpreadsheet/utils/removeCellSelections.js +30 -0
  39. package/es/components/InlineEdit/InlineEdit.js +80 -39
  40. package/es/components/OptionsTile/OptionsTile.js +31 -21
  41. package/es/components/OptionsTile/index.js +1 -1
  42. package/es/components/PageHeader/PageHeader.js +26 -15
  43. package/es/components/PageHeader/PageHeaderTitle.js +2 -1
  44. package/es/components/PageHeader/PageHeaderUtils.js +24 -29
  45. package/es/components/TagSet/TagSet.js +12 -3
  46. package/es/components/UserProfileImage/UserProfileImage.js +2 -1
  47. package/es/global/js/utils/DisplayBox.js +31 -0
  48. package/es/global/js/utils/deepCloneObject.js +26 -0
  49. package/lib/components/AddSelect/AddSelect.js +150 -54
  50. package/lib/components/AddSelect/AddSelectBreadcrumbs.js +2 -3
  51. package/lib/components/AddSelect/AddSelectColumn.js +219 -0
  52. package/lib/components/AddSelect/AddSelectList.js +65 -8
  53. package/lib/components/AddSelect/AddSelectSidebar.js +14 -15
  54. package/lib/components/AddSelect/add-select-utils.js +78 -0
  55. package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -1
  56. package/lib/components/ButtonMenu/ButtonMenu.js +1 -1
  57. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +514 -170
  58. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +251 -18
  59. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +82 -9
  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/utils/checkActiveHeaderCell.js +45 -0
  64. package/lib/components/DataSpreadsheet/{createActiveCellFn.js → utils/createActiveCellFn.js} +22 -9
  65. package/lib/components/DataSpreadsheet/utils/createCellSelectionArea.js +60 -0
  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 +82 -40
  72. package/lib/components/OptionsTile/OptionsTile.js +30 -20
  73. package/lib/components/PageHeader/PageHeader.js +25 -15
  74. package/lib/components/PageHeader/PageHeaderTitle.js +2 -1
  75. package/lib/components/PageHeader/PageHeaderUtils.js +24 -29
  76. package/lib/components/TagSet/TagSet.js +13 -3
  77. package/lib/components/UserProfileImage/UserProfileImage.js +2 -1
  78. package/lib/global/js/utils/DisplayBox.js +46 -0
  79. package/lib/global/js/utils/deepCloneObject.js +37 -0
  80. package/package.json +17 -17
  81. package/scss/components/ActionBar/_storybook-styles.scss +8 -0
  82. package/scss/components/ActionSet/_storybook-styles.scss +1 -3
  83. package/scss/components/AddSelect/_add-select.scss +99 -14
  84. package/scss/components/BreadcrumbWithOverflow/_breadcrumb-with-overflow.scss +7 -3
  85. package/scss/components/BreadcrumbWithOverflow/_storybook-styles.scss +8 -0
  86. package/scss/components/ButtonSetWithOverflow/_storybook-styles.scss +8 -0
  87. package/scss/components/CreateInfluencer/_create-influencer.scss +2 -0
  88. package/scss/components/CreateModal/_create-modal.scss +1 -0
  89. package/scss/components/CreateSidePanel/_create-side-panel.scss +1 -1
  90. package/scss/components/CreateSidePanel/_storybook-styles.scss +1 -1
  91. package/scss/components/CreateTearsheet/_create-tearsheet.scss +1 -0
  92. package/scss/components/CreateTearsheetNarrow/_create-tearsheet-narrow.scss +1 -0
  93. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +42 -6
  94. package/scss/components/EditSidePanel/_edit-side-panel.scss +9 -0
  95. package/scss/components/EditSidePanel/_storybook-styles.scss +1 -1
  96. package/scss/components/InlineEdit/_inline-edit.scss +53 -43
  97. package/scss/components/InlineEdit/_storybook-styles.scss +2 -0
  98. package/scss/components/LoadingBar/_loading-bar.scss +13 -0
  99. package/scss/components/NotificationsPanel/_notifications-panel.scss +3 -0
  100. package/scss/components/OptionsTile/_index.scss +1 -1
  101. package/scss/components/OptionsTile/_options-tile.scss +17 -17
  102. package/scss/components/OptionsTile/_storybook-styles.scss +4 -4
  103. package/scss/components/PageHeader/_page-header.scss +5 -2
  104. package/scss/components/SidePanel/_side-panel.scss +19 -12
  105. package/scss/components/StatusIcon/_status-icon.scss +1 -0
  106. package/scss/components/TagSet/_storybook-styles.scss +8 -0
  107. package/scss/components/Tearsheet/_tearsheet.scss +1 -2
  108. package/scss/components/UserProfileImage/_user-profile-image.scss +9 -0
  109. package/scss/components/WebTerminal/_web-terminal.scss +2 -0
  110. package/scss/global/styles/_display-box.scss +62 -0
  111. package/es/components/DataSpreadsheet/createActiveCellFn.js +0 -45
@@ -37,26 +37,26 @@ var _AddSelectBreadcrumbs = require("./AddSelectBreadcrumbs");
37
37
 
38
38
  var _AddSelectList = require("./AddSelectList");
39
39
 
40
- var _excluded = ["className", "description", "influencerTitle", "inputPlaceholder", "items", "itemsLabel", "multi", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onClose", "onCloseButtonText", "onSearchFilter", "onSubmit", "onSubmitButtonText", "open", "removeIconDescription", "textInputLabel", "title"];
40
+ var _AddSelectColumn = require("./AddSelectColumn");
41
+
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"];
41
45
 
42
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); }
43
47
 
44
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; }
45
49
 
46
- var componentName = 'AddSelect'; // Default values for props
47
-
48
- var defaults = {
49
- items: Object.freeze([])
50
- };
50
+ var componentName = 'AddSelect';
51
51
  var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
52
52
  var _cx;
53
53
 
54
54
  var className = _ref.className,
55
+ columnInputPlaceholder = _ref.columnInputPlaceholder,
55
56
  description = _ref.description,
56
57
  influencerTitle = _ref.influencerTitle,
57
58
  inputPlaceholder = _ref.inputPlaceholder,
58
- _ref$items = _ref.items,
59
- items = _ref$items === void 0 ? defaults.items : _ref$items,
59
+ items = _ref.items,
60
60
  itemsLabel = _ref.itemsLabel,
61
61
  multi = _ref.multi,
62
62
  noResultsDescription = _ref.noResultsDescription,
@@ -93,15 +93,76 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
93
93
  var _useState7 = (0, _react.useState)(''),
94
94
  _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
95
95
  searchTerm = _useState8[0],
96
- setSearchTerm = _useState8[1]; // handlers
97
-
98
-
99
- var handleSearch = function handleSearch(e) {
100
- setSearchTerm(e.target.value);
96
+ setSearchTerm = _useState8[1];
97
+
98
+ var _useState9 = (0, _react.useState)({}),
99
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
100
+ normalizedItems = _useState10[0],
101
+ setNormalizedItems = _useState10[1];
102
+
103
+ var _useState11 = (0, _react.useState)(false),
104
+ _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
105
+ useNormalizedItems = _useState12[0],
106
+ setUsedNormalizedItems = _useState12[1];
107
+
108
+ var _useState13 = (0, _react.useState)([]),
109
+ _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
110
+ sidebarItems = _useState14[0],
111
+ setSidebarItems = _useState14[1];
112
+
113
+ (0, _react.useEffect)(function () {
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;
119
+ })) {
120
+ var newItems = (0, _addSelectUtils.normalize)(items);
121
+ setNormalizedItems(newItems);
122
+ setUsedNormalizedItems(true);
123
+ }
124
+ }, [items, multi]); // used to generate columns of results for multi select with hierarchy
125
+
126
+ var getPages = function getPages() {
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
+
130
+ var topLevelItems = [];
131
+ itemIds.forEach(function (itemId) {
132
+ if (!normalizedItems[itemId].parent) {
133
+ topLevelItems.push(normalizedItems[itemId]);
134
+ }
135
+ });
136
+ pages.push(topLevelItems);
137
+
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
+ */
146
+ var pathIds = path.map(function (p) {
147
+ return p.id;
148
+ });
149
+ pathIds.forEach(function (pathId) {
150
+ var entries = [];
151
+ itemIds.forEach(function (itemId) {
152
+ if (normalizedItems[itemId].parent === pathId) {
153
+ entries.push(normalizedItems[itemId]);
154
+ }
155
+ });
156
+ pages.push(entries);
157
+ });
158
+ }
159
+
160
+ return pages;
101
161
  }; // item filtering
102
162
 
103
163
 
104
164
  var getFilteredItems = function getFilteredItems() {
165
+ var entries = items.entries;
105
166
  var hasPath = path.length > 0;
106
167
  /**
107
168
  * how to traverse the levels of items-
@@ -110,10 +171,12 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
110
171
  */
111
172
 
112
173
  var itemsToFilter = hasPath ? path.reduce(function (prev, cur) {
113
- return prev.find(function (item) {
174
+ var _prev$find, _prev$find$children;
175
+
176
+ return (_prev$find = prev.find(function (item) {
114
177
  return item.id === cur.id;
115
- }).children;
116
- }, 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;
117
180
  var results = itemsToFilter.filter(function (item) {
118
181
  if (!searchTerm) {
119
182
  return item;
@@ -128,32 +191,11 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
128
191
  return item.title.toLowerCase().includes(searchTerm);
129
192
  });
130
193
  return results;
131
- };
194
+ }; // only multi select with hierarchy requires the the normalized items
132
195
 
133
- var filteredItems = getFilteredItems(); // main content
134
196
 
135
- var body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
136
- className: "".concat(blockClass, "__header")
137
- }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextInput, {
138
- id: "temp-id",
139
- labelText: textInputLabel,
140
- placeholder: inputPlaceholder,
141
- value: searchTerm,
142
- onChange: handleSearch
143
- }), /*#__PURE__*/_react.default.createElement("div", {
144
- className: "".concat(blockClass, "__items-label-container")
145
- }, path.length ? /*#__PURE__*/_react.default.createElement(_AddSelectBreadcrumbs.AddSelectBreadcrumbs, {
146
- itemsLabel: itemsLabel,
147
- path: path,
148
- setPath: setPath
149
- }) : /*#__PURE__*/_react.default.createElement("p", {
150
- className: "".concat(blockClass, "__items-label")
151
- }, itemsLabel), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Tag, {
152
- type: "gray",
153
- size: "sm",
154
- className: "".concat(blockClass, "__items-label-tag")
155
- }, filteredItems.length))), filteredItems.length > 0 ? /*#__PURE__*/_react.default.createElement(_AddSelectList.AddSelectList, {
156
- filteredItems: filteredItems,
197
+ var itemsToDisplay = useNormalizedItems ? getPages() : getFilteredItems();
198
+ var commonListProps = {
157
199
  multi: multi,
158
200
  multiSelection: multiSelection,
159
201
  path: path,
@@ -161,12 +203,15 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
161
203
  setPath: setPath,
162
204
  setSingleSelection: setSingleSelection,
163
205
  singleSelection: singleSelection
164
- }) : /*#__PURE__*/_react.default.createElement("div", {
165
- className: "".concat(blockClass, "__body")
166
- }, /*#__PURE__*/_react.default.createElement(_NoDataEmptyState.NoDataEmptyState, {
167
- subtitle: noResultsDescription,
168
- title: noResultsTitle
169
- })));
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
+ };
170
215
 
171
216
  var commonTearsheetProps = {
172
217
  open: open,
@@ -180,20 +225,60 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
180
225
  }, {
181
226
  label: onSubmitButtonText,
182
227
  kind: 'primary',
183
- onClick: onSubmit,
228
+ onClick: submitHandler,
184
229
  disabled: multi ? multiSelection.length === 0 : !singleSelection
185
230
  }]
186
231
  };
187
232
  var sidebarProps = {
188
233
  influencerTitle: influencerTitle,
189
- items: items,
234
+ items: sidebarItems,
190
235
  multiSelection: multiSelection,
191
236
  noSelectionDescription: noSelectionDescription,
192
237
  noSelectionTitle: noSelectionTitle,
193
238
  removeIconDescription: removeIconDescription,
194
239
  setMultiSelection: setMultiSelection
195
240
  };
196
- 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));
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
242
+
243
+ var body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
244
+ className: "".concat(blockClass, "__header")
245
+ }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextInput, {
246
+ id: "temp-id",
247
+ labelText: textInputLabel,
248
+ placeholder: inputPlaceholder,
249
+ value: searchTerm,
250
+ onChange: handleSearch
251
+ }), /*#__PURE__*/_react.default.createElement("div", {
252
+ className: "".concat(blockClass, "__tag-container")
253
+ }, path.length ? /*#__PURE__*/_react.default.createElement(_AddSelectBreadcrumbs.AddSelectBreadcrumbs, {
254
+ itemsLabel: itemsLabel,
255
+ path: path,
256
+ setPath: setPath
257
+ }) : /*#__PURE__*/_react.default.createElement("p", {
258
+ className: "".concat(blockClass, "__tag-container-label")
259
+ }, itemsLabel), !useNormalizedItems && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Tag, {
260
+ type: "gray",
261
+ size: "sm"
262
+ }, itemsToDisplay.length))), useNormalizedItems ? /*#__PURE__*/_react.default.createElement("div", {
263
+ className: "".concat(blockClass, "__columns")
264
+ }, itemsToDisplay.map(function (page, idx) {
265
+ var _path;
266
+
267
+ return /*#__PURE__*/_react.default.createElement(_AddSelectColumn.AddSelectColumn, (0, _extends2.default)({}, commonListProps, {
268
+ key: idx,
269
+ filteredItems: page,
270
+ header: idx === 0 ? itemsLabel : (_path = path[idx - 1]) === null || _path === void 0 ? void 0 : _path.title,
271
+ columnInputPlaceholder: columnInputPlaceholder
272
+ }));
273
+ })) : /*#__PURE__*/_react.default.createElement("div", null, itemsToDisplay.length > 0 ? /*#__PURE__*/_react.default.createElement(_AddSelectList.AddSelectList, (0, _extends2.default)({}, commonListProps, {
274
+ filteredItems: itemsToDisplay
275
+ })) : /*#__PURE__*/_react.default.createElement("div", {
276
+ className: "".concat(blockClass, "__body")
277
+ }, /*#__PURE__*/_react.default.createElement(_NoDataEmptyState.NoDataEmptyState, {
278
+ subtitle: noResultsDescription,
279
+ title: noResultsTitle
280
+ }))));
281
+
197
282
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
198
283
  ref: ref,
199
284
  className: classNames
@@ -205,14 +290,20 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
205
290
  exports.AddSelect = AddSelect;
206
291
  AddSelect.propTypes = {
207
292
  className: _propTypes.default.string,
293
+ columnInputPlaceholder: _propTypes.default.string,
208
294
  description: _propTypes.default.string,
209
295
  influencerTitle: _propTypes.default.string,
210
296
  inputPlaceholder: _propTypes.default.string,
211
- items: _propTypes.default.arrayOf(_propTypes.default.shape({
212
- id: _propTypes.default.string.isRequired,
213
- title: _propTypes.default.string.isRequired,
214
- value: _propTypes.default.string.isRequired
215
- })),
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
+ }),
216
307
  itemsLabel: _propTypes.default.string,
217
308
  multi: _propTypes.default.bool,
218
309
  noResultsDescription: _propTypes.default.string,
@@ -229,4 +320,9 @@ AddSelect.propTypes = {
229
320
  textInputLabel: _propTypes.default.string,
230
321
  title: _propTypes.default.string
231
322
  };
323
+ AddSelect.defaultProps = {
324
+ items: {
325
+ entries: []
326
+ }
327
+ };
232
328
  AddSelect.displayName = componentName;
@@ -29,11 +29,10 @@ var AddSelectBreadcrumbs = function AddSelectBreadcrumbs(_ref) {
29
29
  setPath = _ref.setPath;
30
30
 
31
31
  var clickHandler = function clickHandler(id) {
32
- var newPath = (0, _toConsumableArray2.default)(path);
33
- var pathIdx = newPath.findIndex(function (entry) {
32
+ var pathIdx = path.findIndex(function (entry) {
34
33
  return entry.id === id;
35
34
  });
36
- var finalPath = newPath.splice(0, pathIdx + 1);
35
+ var finalPath = (0, _toConsumableArray2.default)(path).splice(0, pathIdx + 1);
37
36
  setPath(finalPath);
38
37
  };
39
38
 
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.AddSelectColumn = void 0;
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
+
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
+
18
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
19
+
20
+ var _react = _interopRequireWildcard(require("react"));
21
+
22
+ var _propTypes = _interopRequireDefault(require("prop-types"));
23
+
24
+ var _carbonComponentsReact = require("carbon-components-react");
25
+
26
+ var _iconsReact = require("@carbon/icons-react");
27
+
28
+ var _settings = require("../../settings");
29
+
30
+ var _AddSelectList = require("./AddSelectList");
31
+
32
+ var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
33
+
34
+ var _excluded = ["columnInputPlaceholder", "filteredItems", "header"];
35
+
36
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
37
+
38
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
39
+
40
+ var componentName = 'AddSelect';
41
+
42
+ var AddSelectColumn = function AddSelectColumn(_ref) {
43
+ var _filteredItems$find, _filteredItems$find2;
44
+
45
+ var columnInputPlaceholder = _ref.columnInputPlaceholder,
46
+ filteredItems = _ref.filteredItems,
47
+ header = _ref.header,
48
+ props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
49
+
50
+ var _useState = (0, _react.useState)(''),
51
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
52
+ searchTerm = _useState2[0],
53
+ setSearchTerm = _useState2[1];
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
+
70
+ var blockClass = "".concat(_settings.pkg.prefix, "--add-select");
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) {
120
+ return item.title.toLowerCase().includes(searchTerm);
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
+
152
+ return /*#__PURE__*/_react.default.createElement("div", {
153
+ className: colClass
154
+ }, /*#__PURE__*/_react.default.createElement("div", {
155
+ className: "".concat(colClass, "-search-bar")
156
+ }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextInput, {
157
+ value: searchTerm,
158
+ onChange: function onChange(e) {
159
+ return setSearchTerm(e.target.value);
160
+ },
161
+ light: true,
162
+ placeholder: columnInputPlaceholder,
163
+ className: "".concat(colClass, "-input"),
164
+ id: (0, _uuidv.default)(),
165
+ labelText: columnInputPlaceholder
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", {
201
+ className: "".concat(blockClass, "__tag-container")
202
+ }, /*#__PURE__*/_react.default.createElement("p", {
203
+ className: "".concat(blockClass, "__tag-container-label")
204
+ }, header), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Tag, {
205
+ type: "gray",
206
+ size: "sm"
207
+ }, colItems.length)), /*#__PURE__*/_react.default.createElement(_AddSelectList.AddSelectList, (0, _extends2.default)({}, props, {
208
+ inColumn: true,
209
+ filteredItems: colItems
210
+ })));
211
+ };
212
+
213
+ exports.AddSelectColumn = AddSelectColumn;
214
+ AddSelectColumn.propTypes = {
215
+ columnInputPlaceholder: _propTypes.default.string,
216
+ filteredItems: _propTypes.default.array,
217
+ header: _propTypes.default.string
218
+ };
219
+ AddSelectColumn.displayName = componentName;
@@ -29,6 +29,7 @@ var componentName = 'AddSelectList';
29
29
 
30
30
  var AddSelectList = function AddSelectList(_ref) {
31
31
  var filteredItems = _ref.filteredItems,
32
+ inColumn = _ref.inColumn,
32
33
  multi = _ref.multi,
33
34
  multiSelection = _ref.multiSelection,
34
35
  path = _ref.path,
@@ -57,11 +58,59 @@ var AddSelectList = function AddSelectList(_ref) {
57
58
 
58
59
  var onNavigateItem = function onNavigateItem(_ref2) {
59
60
  var id = _ref2.id,
60
- title = _ref2.title;
61
- setPath([].concat((0, _toConsumableArray2.default)(path), [{
62
- id: id,
63
- title: title
64
- }]));
61
+ title = _ref2.title,
62
+ parent = _ref2.parent;
63
+
64
+ // if multi select
65
+ if (multi) {
66
+ // if top level reset the path
67
+ if (!parent) {
68
+ setPath([{
69
+ id: id,
70
+ title: title
71
+ }]);
72
+ } else {
73
+ var pathIds = path.map(function (p) {
74
+ return p.id;
75
+ }); // if item is already selected somewhere go back to that item
76
+
77
+ if (pathIds.includes(id)) {
78
+ var pathIdx = pathIds.findIndex(function (pathId) {
79
+ return pathId === id;
80
+ });
81
+ var newPath = (0, _toConsumableArray2.default)(path).splice(0, pathIdx + 1);
82
+ setPath((0, _toConsumableArray2.default)(newPath));
83
+ } else {
84
+ // if the item is on the same level as another selected item start from the parent level
85
+ if (path.find(function (p) {
86
+ return p.parent === parent;
87
+ })) {
88
+ var parentIdx = path.findIndex(function (p) {
89
+ return p.id === parent;
90
+ });
91
+
92
+ var _newPath = (0, _toConsumableArray2.default)(path).splice(0, parentIdx + 1);
93
+
94
+ setPath([].concat((0, _toConsumableArray2.default)(_newPath), [{
95
+ id: id,
96
+ title: title,
97
+ parent: parent
98
+ }]));
99
+ } else {
100
+ setPath([].concat((0, _toConsumableArray2.default)(path), [{
101
+ id: id,
102
+ title: title,
103
+ parent: parent
104
+ }]));
105
+ }
106
+ }
107
+ }
108
+ } else {
109
+ setPath([].concat((0, _toConsumableArray2.default)(path), [{
110
+ id: id,
111
+ title: title
112
+ }]));
113
+ }
65
114
  };
66
115
 
67
116
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -71,15 +120,22 @@ var AddSelectList = function AddSelectList(_ref) {
71
120
  className: "".concat(blockClass)
72
121
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListBody, null, filteredItems.map(function (item) {
73
122
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListRow, {
74
- key: item.id
75
- }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListCell, null, /*#__PURE__*/_react.default.createElement("div", {
123
+ key: item.id,
124
+ className: "".concat(blockClass, "-row")
125
+ }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListCell, {
126
+ className: "".concat(blockClass, "-cell")
127
+ }, /*#__PURE__*/_react.default.createElement("div", {
76
128
  className: "".concat(blockClass, "-cell-wrapper")
77
129
  }, multi ? /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, {
78
130
  className: "".concat(blockClass, "-checkbox"),
79
131
  onChange: function onChange(value) {
80
132
  return handleMultiSelection(item.id, value);
81
133
  },
82
- labelText: item.title,
134
+ labelText: !inColumn ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
135
+ className: "".concat(blockClass, "-cell-title")
136
+ }, item.title), /*#__PURE__*/_react.default.createElement("span", {
137
+ className: "".concat(blockClass, "-cell-subtitle")
138
+ }, item.subtitle)) : item.title,
83
139
  id: item.id,
84
140
  checked: multiSelection.includes(item.id)
85
141
  }) : /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButton, {
@@ -101,6 +157,7 @@ var AddSelectList = function AddSelectList(_ref) {
101
157
  exports.AddSelectList = AddSelectList;
102
158
  AddSelectList.propTypes = {
103
159
  filteredItems: _propTypes.default.array,
160
+ inColumn: _propTypes.default.bool,
104
161
  multi: _propTypes.default.bool,
105
162
  multiSelection: _propTypes.default.array,
106
163
  path: _propTypes.default.array,