@carbon/ibm-products 1.22.0 → 1.23.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 (71) hide show
  1. package/css/components/Datagrid/styles/datagrid.css +4 -0
  2. package/css/components/Datagrid/styles/datagrid.css.map +1 -1
  3. package/css/components/Datagrid/styles/index.css +15 -0
  4. package/css/components/Datagrid/styles/index.css.map +1 -1
  5. package/css/components/Datagrid/styles/useExpandedRow.css +12 -0
  6. package/css/components/Datagrid/styles/useExpandedRow.css.map +1 -0
  7. package/css/index-full-carbon.css +46 -143
  8. package/css/index-full-carbon.css.map +1 -1
  9. package/css/index-full-carbon.min.css +3 -3
  10. package/css/index-full-carbon.min.css.map +1 -1
  11. package/css/index-without-carbon-released-only.css +25 -16
  12. package/css/index-without-carbon-released-only.css.map +1 -1
  13. package/css/index-without-carbon-released-only.min.css +2 -2
  14. package/css/index-without-carbon-released-only.min.css.map +1 -1
  15. package/css/index-without-carbon.css +41 -16
  16. package/css/index-without-carbon.css.map +1 -1
  17. package/css/index-without-carbon.min.css +2 -2
  18. package/css/index-without-carbon.min.css.map +1 -1
  19. package/css/index.css +44 -139
  20. package/css/index.css.map +1 -1
  21. package/css/index.min.css +3 -3
  22. package/css/index.min.css.map +1 -1
  23. package/es/components/AddSelect/AddSelect.js +57 -422
  24. package/es/components/AddSelect/AddSelectBody.js +349 -0
  25. package/es/components/AddSelect/AddSelectBreadcrumbs.js +11 -31
  26. package/es/components/AddSelect/AddSelectColumn.js +91 -41
  27. package/es/components/AddSelect/AddSelectFilter.js +1 -2
  28. package/es/components/AddSelect/AddSelectList.js +10 -61
  29. package/es/components/AddSelect/AddSelectMetaPanel.js +1 -1
  30. package/es/components/AddSelect/AddSelectSidebar.js +20 -13
  31. package/es/components/AddSelect/AddSelectSort.js +2 -2
  32. package/es/components/AddSelect/add-select-utils.js +85 -59
  33. package/es/components/AddSelect/hooks/useParentSelect.js +16 -0
  34. package/es/components/AddSelect/hooks/usePath.js +66 -0
  35. package/es/components/CreateTearsheet/preview-components/MultiStepTearsheet.js +1 -5
  36. package/es/components/CreateTearsheet/preview-components/MultiStepWithIntro.js +1 -5
  37. package/es/components/Datagrid/Datagrid/Datagrid.js +1 -1
  38. package/es/components/Datagrid/useExpandedRow.js +12 -4
  39. package/es/components/PageHeader/PageHeaderUtils.js +5 -0
  40. package/es/components/TagSet/TagSet.js +15 -5
  41. package/lib/components/AddSelect/AddSelect.js +54 -430
  42. package/lib/components/AddSelect/AddSelectBody.js +384 -0
  43. package/lib/components/AddSelect/AddSelectBreadcrumbs.js +11 -30
  44. package/lib/components/AddSelect/AddSelectColumn.js +90 -39
  45. package/lib/components/AddSelect/AddSelectFilter.js +1 -2
  46. package/lib/components/AddSelect/AddSelectList.js +11 -60
  47. package/lib/components/AddSelect/AddSelectMetaPanel.js +1 -1
  48. package/lib/components/AddSelect/AddSelectSidebar.js +20 -13
  49. package/lib/components/AddSelect/AddSelectSort.js +2 -2
  50. package/lib/components/AddSelect/add-select-utils.js +88 -64
  51. package/lib/components/AddSelect/hooks/useParentSelect.js +27 -0
  52. package/lib/components/AddSelect/hooks/usePath.js +75 -0
  53. package/lib/components/CreateTearsheet/preview-components/MultiStepTearsheet.js +1 -5
  54. package/lib/components/CreateTearsheet/preview-components/MultiStepWithIntro.js +1 -5
  55. package/lib/components/Datagrid/Datagrid/Datagrid.js +1 -1
  56. package/lib/components/Datagrid/useExpandedRow.js +20 -4
  57. package/lib/components/PageHeader/PageHeaderUtils.js +5 -0
  58. package/lib/components/TagSet/TagSet.js +15 -5
  59. package/package.json +16 -16
  60. package/scss/components/Cascade/_cascade.scss +2 -1
  61. package/scss/components/CreateInfluencer/_create-influencer.scss +0 -2
  62. package/scss/components/CreateTearsheet/_create-tearsheet.scss +1 -1
  63. package/scss/components/Datagrid/_storybook-styles.scss +4 -0
  64. package/scss/components/Datagrid/styles/datagrid.scss +4 -0
  65. package/scss/components/Datagrid/styles/index.scss +1 -0
  66. package/scss/components/Datagrid/styles/useExpandedRow.scss +13 -0
  67. package/scss/components/InlineEdit/_inline-edit.scss +2 -1
  68. package/scss/components/OptionsTile/_options-tile.scss +1 -0
  69. package/scss/components/PageHeader/_page-header.scss +9 -4
  70. package/scss/components/SidePanel/_side-panel.scss +1 -2
  71. package/scss/components/TagSet/_tag-set.scss +4 -0
