@carbon/ibm-products 1.5.0 → 1.6.0

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