@carbon/ibm-products 1.5.0 → 1.6.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 (61) hide show
  1. package/css/index-full-carbon.css +206 -44
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +3 -3
  4. package/css/index-without-carbon-released-only.css +31 -27
  5. package/css/index-without-carbon-released-only.css.map +1 -1
  6. package/css/index-without-carbon-released-only.min.css +3 -3
  7. package/css/index-without-carbon.css +193 -39
  8. package/css/index-without-carbon.css.map +1 -1
  9. package/css/index-without-carbon.min.css +3 -3
  10. package/css/index.css +195 -41
  11. package/css/index.css.map +1 -1
  12. package/css/index.min.css +3 -3
  13. package/es/components/AddSelect/AddSelect.js +106 -65
  14. package/es/components/AddSelect/AddSelectBreadcrumbs.js +56 -0
  15. package/es/components/AddSelect/AddSelectList.js +94 -0
  16. package/es/components/AddSelect/AddSelectSidebar.js +46 -0
  17. package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +5 -2
  18. package/es/components/CancelableTextEdit/CancelableTextEdit.js +2 -2
  19. package/es/components/Card/Card.js +6 -4
  20. package/es/components/InlineEdit/InlineEdit.js +223 -74
  21. package/es/components/NotificationsPanel/NotificationsPanel.js +16 -3
  22. package/es/components/PageHeader/PageHeader.js +7 -4
  23. package/es/components/PageHeader/PageHeaderTitle.js +10 -6
  24. package/es/components/SidePanel/SidePanel.js +32 -15
  25. package/es/components/WebTerminal/WebTerminal.js +1 -1
  26. package/es/settings.js +0 -5
  27. package/lib/components/AddSelect/AddSelect.js +110 -65
  28. package/lib/components/AddSelect/AddSelectBreadcrumbs.js +71 -0
  29. package/lib/components/AddSelect/AddSelectList.js +112 -0
  30. package/lib/components/AddSelect/AddSelectSidebar.js +63 -0
  31. package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +5 -2
  32. package/lib/components/CancelableTextEdit/CancelableTextEdit.js +1 -1
  33. package/lib/components/Card/Card.js +6 -4
  34. package/lib/components/InlineEdit/InlineEdit.js +219 -72
  35. package/lib/components/NotificationsPanel/NotificationsPanel.js +13 -1
  36. package/lib/components/PageHeader/PageHeader.js +7 -4
  37. package/lib/components/PageHeader/PageHeaderTitle.js +10 -6
  38. package/lib/components/SidePanel/SidePanel.js +32 -15
  39. package/lib/components/WebTerminal/WebTerminal.js +1 -1
  40. package/lib/settings.js +0 -6
  41. package/package.json +12 -12
  42. package/scss/components/AddSelect/_add-select.scss +24 -0
  43. package/scss/components/BreadcrumbWithOverflow/_index.scss +1 -1
  44. package/scss/components/CancelableTextEdit/_cancelable-text-edit.scss +1 -0
  45. package/scss/components/CreateInfluencer/_create-influencer.scss +4 -4
  46. package/scss/components/CreateTearsheet/_create-tearsheet.scss +2 -2
  47. package/scss/components/InlineEdit/_inline-edit.scss +210 -9
  48. package/scss/components/InlineEdit/_storybook-styles.scss +13 -0
  49. package/scss/components/NotificationsPanel/_notifications-panel.scss +2 -2
  50. package/scss/components/PageHeader/_index.scss +1 -1
  51. package/scss/components/PageHeader/_page-header.scss +1 -1
  52. package/scss/components/ProductiveCard/_productive-card.scss +0 -4
  53. package/scss/components/SidePanel/_side-panel.scss +15 -6
  54. package/scss/components/StatusIcon/_index.scss +1 -1
  55. package/scss/components/TagSet/_index.scss +1 -1
  56. package/scss/components/UserProfileImage/_index.scss +1 -1
  57. package/scss/components/WebTerminal/_web-terminal.scss +2 -2
  58. package/scss/global/styles/_project-settings.scss +5 -1
  59. package/es/generated/feature-flags/feature-flags.js +0 -15
  60. package/lib/generated/feature-flags/feature-flags.js +0 -22
  61. package/scss/generated/feature-flags/_feature-flags.scss +0 -19
@@ -89,8 +89,12 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
89
89
  var sidePanelInnerRef = useRef();
90
90
  var sidePanelCloseRef = useRef();