@@ -0,0 +1,384 @@
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.AddSelectBody = void 0;
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
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 _classnames = _interopRequireDefault(require("classnames"));
25
+
26
+ var _carbonComponentsReact = require("carbon-components-react");
27
+
28
+ var _Tearsheet = require("../../components/Tearsheet");
29
+
30
+ var _NoDataEmptyState = require("../../components/EmptyStates/NoDataEmptyState");
31
+
32
+ var _AddSelectSidebar = require("./AddSelectSidebar");
33
+
34
+ var _AddSelectBreadcrumbs = require("./AddSelectBreadcrumbs");
35
+
36
+ var _AddSelectList = require("./AddSelectList");
37
+
38
+ var _AddSelectColumn = require("./AddSelectColumn");
39
+
40
+ var _AddSelectFilter = require("./AddSelectFilter");
41
+
42
+ var _AddSelectSort = require("./AddSelectSort");
43
+
44
+ var _addSelectUtils = require("./add-select-utils");
45
+
46
+ var _useItemSort2 = require("./hooks/useItemSort");
47
+
48
+ var _useParentSelect2 = _interopRequireDefault(require("./hooks/useParentSelect"));
49
+
50
+ var _usePath2 = _interopRequireDefault(require("./hooks/usePath"));
51
+
52
+ var _settings = require("../../settings");
53
+
54
+ var _excluded = ["className", "clearFiltersText", "closeIconDescription", "columnInputPlaceholder", "defaultModifiers", "description", "globalFilterOpts", "globalFiltersIconDescription", "globalFiltersPlaceholderText", "globalFiltersPrimaryButtonText", "globalFiltersSecondaryButtonText", "globalSearchLabel", "globalSearchPlaceholder", "globalSortBy", "influencerTitle", "items", "itemsLabel", "metaIconDescription", "metaPanelTitle", "multi", "navIconDescription", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "normalizedItems", "onClose", "onCloseButtonText", "onSubmit", "onSubmitButtonText", "open", "portalTarget", "removeIconDescription", "searchResultsLabel", "title", "useNormalizedItems"];
55
+
56
+ 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); }
57
+
58
+ 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; }
59
+
60
+ var blockClass = "".concat(_settings.pkg.prefix, "--add-select");
61
+ var componentName = 'AddSelectBody';
62
+
63
+ var AddSelectBody = function AddSelectBody(_ref) {
64
+ var _cx, _path$;
65
+
66
+ var className = _ref.className,
67
+ clearFiltersText = _ref.clearFiltersText,
68
+ closeIconDescription = _ref.closeIconDescription,
69
+ columnInputPlaceholder = _ref.columnInputPlaceholder,
70
+ defaultModifiers = _ref.defaultModifiers,
71
+ description = _ref.description,
72
+ globalFilterOpts = _ref.globalFilterOpts,
73
+ globalFiltersIconDescription = _ref.globalFiltersIconDescription,
74
+ globalFiltersPlaceholderText = _ref.globalFiltersPlaceholderText,
75
+ globalFiltersPrimaryButtonText = _ref.globalFiltersPrimaryButtonText,
76
+ globalFiltersSecondaryButtonText = _ref.globalFiltersSecondaryButtonText,
77
+ globalSearchLabel = _ref.globalSearchLabel,
78
+ globalSearchPlaceholder = _ref.globalSearchPlaceholder,
79
+ globalSortBy = _ref.globalSortBy,
80
+ influencerTitle = _ref.influencerTitle,
81
+ items = _ref.items,
82
+ itemsLabel = _ref.itemsLabel,
83
+ metaIconDescription = _ref.metaIconDescription,
84
+ metaPanelTitle = _ref.metaPanelTitle,
85
+ multi = _ref.multi,
86
+ navIconDescription = _ref.navIconDescription,
87
+ noResultsDescription = _ref.noResultsDescription,
88
+ noResultsTitle = _ref.noResultsTitle,
89
+ noSelectionDescription = _ref.noSelectionDescription,
90
+ noSelectionTitle = _ref.noSelectionTitle,
91
+ normalizedItems = _ref.normalizedItems,
92
+ onClose = _ref.onClose,
93
+ onCloseButtonText = _ref.onCloseButtonText,
94
+ onSubmit = _ref.onSubmit,
95
+ onSubmitButtonText = _ref.onSubmitButtonText,
96
+ open = _ref.open,
97
+ portalTarget = _ref.portalTarget,
98
+ removeIconDescription = _ref.removeIconDescription,
99
+ searchResultsLabel = _ref.searchResultsLabel,
100
+ title = _ref.title,
101
+ useNormalizedItems = _ref.useNormalizedItems,
102
+ rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
103
+
104
+ // hooks
105
+ var _useState = (0, _react.useState)(''),
106
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
107
+ singleSelection = _useState2[0],
108
+ setSingleSelection = _useState2[1];
109
+
110
+ var _useState3 = (0, _react.useState)([]),
111
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
112
+ multiSelection = _useState4[0],
113
+ setMultiSelection = _useState4[1];
114
+
115
+ var _useState5 = (0, _react.useState)(''),
116
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
117
+ searchTerm = _useState6[0],
118
+ setSearchTerm = _useState6[1];
119
+
120
+ var _useState7 = (0, _react.useState)({}),
121
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
122
+ appliedGlobalFilters = _useState8[0],
123
+ setAppliedGlobalFilters = _useState8[1];
124
+
125
+ var _useState9 = (0, _react.useState)({}),
126
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
127
+ displayMetalPanel = _useState10[0],
128
+ setDisplayMetaPanel = _useState10[1];
129
+
130
+ var _useState11 = (0, _react.useState)(defaultModifiers),
131
+ _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
132
+ appliedModifiers = _useState12[0],
133
+ setAppliedModifiers = _useState12[1];
134
+
135
+ var _useItemSort = (0, _useItemSort2.useItemSort)(),
136
+ sortDirection = _useItemSort.sortDirection,
137
+ setSortDirection = _useItemSort.setSortDirection,
138
+ sortAttribute = _useItemSort.sortAttribute,
139
+ setSortAttribute = _useItemSort.setSortAttribute;
140
+
141
+ var _useParentSelect = (0, _useParentSelect2.default)(),
142
+ parentSelected = _useParentSelect.parentSelected,
143
+ setParentSelected = _useParentSelect.setParentSelected;
144
+
145
+ var _usePath = (0, _usePath2.default)(itemsLabel),
146
+ path = _usePath.path,
147
+ setPath = _usePath.setPath,
148
+ pathOnclick = _usePath.pathOnclick;
149
+
150
+ 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));
151
+ var globalFilterKeys = Object.keys(appliedGlobalFilters);
152
+ var globalFiltersApplied = globalFilterKeys.length > 0; // handlers
153
+
154
+ var handleSearch = function handleSearch(term) {
155
+ setSearchTerm(term);
156
+ };
157
+
158
+ var handleFilter = function handleFilter(filters) {
159
+ setAppliedGlobalFilters(filters);
160
+ };
161
+
162
+ var submitHandler = function submitHandler() {
163
+ if (multi && appliedModifiers.length > 0) {
164
+ var selections = multiSelection.map(function (item) {
165
+ return appliedModifiers.find(function (mod) {
166
+ return mod.id === item;
167
+ });
168
+ });
169
+ onSubmit(selections);
170
+ } else if (multi && appliedModifiers.length === 0) {
171
+ onSubmit(multiSelection);
172
+ } else {
173
+ onSubmit(singleSelection);
174
+ }
175
+ };
176
+
177
+ var setShowBreadsCrumbs = function setShowBreadsCrumbs() {
178
+ if (searchTerm || globalFiltersApplied || !path || path.length === 0) {
179
+ return false;
180
+ }
181
+
182
+ return true;
183
+ };
184
+
185
+ var setShowTags = function setShowTags() {
186
+ if (searchTerm) {
187
+ return true;
188
+ }
189
+
190
+ if (useNormalizedItems) {
191
+ return false;
192
+ }
193
+
194
+ return true;
195
+ };
196
+
197
+ var parentSelectionHandler = function parentSelectionHandler(id, title, parentId) {
198
+ setParentSelected(id);
199
+ setPath(id, title, parentId);
200
+ };
201
+
202
+ var sortFn = (0, _addSelectUtils.sortItems)(sortAttribute, sortDirection);
203
+ var itemsToDisplay = (0, _addSelectUtils.getFilteredItems)(useNormalizedItems, normalizedItems, searchTerm, globalFiltersApplied, globalFilterKeys, appliedGlobalFilters, sortFn, multi, items, path);
204
+ var hasResults = itemsToDisplay.length > 0;
205
+ var showBreadsCrumbs = setShowBreadsCrumbs();
206
+ var showSort = (searchTerm || globalFiltersApplied) && hasResults;
207
+ var showTags = setShowTags();
208
+ var commonListProps = {
209
+ metaIconDescription: metaIconDescription,
210
+ multi: multi,
211
+ multiSelection: multiSelection,
212
+ navIconDescription: navIconDescription,
213
+ path: path,
214
+ setMultiSelection: setMultiSelection,
215
+ setPath: setPath,
216
+ setSingleSelection: setSingleSelection,
217
+ singleSelection: singleSelection,
218
+ setDisplayMetaPanel: setDisplayMetaPanel,
219
+ parentId: path[0].id
220
+ };
221
+ var commonTearsheetProps = {
222
+ className: classNames,
223
+ open: open,
224
+ title: title,
225
+ description: description,
226
+ closeIconDescription: 'temp description',
227
+ actions: [{
228
+ label: onCloseButtonText,
229
+ kind: 'secondary',
230
+ onClick: onClose
231
+ }, {
232
+ label: onSubmitButtonText,
233
+ kind: 'primary',
234
+ onClick: submitHandler,
235
+ disabled: multi ? multiSelection.length === 0 : !singleSelection
236
+ }],
237
+ portalTarget: portalTarget
238
+ };
239
+ var sidebarProps = {
240
+ closeIconDescription: closeIconDescription,
241
+ influencerTitle: influencerTitle,
242
+ items: useNormalizedItems ? normalizedItems : items.entries,
243
+ metaPanelTitle: metaPanelTitle,
244
+ multiSelection: multiSelection,
245
+ noSelectionDescription: noSelectionDescription,
246
+ noSelectionTitle: noSelectionTitle,
247
+ removeIconDescription: removeIconDescription,
248
+ setMultiSelection: setMultiSelection,
249
+ displayMetalPanel: displayMetalPanel,
250
+ setDisplayMetaPanel: setDisplayMetaPanel,
251
+ modifiers: items.modifiers,
252
+ appliedModifiers: appliedModifiers
253
+ };
254
+ var displayColumnView = multi && useNormalizedItems && !searchTerm && !globalFiltersApplied; // main content
255
+
256
+ var body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
257
+ className: "".concat(blockClass, "__header")
258
+ }, /*#__PURE__*/_react.default.createElement(_AddSelectFilter.AddSelectFilter, {
259
+ inputLabel: globalSearchLabel,
260
+ inputPlaceholder: globalSearchPlaceholder,
261
+ searchTerm: searchTerm,
262
+ handleSearch: handleSearch,
263
+ multi: multi,
264
+ filterOpts: globalFilterOpts,
265
+ handleFilter: handleFilter,
266
+ primaryButtonText: globalFiltersPrimaryButtonText,
267
+ secondaryButtonText: globalFiltersSecondaryButtonText,
268
+ placeholder: globalFiltersPlaceholderText,
269
+ iconDescription: globalFiltersIconDescription,
270
+ appliedFilters: appliedGlobalFilters,
271
+ hasFiltersApplied: globalFiltersApplied,
272
+ clearFiltersText: clearFiltersText
273
+ }), /*#__PURE__*/_react.default.createElement("div", {
274
+ className: "".concat(blockClass, "__sub-header")
275
+ }, /*#__PURE__*/_react.default.createElement("div", {
276
+ className: "".concat(blockClass, "__tag-container")
277
+ }, showBreadsCrumbs ? /*#__PURE__*/_react.default.createElement(_AddSelectBreadcrumbs.AddSelectBreadcrumbs, {
278
+ path: path,
279
+ onClick: pathOnclick
280
+ }) : /*#__PURE__*/_react.default.createElement("p", {
281
+ className: "".concat(blockClass, "__tag-container-label")
282
+ }, searchTerm ? searchResultsLabel : itemsLabel), showTags && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Tag, {
283
+ type: "gray",
284
+ size: "sm"
285
+ }, itemsToDisplay.length)), showSort && /*#__PURE__*/_react.default.createElement(_AddSelectSort.AddSelectSort, {
286
+ items: itemsToDisplay,
287
+ setSortAttribute: setSortAttribute,
288
+ setSortDirection: setSortDirection,
289
+ sortAttribute: sortAttribute,
290
+ sortDirection: sortDirection,
291
+ sortBy: globalSortBy
292
+ }))), displayColumnView ? /*#__PURE__*/_react.default.createElement("div", {
293
+ className: "".concat(blockClass, "__columns")
294
+ }, /*#__PURE__*/_react.default.createElement(_AddSelectColumn.AddSelectColumn, (0, _extends2.default)({}, commonListProps, {
295
+ items: itemsToDisplay,
296
+ columnInputPlaceholder: columnInputPlaceholder,
297
+ header: (_path$ = path[0]) === null || _path$ === void 0 ? void 0 : _path$.title
298
+ }))) : /*#__PURE__*/_react.default.createElement("div", null, hasResults ? /*#__PURE__*/_react.default.createElement(_AddSelectList.AddSelectList, (0, _extends2.default)({}, commonListProps, {
299
+ filteredItems: itemsToDisplay,
300
+ modifiers: items.modifiers,
301
+ appliedModifiers: appliedModifiers,
302
+ setAppliedModifiers: setAppliedModifiers,
303
+ setParentSelected: parentSelectionHandler,
304
+ parentSelected: parentSelected,
305
+ parentId: parentSelected || path[0].id
306
+ })) : /*#__PURE__*/_react.default.createElement("div", {
307
+ className: "".concat(blockClass, "__body")
308
+ }, /*#__PURE__*/_react.default.createElement(_NoDataEmptyState.NoDataEmptyState, {
309
+ subtitle: noResultsDescription,
310
+ title: noResultsTitle
311
+ }))));
312
+
313
+ return /*#__PURE__*/_react.default.createElement("div", rest, multi ? /*#__PURE__*/_react.default.createElement(_Tearsheet.Tearsheet, (0, _extends2.default)({}, commonTearsheetProps, {
314
+ influencer: multi && /*#__PURE__*/_react.default.createElement(_AddSelectSidebar.AddSelectSidebar, sidebarProps),
315
+ influencerPosition: "right"
316
+ }), body) : /*#__PURE__*/_react.default.createElement(_Tearsheet.TearsheetNarrow, commonTearsheetProps, body));
317
+ };
318
+
319
+ exports.AddSelectBody = AddSelectBody;
320
+ AddSelectBody.propTypes = {
321
+ className: _propTypes.default.string,
322
+ clearFiltersText: _propTypes.default.string,
323
+ closeIconDescription: _propTypes.default.string,
324
+ columnInputPlaceholder: _propTypes.default.string,
325
+ defaultModifiers: _propTypes.default.array,
326
+ description: _propTypes.default.string,
327
+ globalFilterOpts: _propTypes.default.array,
328
+ globalFiltersIconDescription: _propTypes.default.string,
329
+ globalFiltersPlaceholderText: _propTypes.default.string,
330
+ globalFiltersPrimaryButtonText: _propTypes.default.string,
331
+ globalFiltersSecondaryButtonText: _propTypes.default.string,
332
+ globalSearchLabel: _propTypes.default.string,
333
+ globalSearchPlaceholder: _propTypes.default.string,
334
+ globalSortBy: _propTypes.default.array,
335
+ influencerTitle: _propTypes.default.string,
336
+ items: _propTypes.default.shape({
337
+ modifiers: _propTypes.default.shape({
338
+ id: _propTypes.default.string,
339
+ label: _propTypes.default.string,
340
+ options: _propTypes.default.array
341
+ }),
342
+ sortBy: _propTypes.default.array,
343
+ filterBy: _propTypes.default.array,
344
+ entries: _propTypes.default.arrayOf(_propTypes.default.shape({
345
+ avatar: _propTypes.default.shape({
346
+ alt: _propTypes.default.string,
347
+ icon: _propTypes.default.object,
348
+ src: _propTypes.default.string
349
+ }),
350
+ children: _propTypes.default.object,
351
+ icon: _propTypes.default.object,
352
+ id: _propTypes.default.string.isRequired,
353
+ meta: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.shape({
354
+ id: _propTypes.default.string,
355
+ title: _propTypes.default.string,
356
+ value: _propTypes.default.string
357
+ })), _propTypes.default.node]),
358
+ subtitle: _propTypes.default.string,
359
+ title: _propTypes.default.string.isRequired,
360
+ value: _propTypes.default.string.isRequired
361
+ }))
362
+ }),
363
+ itemsLabel: _propTypes.default.string,
364
+ metaIconDescription: _propTypes.default.string,
365
+ metaPanelTitle: _propTypes.default.string,
366
+ multi: _propTypes.default.bool,
367
+ navIconDescription: _propTypes.default.string,
368
+ noResultsDescription: _propTypes.default.string,
369
+ noResultsTitle: _propTypes.default.string,
370
+ noSelectionDescription: _propTypes.default.string,
371
+ noSelectionTitle: _propTypes.default.string,
372
+ normalizedItems: _propTypes.default.object,
373
+ onClose: _propTypes.default.func,
374
+ onCloseButtonText: _propTypes.default.string,
375
+ onSubmit: _propTypes.default.func,
376
+ onSubmitButtonText: _propTypes.default.string,
377
+ open: _propTypes.default.bool,
378
+ portalTarget: _propTypes.default.node,
379
+ removeIconDescription: _propTypes.default.string,
380
+ searchResultsLabel: _propTypes.default.string,
381
+ title: _propTypes.default.string,
382
+ useNormalizedItems: _propTypes.default.bool
383
+ };
384
+ _AddSelectBreadcrumbs.AddSelectBreadcrumbs.displayName = componentName;
@@ -7,8 +7,6 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.AddSelectBreadcrumbs = void 0;
9
9
 
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
-
12
10
  var _react = _interopRequireDefault(require("react"));
