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