91
91
  var previousState = usePreviousValue({
92
- size: size
93
- }); // scroll panel to top going between steps
92
+ size: size,
93
+ open: open
94
+ });
95
+ var reducedMotion = window && window.matchMedia ? window.matchMedia('(prefers-reduced-motion: reduce)') : {
96
+ matches: true
97
+ }; // scroll panel to top going between steps
94
98
 
95
99
  useEffect(function () {
96
100
  var panelRef = ref || sidePanelRef;
@@ -169,7 +173,7 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
169
173
 
170
174
 
171
175
  useEffect(function () {
172
- if (open && animateTitle && animationComplete && title && title.length) {
176
+ if (open && animateTitle && animationComplete && title && title.length && !reducedMotion.matches) {
173
177
  var _document$querySelect2, _document$querySelect3, _document$querySelect4;
174
178
 
175
179
  var sidePanelOuter = document.querySelector("#".concat(blockClass, "-outer"));
@@ -261,7 +265,7 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
261
265
  _sidePanelOuter === null || _sidePanelOuter === void 0 ? void 0 : _sidePanelOuter.style.setProperty("--".concat(blockClass, "--subtitle-container-height"), "".concat(_sidePanelSubtitleElementHeight, "px"));
262
266
  _sidePanelOuter === null || _sidePanelOuter === void 0 ? void 0 : _sidePanelOuter.style.setProperty("--".concat(blockClass, "--action-bar-container-height"), "".concat(sidePanelActionBarElementHeight, "px"));
263
267
  }
264
- }, [open, animateTitle, animationComplete, shouldRender, panelHeight, title, size]); // click outside functionality if `includeOverlay` prop is set
268
+ }, [open, animateTitle, animationComplete, shouldRender, panelHeight, title, size, reducedMotion.matches]); // click outside functionality if `includeOverlay` prop is set
265
269
 
266
270
  useEffect(function () {
267
271
  var handleOutsideClick = function handleOutsideClick(event) {
@@ -287,7 +291,7 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
287
291
  return function () {
288
292
  document.removeEventListener('click', handleOutsideClick);
289
293
  };
290
- }, [includeOverlay, onRequestClose, open, preventCloseOnClickOutside, ref]); // initialize the side panel to open
294
+ }, [includeOverlay, onRequestClose, open, preventCloseOnClickOutside, ref, onUnmount]); // initialize the side panel to open
291
295
 
292
296
  useEffect(function () {
293
297
  if (open) {
@@ -297,14 +301,21 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
297
301
 
298
302
  var onAnimationEnd = function onAnimationEnd() {
299
303
  if (!open) {
300
- onUnmount && onUnmount();
304
+ onUnmount === null || onUnmount === void 0 ? void 0 : onUnmount();
301
305
  setRender(false);
302
306
  }
303
307
 
304
308
  setAnimationComplete(true);
305
- }; // initializes the side panel to open
309
+ }; // Set the internal state `animationComplete` to true if
310
+ // prefers reduced motion is true
306
311
 
307
312
 
313
+ useEffect(function () {
314
+ if (reducedMotion.matches) {
315
+ setAnimationComplete(true);
316
+ }
317
+ }, [reducedMotion.matches]); // initializes the side panel to open
318
+
308
319
  var _onAnimationStart = function onAnimationStart(event) {
309
320
  event.persist();
310
321
  var isPanelTarget = event.target.id === "".concat(blockClass, "-outer");
@@ -325,7 +336,13 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
325
336
  pageContentElement.style.marginLeft = 0;
326
337
  }
327
338
  }
328
- }, [open, placement, selectorPageContent, slideIn]); // used to set margins of content for slide in panel version
339
+ }, [open, placement, selectorPageContent, slideIn]);
340
+ useEffect(function () {
341
+ if (!open && previousState !== null && previousState !== void 0 && previousState.open && reducedMotion.matches) {
342
+ setRender(false);
343
+ onUnmount === null || onUnmount === void 0 ? void 0 : onUnmount();
344
+ }
345
+ }, [open, onUnmount, reducedMotion.matches, previousState === null || previousState === void 0 ? void 0 : previousState.open]); // used to set margins of content for slide in panel version
329
346
 