13
11
 
14
12
  var _carbonComponentsReact = require("carbon-components-react");
@@ -24,47 +22,30 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
24
22
  var componentName = 'AddSelectBreadcrumbs';
25
23
 
26
24
  var AddSelectBreadcrumbs = function AddSelectBreadcrumbs(_ref) {
27
- var itemsLabel = _ref.itemsLabel,
28
- path = _ref.path,
29
- setPath = _ref.setPath;
30
-
31
- var clickHandler = function clickHandler(id) {
32
- var pathIdx = path.findIndex(function (entry) {
33
- return entry.id === id;
34
- });
35
- var finalPath = (0, _toConsumableArray2.default)(path).splice(0, pathIdx + 1);
36
- setPath(finalPath);
37
- };
25
+ var path = _ref.path,
26
+ onClick = _ref.onClick;
38
27
 
39
- var resetPath = function resetPath() {
40
- setPath([]);
28
+ var clickHandler = function clickHandler(idx) {
29
+ onClick(idx);
41
30
  };
42
31
 
43
32
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Breadcrumb, {
44
33
  noTrailingSlash: true
45
- }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.BreadcrumbItem, {
46
- onClick: resetPath
47
- }, itemsLabel), path.map(function (entry, idx, arr) {
48
- var isCurrentPage = idx === arr.length - 1;
49
-
50
- var crumbHandler = function crumbHandler() {
51
- if (!isCurrentPage) {
52
- clickHandler(entry.id);
53
- }
54
- };
55
-
34
+ }, path.map(function (entry, idx) {
35
+ var isCurrentPage = idx === path.length - 1;
56
36
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.BreadcrumbItem, {
57
37
  key: entry.id,
58
38
  isCurrentPage: isCurrentPage,
59
- onClick: crumbHandler
39
+ onClick: function onClick() {
40
+ return clickHandler(idx);
41
+ }
60
42
  }, entry.title);
61
43
  }));
62
44
  };
63
45
 
64
46
  exports.AddSelectBreadcrumbs = AddSelectBreadcrumbs;
65
47
  AddSelectBreadcrumbs.propTypes = {
66
- itemsLabel: _propTypes.default.string,
67
- path: _propTypes.default.array,
68
- setPath: _propTypes.default.func
48
+ onClick: _propTypes.default.func,
49
+ path: _propTypes.default.array
69
50
  };
70
51
  AddSelectBreadcrumbs.displayName = componentName;
@@ -37,33 +37,37 @@ var _useItemSort2 = require("./hooks/useItemSort");
37
37
 
38
38
  var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
39
39
 
40
- var _excluded = ["columnInputPlaceholder", "filteredItems", "header", "multiSelection", "setMultiSelection"];
40
+ var _useParentSelect2 = _interopRequireDefault(require("./hooks/useParentSelect"));
41
+
42
+ var _excluded = ["columnInputPlaceholder", "header", "items", "multiSelection", "parentId", "path", "setMultiSelection", "setPath"];
41
43
 
42
44
  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
45
 
44
46
  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
47
 
46
- var componentName = 'AddSelect';
48
+ var blockClass = "".concat(_settings.pkg.prefix, "--add-select");
49
+ var colClass = "".concat(blockClass, "__column");
50
+ var componentName = 'AddSelectColumn';
47
51
 