330
347
  useEffect(function () {
331
348
  if (shouldRender && slideIn) {
@@ -333,15 +350,15 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
333
350
 
334
351
  if (placement && placement === 'right' && pageContentElement) {
335
352
  pageContentElement.style.marginRight = 0;
336
- pageContentElement.style.transition = "margin-right ".concat(moderate02);
353
+ pageContentElement.style.transition = !reducedMotion.matches ? "margin-right ".concat(moderate02) : null;
337
354
  pageContentElement.style.marginRight = SIDE_PANEL_SIZES[size];
338
355
  } else if (pageContentElement) {
339
356
  pageContentElement.style.marginLeft = 0;
340
- pageContentElement.style.transition = "margin-left ".concat(moderate02);
357
+ pageContentElement.style.transition = !reducedMotion.matches ? "margin-left ".concat(moderate02) : null;
341
358
  pageContentElement.style.marginLeft = SIDE_PANEL_SIZES[size];
342
359
  }
343
360
  }
344
- }, [slideIn, selectorPageContent, placement, shouldRender, size]); // adds focus trap functionality
361
+ }, [slideIn, selectorPageContent, placement, shouldRender, size, reducedMotion.matches]); // adds focus trap functionality
345
362
 
346
363
  /* istanbul ignore next */
347
364
 
@@ -368,7 +385,7 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
368
385
  var _cx, _cx2;
369
386
 
370
387
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
371
- className: cx("".concat(blockClass, "__title-container"), (_cx = {}, _defineProperty(_cx, "".concat(blockClass, "__on-detail-step"), currentStep > 0), _defineProperty(_cx, "".concat(blockClass, "__on-detail-step-without-title"), currentStep > 0 && !title), _defineProperty(_cx, "".concat(blockClass, "__title-container--no-title-animation"), !animateTitle), _defineProperty(_cx, "".concat(blockClass, "__title-container-is-animating"), !animationComplete || !open), _defineProperty(_cx, "".concat(blockClass, "__title-container-without-title"), !title), _cx))
388
+ className: cx("".concat(blockClass, "__title-container"), (_cx = {}, _defineProperty(_cx, "".concat(blockClass, "__on-detail-step"), currentStep > 0), _defineProperty(_cx, "".concat(blockClass, "__on-detail-step-without-title"), currentStep > 0 && !title), _defineProperty(_cx, "".concat(blockClass, "__title-container--no-title-animation"), !animateTitle), _defineProperty(_cx, "".concat(blockClass, "__title-container-is-animating"), !animationComplete || !open), _defineProperty(_cx, "".concat(blockClass, "__title-container-without-title"), !title), _defineProperty(_cx, "".concat(blockClass, "__title-container--reduced-motion"), reducedMotion.matches), _cx))
372
389
  }, currentStep > 0 && /*#__PURE__*/React.createElement(Button, {
373
390
  "aria-label": navigationBackIconDescription,
374
391
  kind: "ghost",
@@ -426,7 +443,7 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
426
443
  className: "".concat(blockClass, "__title-text"),
427
444
  title: title,
428
445
  "aria-hidden": false
429
- }, title), animateTitle && title && title.length && /*#__PURE__*/React.createElement("h2", {
446
+ }, title), animateTitle && title && title.length && !reducedMotion.matches && /*#__PURE__*/React.createElement("h2", {
430
447
  className: "".concat(blockClass, "__collapsed-title-text"),
431
448
  title: title,
432
449
  "aria-hidden": true
@@ -443,7 +460,7 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
443
460
  id: "".concat(blockClass, "-outer"),
444
461
  className: mainPanelClassNames,
445
462
  style: {
446
- animation: "".concat(open ? placement === 'right' ? "sidePanelEntranceRight ".concat(moderate02) : "sidePanelEntranceLeft ".concat(moderate02) : placement === 'right' ? "sidePanelExitRight ".concat(moderate02) : "sidePanelExitLeft ".concat(moderate02))
463
+ animation: !reducedMotion.matches ? "".concat(open ? placement === 'right' ? "side-panel-entrance-right ".concat(moderate02) : "side-panel-entrance-left ".concat(moderate02) : placement === 'right' ? "side-panel-exit-right ".concat(moderate02) : "side-panel-exit-left ".concat(moderate02)) : null
447
464
  },
448
465
  onAnimationEnd: onAnimationEnd,
449
466
  onAnimationStart: function onAnimationStart(event) {
@@ -476,7 +493,7 @@ export var SidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
476
493
  ref: sidePanelOverlayRef,
477
494
  className: "".concat(blockClass, "__overlay"),
478
495
  style: {
479
- animation: "".concat(open ? "sidePanelOverlayEntrance ".concat(moderate02) : "sidePanelOverlayExit ".concat(moderate02))
496
+ animation: !reducedMotion.matches ? "".concat(open ? "side-panel-overlay-entrance ".concat(moderate02) : "side-panel-overlay-exit ".concat(moderate02)) : null
480
497
  }
481
498
  }));
482
499
  }); // Return a placeholder if not released and not enabled by feature flag
@@ -63,7 +63,7 @@ export var WebTerminal = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
63
63
  ref: ref,
64
64
  className: cx([blockClass, (_ref2 = {}, _defineProperty(_ref2, "".concat(blockClass, "--open"), open), _defineProperty(_ref2, "".concat(blockClass, "--closed"), !open), _defineProperty(_ref2, className, className), _ref2)]),
65
65
  style: {
66
- animation: "".concat(open ? 'webTerminalEntrance 250ms' : 'webTerminalExit 250ms')
66
+ animation: "".concat(open ? 'web-terminal-entrance 250ms' : 'web-terminal-exit 250ms')
67
67
  },
68
68
  onAnimationEnd: onAnimationEnd
69
69
  }), /*#__PURE__*/React.createElement("header", {
package/es/settings.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { Canary } from './components/_Canary';
2
- import featureFlags from './generated/feature-flags/feature-flags';
3
2
  import pkgSettings from './global/js/package-settings';
4
3
  import { settings as carbonSettings } from 'carbon-components';
5
4
  import React from 'react';
@@ -13,10 +12,6 @@ export var carbon = {
13
12
  carbonSettings.prefix = val;
14
13
  },
15
14
 
16
- get flags() {
17
- return featureFlags;
18
- },
19
-
20
15
  get themes() {
21
16
  return themes;
22
17
  }
@@ -11,6 +11,8 @@ exports.AddSelect = void 0;
11
11
 
12
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
13
 
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
14
16
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
17
 
16
18
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
@@ -29,7 +31,13 @@ var _NoDataEmptyState = require("../../components/EmptyStates/NoDataEmptyState")
29
31
 
30
32
  var _settings = require("../../settings");
31
33
 
32
- var _excluded = ["actions", "className", "description", "influencerTitle", "inputPlaceholder", "items", "itemsLabel", "multi", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onSearchFilter", "open", "title"];
34
+ var _AddSelectSidebar = require("./AddSelectSidebar");
35
+
36
+ var _AddSelectBreadcrumbs = require("./AddSelectBreadcrumbs");
37
+
38
+ var _AddSelectList = require("./AddSelectList");
39
+
40
+ var _excluded = ["className", "description", "influencerTitle", "inputPlaceholder", "items", "itemsLabel", "multi", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onClose", "onCloseButtonText", "onSearchFilter", "onSubmit", "onSubmitButtonText", "open", "title"];
33
41
 
34
42
  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); }
35
43
 
@@ -37,8 +45,9 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
37
45
 
38
46
  var componentName = 'AddSelect';
39
47
  var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
40
- var actions = _ref.actions,
41
- className = _ref.className,
48
+ var _cx;
49
+
50
+ var className = _ref.className,
42
51
  description = _ref.description,
43
52
  influencerTitle = _ref.influencerTitle,
44
53
  inputPlaceholder = _ref.inputPlaceholder,
@@ -49,70 +58,72 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
49
58
  noResultsTitle = _ref.noResultsTitle,
50
59
  noSelectionDescription = _ref.noSelectionDescription,
51
60
  noSelectionTitle = _ref.noSelectionTitle,
61
+ onClose = _ref.onClose,
62
+ onCloseButtonText = _ref.onCloseButtonText,
52
63
  onSearchFilter = _ref.onSearchFilter,
64
+ onSubmit = _ref.onSubmit,
65
+ onSubmitButtonText = _ref.onSubmitButtonText,
53
66
  open = _ref.open,
54
67
  title = _ref.title,
55
68
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
56
- var blockClass = "".concat(_settings.pkg.prefix, "--add-select");
57
- var commonTearsheetProps = {
58
- open: open,
59
- title: title,
60
- actions: actions,
61
- description: description,
62
- closeIconDescription: 'temp description'
63
- }; // hooks
69
+ var blockClass = "".concat(_settings.pkg.prefix, "--add-select"); // hooks
64
70
 
65
- var _useState = (0, _react.useState)(0),
66
- _useState2 = (0, _slicedToArray2.default)(_useState, 1),
67
- selected = _useState2[0];
71
+ var _useState = (0, _react.useState)([]),
72
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
73
+ path = _useState2[0],
74
+ setPath = _useState2[1];
68
75
 
69
76
  var _useState3 = (0, _react.useState)(''),
70
77
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
71
- searchTerm = _useState4[0],
72
- setSearchTerm = _useState4[1]; // handlers
78
+ singleSelection = _useState4[0],
79
+ setSingleSelection = _useState4[1];
73
80
 
81
+ var _useState5 = (0, _react.useState)([]),
82
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
83
+ multiSelection = _useState6[0],
84
+ setMultiSelection = _useState6[1];
74
85
 
75
- var onSearchHandler = function onSearchHandler(e) {
76
- var value = e.target.value;
77
- setSearchTerm(value);
86
+ var _useState7 = (0, _react.useState)(''),
87
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
88
+ searchTerm = _useState8[0],
89
+ setSearchTerm = _useState8[1]; // handlers
78
90
 
79
- if (onSearchFilter) {
80
- onSearchFilter(value);
81
- }
82
- }; // data manipulation
83
91
 
84
-
85
- var getFilteredItems = function getFilteredItems() {
86
- // if the user uses their own filter then they provide the filtered items
87
- if (onSearchFilter) {
88
- return items;
89
- } // by default, just filter results by their label from a single search term
92
+ var handleSearch = function handleSearch(e) {
93
+ setSearchTerm(e.target.value);
94
+ }; // item filtering
90
95
 
91
96
 
92
- return items.filter(function (i) {
93
- return i.label.includes(searchTerm);
97
+ var getFilteredItems = function getFilteredItems() {
98
+ var hasPath = path.length > 0;
99
+ /**
100
+ * how to traverse the levels of items-
101
+ * the path represents the ids of each level / item / breadcrumb
102
+ * using this path we can drill down into the items until we get to the last one the user selected
103
+ */
104
+
105
+ var itemsToFilter = hasPath ? path.reduce(function (prev, cur) {
106
+ return prev.find(function (item) {
107
+ return item.id === cur.id;
108
+ }).children;
109
+ }, items) : items;
110
+ var results = itemsToFilter.filter(function (item) {
111
+ if (!searchTerm) {
112
+ return item;
113
+ } // if user provides their own filter function use that
114
+
115
+
116
+ if (onSearchFilter) {
117
+ return onSearchFilter(item, searchTerm);
118
+ } // otherwise use the default label filter
119
+
120
+
121
+ return item.label.toLowerCase().includes(searchTerm);
94
122
  });
123
+ return results;
95
124
  };
96
125
 
97
- var filteredResults = getFilteredItems(); // sidebar
98
-
99
- var influencer = /*#__PURE__*/_react.default.createElement("div", {
100
- className: "".concat(blockClass, "__influencer")
101
- }, /*#__PURE__*/_react.default.createElement("div", {
102
- className: "".concat(blockClass, "__influencer-header")
103
- }, /*#__PURE__*/_react.default.createElement("p", {
104
- className: "".concat(blockClass, "__influencer-title")
105
- }, influencerTitle), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Tag, {
106
- type: "gray",
107
- size: "sm"
108
- }, selected)), /*#__PURE__*/_react.default.createElement("div", {
109
- className: "".concat(blockClass, "__influencer-body")
110
- }, selected > 0 ? /*#__PURE__*/_react.default.createElement("p", null, "content") : /*#__PURE__*/_react.default.createElement(_NoDataEmptyState.NoDataEmptyState, {
111
- subtitle: noSelectionDescription,
112
- title: noSelectionTitle,
113
- size: "sm"
114
- }))); // main content
115
-
126
+ var filteredItems = getFilteredItems(); // main content
116
127
 
117
128
  var body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
118
129
  className: "".concat(blockClass, "__header")
@@ -121,46 +132,76 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
121
132
  labelText: "temp label",
122
133
  placeholder: inputPlaceholder,
123
134
  value: searchTerm,
124
- onChange: onSearchHandler
135
+ onChange: handleSearch
125
136
  }), /*#__PURE__*/_react.default.createElement("div", {
126
137
  className: "".concat(blockClass, "__items-label-container")
127
- }, /*#__PURE__*/_react.default.createElement("p", {
138
+ }, path.length ? /*#__PURE__*/_react.default.createElement(_AddSelectBreadcrumbs.AddSelectBreadcrumbs, {
139
+ itemsLabel: itemsLabel,
140
+ path: path,
141
+ setPath: setPath
142
+ }) : /*#__PURE__*/_react.default.createElement("p", {
128
143
  className: "".concat(blockClass, "__items-label")
129
144
  }, itemsLabel), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Tag, {
130
145
  type: "gray",
131
- size: "sm"
132
- }, filteredResults.length))), filteredResults.length > 0 ? /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListWrapper, {
133
- selection: true,
134
- className: "".concat(blockClass, "__selections")
135
- }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListBody, null, filteredResults.map(function (item) {
136
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListRow, {
137
- key: item.id
138
- }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListCell, null, /*#__PURE__*/_react.default.createElement("p", null, item.label)));
139
- }))) : /*#__PURE__*/_react.default.createElement("div", {
146
+ size: "sm",
147
+ className: "".concat(blockClass, "__items-label-tag")
148
+ }, filteredItems.length))), filteredItems.length > 0 ? /*#__PURE__*/_react.default.createElement(_AddSelectList.AddSelectList, {
149
+ filteredItems: filteredItems,
150
+ multi: multi,
151
+ multiSelection: multiSelection,
152
+ path: path,
153
+ setMultiSelection: setMultiSelection,
154
+ setPath: setPath,
155
+ setSingleSelection: setSingleSelection,
156
+ singleSelection: singleSelection
157
+ }) : /*#__PURE__*/_react.default.createElement("div", {
140
158
  className: "".concat(blockClass, "__body")
141
159
  }, /*#__PURE__*/_react.default.createElement(_NoDataEmptyState.NoDataEmptyState, {
142
160
  subtitle: noResultsDescription,
143
161
  title: noResultsTitle
144
162
  })));