48
52
  var AddSelectColumn = function AddSelectColumn(_ref) {
49
- var _filteredItems$find;
50
-
51
53
  var columnInputPlaceholder = _ref.columnInputPlaceholder,
52
- filteredItems = _ref.filteredItems,
53
54
  header = _ref.header,
55
+ items = _ref.items,
54
56
  multiSelection = _ref.multiSelection,
57
+ parentId = _ref.parentId,
58
+ path = _ref.path,
55
59
  setMultiSelection = _ref.setMultiSelection,
60
+ setPath = _ref.setPath,
56
61
  props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
57
62
 
58
- var _useState = (0, _react.useState)(false),
59
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
60
- allSelected = _useState2[0],
61
- setAllSelected = _useState2[1];
63
+ var _useParentSelect = (0, _useParentSelect2.default)(),
64
+ parentSelected = _useParentSelect.parentSelected,
65
+ setParentSelected = _useParentSelect.setParentSelected;
62
66
 
63
- var _useState3 = (0, _react.useState)(''),
64
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
65
- searchTerm = _useState4[0],
66
- setSearchTerm = _useState4[1];
67
+ var _useState = (0, _react.useState)(''),
68
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
69
+ searchTerm = _useState2[0],
70
+ setSearchTerm = _useState2[1];
67
71
 
68
72
  var _useItemSort = (0, _useItemSort2.useItemSort)(),
69
73
  sortDirection = _useItemSort.sortDirection,
@@ -71,29 +75,59 @@ var AddSelectColumn = function AddSelectColumn(_ref) {
71
75
  sortAttribute = _useItemSort.sortAttribute,
72
76
  setSortAttribute = _useItemSort.setSortAttribute;
73
77
 
74
- var _useState5 = (0, _react.useState)([]),
75
- _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
76
- filters = _useState6[0],
77
- setFilters = _useState6[1];
78
+ var _useState3 = (0, _react.useState)([]),
79
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
80
+ filters = _useState4[0],
81
+ setFilters = _useState4[1];
82
+
83
+ var entries = items.entries,
84
+ filterBy = items.filterBy,
85
+ sortBy = items.sortBy;
86
+
87
+ var getSelectedItem = function getSelectedItem() {
88
+ var _entries$find;
78
89
 
79
- var blockClass = "".concat(_settings.pkg.prefix, "--add-select");
80
- var colClass = "".concat(blockClass, "__column");
81
- (0, _react.useEffect)(function () {
82
- var isAllSelected = filteredItems.every(function (item) {
83
- return multiSelection.includes(item.id);
90
+ var parentInPath = path.find(function (entry) {
91
+ return entry.parentId === parentId;
84
92
  });
85
- setAllSelected(isAllSelected);
86
- }, [filteredItems, multiSelection]); // filtering
87
-
88
- var colFilterBy = (_filteredItems$find = filteredItems.find(function (item) {
89
- return item.filterBy;
90
- })) === null || _filteredItems$find === void 0 ? void 0 : _filteredItems$find.filterBy;
91
- var filterByOpts = colFilterBy ? filteredItems.map(function (item) {
92
- return item[colFilterBy];
93
+ /**
94
+ * this check helps ensure that when the state of the open columns is cleared by global search
95
+ * that the columns are rebuilt from the data in the path array
96
+ */
97
+
98
+ if (parentInPath && !parentSelected) {
99
+ return entries.find(function (item) {
100
+ return item.id === parentInPath.id;
101
+ });
102
+ }
103
+
104
+ return (_entries$find = entries.find(function (item) {
105
+ return item.id === parentSelected;
106
+ })) !== null && _entries$find !== void 0 ? _entries$find : null;
107
+ };
108
+
109
+ var selectedItem = getSelectedItem();
110
+ /**
111
+ * this check helps prevent children from already being open when you switch from parents
112
+ * on the same level. for example- using the storybook example, if you click on folder 1,
113
+ * file 1, folder 2, and then folder 1 again file 1 children shouldn't be expanded. this
114
+ * check ensures that when a user navigates to parents on the same level that the open state
115
+ * of their children is cleared by referencing the path array.
116
+ */
117
+
118
+ var itemInPath = selectedItem && path.find(function (entry) {
119
+ return entry.id === selectedItem.id;
120
+ });
121
+ var allSelected = entries.every(function (item) {
122
+ return multiSelection.includes(item.id);
123
+ }); // filtering
124
+
125
+ var filterByOpts = filterBy ? entries.map(function (item) {
126
+ return item[filterBy];
93
127
  }) : [];
94
128
 
95
129
  var selectAllHandler = function selectAllHandler(checked) {
96
- var itemIds = filteredItems.map(function (item) {
130
+ var itemIds = entries.map(function (item) {
97
131
  return item.id;
98
132
  });
99
133
 
@@ -138,12 +172,16 @@ var AddSelectColumn = function AddSelectColumn(_ref) {
138
172
  };
139
173
 
140
174
  var sortFn = (0, _addSelectUtils.sortItems)(sortAttribute, sortDirection);
141
- var sortBy = (0, _addSelectUtils.getSortBy)(filteredItems);
142
- var colItems = filteredItems.filter(filterBySearch) // first check if the item meets the search
175
+ var colItems = entries.filter(filterBySearch) // first check if the item meets the search
143
176
  .filter(filterByAttribute) // then check if the item is included in the filter
144
177
  .sort(sortFn); // then sort the items by whatever criteria
145
178
 
146
- return /*#__PURE__*/_react.default.createElement("div", {
179
+ var parentSelectionHandler = function parentSelectionHandler(id, title) {
180
+ setParentSelected(id);
181
+ setPath(id, title, parentId);
182
+ };
183
+
184
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
147
185
  className: colClass
148
186
  }, /*#__PURE__*/_react.default.createElement("div", {
149
187
  className: "".concat(colClass, "-search-bar")
@@ -160,7 +198,7 @@ var AddSelectColumn = function AddSelectColumn(_ref) {
160
198
  }), /*#__PURE__*/_react.default.createElement("div", {
161
199
  className: "".concat(colClass, "-sort-filter")
162
200
  }, /*#__PURE__*/_react.default.createElement(_AddSelectSort.AddSelectSort, {
163
- items: filteredItems,
201
+ items: entries,
164
202
  setSortAttribute: setSortAttribute,
165
203
  setSortDirection: setSortDirection,
166
204
  sortAttribute: sortAttribute,
@@ -201,16 +239,29 @@ var AddSelectColumn = function AddSelectColumn(_ref) {
201
239
  })), /*#__PURE__*/_react.default.createElement(_AddSelectList.AddSelectList, (0, _extends2.default)({}, props, {
202
240
  filteredItems: colItems,
203
241
  setMultiSelection: setMultiSelection,
204
- multiSelection: multiSelection
205
- })));
242
+ multiSelection: multiSelection,
243
+ setParentSelected: parentSelectionHandler
244
+ }))), selectedItem && itemInPath && /*#__PURE__*/_react.default.createElement(AddSelectColumn, (0, _extends2.default)({
245
+ columnInputPlaceholder: columnInputPlaceholder,
246
+ header: selectedItem.title,
247
+ items: selectedItem.children,
248
+ multiSelection: multiSelection,
249
+ setMultiSelection: setMultiSelection,
250
+ parentId: selectedItem.id,
251
+ setPath: setPath,
252
+ path: path
253
+ }, props)));
206
254
  };
207
255
 
208
256
  exports.AddSelectColumn = AddSelectColumn;
209
257
  AddSelectColumn.propTypes = {
210
258
  columnInputPlaceholder: _propTypes.default.string,
211
- filteredItems: _propTypes.default.array,
212
259
  header: _propTypes.default.string,
260
+ items: _propTypes.default.object,
213
261
  multiSelection: _propTypes.default.array,
214
- setMultiSelection: _propTypes.default.func
262
+ parentId: _propTypes.default.string,
263
+ path: _propTypes.default.array,
264
+ setMultiSelection: _propTypes.default.func,
265
+ setPath: _propTypes.default.func
215
266
  };
216
267
  AddSelectColumn.displayName = componentName;
@@ -33,6 +33,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
33
33
 
34
34
  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; }
35
35
 
36
+ var blockClass = "".concat(_settings.pkg.prefix, "--add-select__global-filter");
36
37
  var componentName = 'AddSelectFilter';
37
38
 
38
39
  var AddSelectFilter = function AddSelectFilter(_ref) {
@@ -61,8 +62,6 @@ var AddSelectFilter = function AddSelectFilter(_ref) {
61
62
  open = _useState4[0],
62
63
  setOpen = _useState4[1];
63
64
 
64
- var blockClass = "".concat(_settings.pkg.prefix, "--add-select__global-filter");
65
-
66
65
  var searchHandler = function searchHandler(e) {
67
66
  handleSearch(e.target.value);
68
67
  };