145
163
 
164
+ var commonTearsheetProps = {
165
+ open: open,
166
+ title: title,
167
+ description: description,
168
+ closeIconDescription: 'temp description',
169
+ actions: [{
170
+ label: onCloseButtonText,
171
+ kind: 'secondary',
172
+ onClick: onClose
173
+ }, {
174
+ label: onSubmitButtonText,
175
+ kind: 'primary',
176
+ onClick: onSubmit,
177
+ disabled: multi ? multiSelection.length === 0 : !singleSelection
178
+ }]
179
+ };
180
+ var sidebarProps = {
181
+ influencerTitle: influencerTitle,
182
+ multiSelection: multiSelection,
183
+ noSelectionDescription: noSelectionDescription,
184
+ noSelectionTitle: noSelectionTitle
185
+ };
186
+ 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));
146
187
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
147
188
  ref: ref,
148
- className: (0, _classnames.default)(className, blockClass)
189
+ className: classNames
149
190
  }, rest), multi ? /*#__PURE__*/_react.default.createElement(_Tearsheet.Tearsheet, (0, _extends2.default)({}, commonTearsheetProps, {
150
- influencer: multi && influencer,
191
+ influencer: multi && /*#__PURE__*/_react.default.createElement(_AddSelectSidebar.AddSelectSidebar, sidebarProps),
151
192
  influencerPosition: "right"
152
193
  }), body) : /*#__PURE__*/_react.default.createElement(_Tearsheet.TearsheetNarrow, commonTearsheetProps, body));
153
194
  });
154
195
  exports.AddSelect = AddSelect;
155
196
  AddSelect.propTypes = {
156
- actions: _propTypes.default.array,
157
197
  className: _propTypes.default.string,
158
198
  description: _propTypes.default.string,
159
199
  influencerTitle: _propTypes.default.string,
160
200
  inputPlaceholder: _propTypes.default.string,
161
201
  items: _propTypes.default.arrayOf(_propTypes.default.shape({
202
+ id: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
162
203
  label: _propTypes.default.string,
163
- id: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number])
204
+ value: _propTypes.default.string
164
205
  })),
165
206
  itemsLabel: _propTypes.default.string,
166
207
  multi: _propTypes.default.bool,
@@ -168,7 +209,11 @@ AddSelect.propTypes = {
168
209
  noResultsTitle: _propTypes.default.string,
169
210
  noSelectionDescription: _propTypes.default.string,
170
211
  noSelectionTitle: _propTypes.default.string,
212
+ onClose: _propTypes.default.func,
213
+ onCloseButtonText: _propTypes.default.string,
171
214
  onSearchFilter: _propTypes.default.func,
215
+ onSubmit: _propTypes.default.func,
216
+ onSubmitButtonText: _propTypes.default.string,
172
217
  open: _propTypes.default.bool,
173
218
  title: _propTypes.default.string
174
219
  };
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.AddSelectBreadcrumbs = void 0;
9
+
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _carbonComponentsReact = require("carbon-components-react");
15
+
16
+ var _propTypes = _interopRequireDefault(require("prop-types"));
17
+
18
+ //
19
+ // Copyright IBM Corp. 2022
20
+ //
21
+ // This source code is licensed under the Apache-2.0 license found in the
22
+ // LICENSE file in the root directory of this source tree.
23
+ //
24
+ var componentName = 'AddSelectBreadcrumbs';
25
+
26
+ 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 newPath = (0, _toConsumableArray2.default)(path);
33
+ var pathIdx = newPath.findIndex(function (entry) {
34
+ return entry.id === id;
35
+ });
36
+ var finalPath = newPath.splice(0, pathIdx + 1);
37
+ setPath(finalPath);
38
+ };
39
+
40
+ var resetPath = function resetPath() {
41
+ setPath([]);
42
+ };
43
+
44
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Breadcrumb, {
45
+ noTrailingSlash: true
46
+ }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.BreadcrumbItem, {
47
+ onClick: resetPath
48
+ }, itemsLabel), path.map(function (entry, idx, arr) {
49
+ var isCurrentPage = idx === arr.length - 1;
50
+
51
+ var crumbHandler = function crumbHandler() {
52
+ if (!isCurrentPage) {
53
+ clickHandler(entry.id);
54
+ }
55
+ };
56
+
57
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.BreadcrumbItem, {
58
+ key: entry.id,
59
+ isCurrentPage: isCurrentPage,
60
+ onClick: crumbHandler
61
+ }, entry.label);
62
+ }));
63
+ };
64
+
65
+ exports.AddSelectBreadcrumbs = AddSelectBreadcrumbs;
66
+ AddSelectBreadcrumbs.propTypes = {
67
+ itemsLabel: _propTypes.default.string,
68
+ path: _propTypes.default.array,
69
+ setPath: _propTypes.default.func
70
+ };
71
+ AddSelectBreadcrumbs.displayName = componentName;
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.AddSelectList = void 0;
9
+
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _carbonComponentsReact = require("carbon-components-react");
15
+
16
+ var _iconsReact = require("@carbon/icons-react");
17
+
18
+ var _propTypes = _interopRequireDefault(require("prop-types"));
19
+
20
+ var _settings = require("../../settings");
21
+
22
+ //
23
+ // Copyright IBM Corp. 2022
24
+ //
25
+ // This source code is licensed under the Apache-2.0 license found in the
26
+ // LICENSE file in the root directory of this source tree.
27
+ //
28
+ var componentName = 'AddSelectList';
29
+
30
+ var AddSelectList = function AddSelectList(_ref) {
31
+ var filteredItems = _ref.filteredItems,
32
+ multi = _ref.multi,
33
+ multiSelection = _ref.multiSelection,
34
+ path = _ref.path,
35
+ setMultiSelection = _ref.setMultiSelection,
36
+ setPath = _ref.setPath,
37
+ setSingleSelection = _ref.setSingleSelection,
38
+ singleSelection = _ref.singleSelection;
39
+ var blockClass = "".concat(_settings.pkg.prefix, "--add-select__selections");
40
+
41
+ var handleSingleSelection = function handleSingleSelection(value) {
42
+ setSingleSelection(value);
43
+ };
44
+
45
+ var handleMultiSelection = function handleMultiSelection(value, checked) {
46
+ if (checked) {
47
+ var newValues = [].concat((0, _toConsumableArray2.default)(multiSelection), [value]);
48
+ setMultiSelection(newValues);
49
+ } else {
50
+ var _newValues = multiSelection.filter(function (v) {
51
+ return v !== value;
52
+ });
53
+
54
+ setMultiSelection(_newValues);
55
+ }
56
+ };
57
+
58
+ var onNavigateItem = function onNavigateItem(_ref2) {
59
+ var id = _ref2.id,
60
+ label = _ref2.label;
61
+ setPath([].concat((0, _toConsumableArray2.default)(path), [{
62
+ id: id,
63
+ label: label
64
+ }]));
65
+ };
66
+
67
+ return /*#__PURE__*/_react.default.createElement("div", {
68
+ className: "".concat(blockClass, "-wrapper")
69
+ }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListWrapper, {
70
+ selection: true,
71
+ className: "".concat(blockClass)
72
+ }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListBody, null, filteredItems.map(function (item) {
73
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListRow, {
74
+ key: item.id
75
+ }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListCell, null, /*#__PURE__*/_react.default.createElement("div", {
76
+ className: "".concat(blockClass, "-cell-wrapper")
77
+ }, multi ? /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, {
78
+ className: "".concat(blockClass, "-checkbox"),
79
+ onChange: function onChange(value) {
80
+ return handleMultiSelection(item.value, value);
81
+ },
82
+ labelText: item.label,
83
+ id: item.id,
84
+ checked: multiSelection.includes(item.value)
85
+ }) : /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButton, {
86
+ className: "".concat(blockClass, "-radio"),
87
+ name: "add-select-selections",
88
+ id: item.id,
89
+ value: item.value,
90
+ labelText: item.label,
91
+ onChange: handleSingleSelection,
92
+ selected: item.value === singleSelection
93
+ }), item.children && /*#__PURE__*/_react.default.createElement(_iconsReact.ChevronRight16, {
94
+ onClick: function onClick() {
95
+ return onNavigateItem(item);
96
+ }
97
+ }))));
98
+ }))));
99
+ };
100
+
101
+ exports.AddSelectList = AddSelectList;
102
+ AddSelectList.propTypes = {
103
+ filteredItems: _propTypes.default.array,
104
+ multi: _propTypes.default.bool,
105
+ multiSelection: _propTypes.default.array,
106
+ path: _propTypes.default.array,
107
+ setMultiSelection: _propTypes.default.func,
108
+ setPath: _propTypes.default.func,
109
+ setSingleSelection: _propTypes.default.func,
110
+ singleSelection: _propTypes.default.string
111
+ };
112
+ AddSelectList.displayName = componentName;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.AddSelectSidebar = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _carbonComponentsReact = require("carbon-components-react");
13
+
14
+ var _propTypes = _interopRequireDefault(require("prop-types"));
15
+
16
+ var _NoDataEmptyState = require("../../components/EmptyStates/NoDataEmptyState");
17
+
18
+ var _settings = require("../../settings");
19
+
20
+ //
21
+ // Copyright IBM Corp. 2022
22
+ //
23
+ // This source code is licensed under the Apache-2.0 license found in the
24
+ // LICENSE file in the root directory of this source tree.
25
+ //
26
+ var componentName = 'AddSelectSidebar';
27
+
28
+ var AddSelectSidebar = function AddSelectSidebar(_ref) {
29
+ var influencerTitle = _ref.influencerTitle,
30
+ multiSelection = _ref.multiSelection,
31
+ noSelectionDescription = _ref.noSelectionDescription,
32
+ noSelectionTitle = _ref.noSelectionTitle;
33
+ var blockClass = "".concat(_settings.pkg.prefix, "--add-select__influencer");
34
+ return /*#__PURE__*/_react.default.createElement("div", {
35
+ className: "".concat(blockClass)
36
+ }, /*#__PURE__*/_react.default.createElement("div", {
37
+ className: "".concat(blockClass, "-header")
38
+ }, /*#__PURE__*/_react.default.createElement("p", {
39
+ className: "".concat(blockClass, "-title")
40
+ }, influencerTitle), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Tag, {
41
+ type: "gray",
42
+ size: "sm"
43
+ }, multiSelection.length)), /*#__PURE__*/_react.default.createElement("div", {
44
+ className: "".concat(blockClass, "-body")
45
+ }, multiSelection.length > 0 ? multiSelection.map(function (item) {
46
+ return /*#__PURE__*/_react.default.createElement("p", {
47
+ key: item
48
+ }, item);
49
+ }) : /*#__PURE__*/_react.default.createElement(_NoDataEmptyState.NoDataEmptyState, {
50
+ subtitle: noSelectionDescription,
51
+ title: noSelectionTitle,
52
+ size: "sm"
53
+ })));
54
+ };
55
+
56
+ exports.AddSelectSidebar = AddSelectSidebar;
57
+ AddSelectSidebar.propTypes = {
58
+ influencerTitle: _propTypes.default.string,
59
+ multiSelection: _propTypes.default.array,
60
+ noSelectionDescription: _propTypes.default.string,
61
+ noSelectionTitle: _propTypes.default.string
62
+ };
63
+ AddSelectSidebar.displayName = componentName;