@carbon/ibm-products 1.4.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. package/css/index-full-carbon.css +527 -90
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +9 -3
  4. package/css/index-full-carbon.min.css.map +1 -0
  5. package/css/index-without-carbon-released-only.css +157 -67
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +3 -3
  8. package/css/index-without-carbon-released-only.min.css.map +1 -0
  9. package/css/index-without-carbon.css +468 -84
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +9 -3
  12. package/css/index-without-carbon.min.css.map +1 -0
  13. package/css/index.css +470 -86
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +9 -3
  16. package/css/index.min.css.map +1 -0
  17. package/es/components/ActionSet/ActionSet.js +23 -11
  18. package/es/components/ActionSet/actions.js +25 -17
  19. package/es/components/AddSelect/AddSelect.js +115 -67
  20. package/es/components/AddSelect/AddSelectBreadcrumbs.js +56 -0
  21. package/es/components/AddSelect/AddSelectList.js +94 -0
  22. package/es/components/AddSelect/AddSelectSidebar.js +110 -0
  23. package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +5 -2
  24. package/es/components/ButtonMenu/ButtonMenu.js +1 -1
  25. package/es/components/CancelableTextEdit/CancelableTextEdit.js +2 -2
  26. package/es/components/Card/Card.js +6 -4
  27. package/es/components/CreateFullPage/CreateFullPage.js +30 -5
  28. package/es/components/CreateFullPage/CreateFullPageStep.js +40 -32
  29. package/es/components/CreateInfluencer/CreateInfluencer.js +25 -3
  30. package/es/components/CreateTearsheet/CreateTearsheet.js +32 -6
  31. package/es/components/CreateTearsheet/CreateTearsheetStep.js +45 -38
  32. package/es/components/CreateTearsheet/preview-components/MultiStepTearsheet.js +24 -4
  33. package/es/components/CreateTearsheet/preview-components/MultiStepWithIntro.js +8 -6
  34. package/es/components/DataSpreadsheet/DataSpreadsheet.js +154 -0
  35. package/es/components/DataSpreadsheet/generateData.js +47 -0
  36. package/es/components/DataSpreadsheet/index.js +7 -0
  37. package/es/components/EmptyStates/EmptyState.js +1 -1
  38. package/es/components/EmptyStates/EmptyStateContent.js +2 -2
  39. package/es/components/EmptyStates/ErrorEmptyState/ErrorEmptyState.js +1 -1
  40. package/es/components/EmptyStates/NoDataEmptyState/NoDataEmptyState.js +1 -1
  41. package/es/components/EmptyStates/NoTagsEmptyState/NoTagsEmptyState.js +1 -1
  42. package/es/components/EmptyStates/NotFoundEmptyState/NotFoundEmptyState.js +1 -1
  43. package/es/components/EmptyStates/NotificationsEmptyState/NotificationsEmptyState.js +1 -1
  44. package/es/components/EmptyStates/UnauthorizedEmptyState/UnauthorizedEmptyState.js +1 -1
  45. package/es/components/ExportModal/ExportModal.js +39 -12
  46. package/es/components/InlineEdit/InlineEdit.js +250 -80
  47. package/es/components/NotificationsPanel/NotificationsPanel.js +16 -3
  48. package/es/components/PageHeader/PageHeader.js +9 -6
  49. package/es/components/PageHeader/PageHeaderTitle.js +10 -6
  50. package/es/components/SidePanel/SidePanel.js +33 -16
  51. package/es/components/Tearsheet/Tearsheet.js +1 -1
  52. package/es/components/Tearsheet/TearsheetNarrow.js +1 -1
  53. package/es/components/Tearsheet/TearsheetShell.js +4 -5
  54. package/es/components/WebTerminal/WebTerminal.js +1 -1
  55. package/es/components/index.js +2 -1
  56. package/es/global/js/hooks/index.js +1 -0
  57. package/es/global/js/hooks/useCreateComponentStepChange.js +31 -11
  58. package/es/global/js/hooks/useResetCreateComponent.js +7 -4
  59. package/es/global/js/hooks/useRetrieveStepData.js +51 -0
  60. package/es/global/js/package-settings.js +2 -1
  61. package/es/global/js/utils/getScrollbarWidth.js +14 -0
  62. package/es/global/js/utils/lastIndexInArray.js +26 -0
  63. package/es/settings.js +0 -5
  64. package/lib/components/ActionSet/ActionSet.js +23 -11
  65. package/lib/components/ActionSet/actions.js +25 -17
  66. package/lib/components/AddSelect/AddSelect.js +119 -67
  67. package/lib/components/AddSelect/AddSelectBreadcrumbs.js +71 -0
  68. package/lib/components/AddSelect/AddSelectList.js +112 -0
  69. package/lib/components/AddSelect/AddSelectSidebar.js +122 -0
  70. package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +5 -2
  71. package/lib/components/ButtonMenu/ButtonMenu.js +1 -1
  72. package/lib/components/CancelableTextEdit/CancelableTextEdit.js +1 -1
  73. package/lib/components/Card/Card.js +6 -4
  74. package/lib/components/CreateFullPage/CreateFullPage.js +29 -4
  75. package/lib/components/CreateFullPage/CreateFullPageStep.js +38 -30
  76. package/lib/components/CreateInfluencer/CreateInfluencer.js +25 -3
  77. package/lib/components/CreateTearsheet/CreateTearsheet.js +31 -5
  78. package/lib/components/CreateTearsheet/CreateTearsheetStep.js +43 -36
  79. package/lib/components/CreateTearsheet/preview-components/MultiStepTearsheet.js +22 -2
  80. package/lib/components/CreateTearsheet/preview-components/MultiStepWithIntro.js +8 -6
  81. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +171 -0
  82. package/lib/components/DataSpreadsheet/generateData.js +58 -0
  83. package/lib/components/DataSpreadsheet/index.js +13 -0
  84. package/lib/components/EmptyStates/EmptyState.js +1 -1
  85. package/lib/components/EmptyStates/EmptyStateContent.js +2 -2
  86. package/lib/components/EmptyStates/ErrorEmptyState/ErrorEmptyState.js +1 -1
  87. package/lib/components/EmptyStates/NoDataEmptyState/NoDataEmptyState.js +1 -1
  88. package/lib/components/EmptyStates/NoTagsEmptyState/NoTagsEmptyState.js +1 -1
  89. package/lib/components/EmptyStates/NotFoundEmptyState/NotFoundEmptyState.js +1 -1
  90. package/lib/components/EmptyStates/NotificationsEmptyState/NotificationsEmptyState.js +1 -1
  91. package/lib/components/EmptyStates/UnauthorizedEmptyState/UnauthorizedEmptyState.js +1 -1
  92. package/lib/components/ExportModal/ExportModal.js +36 -11
  93. package/lib/components/InlineEdit/InlineEdit.js +247 -79
  94. package/lib/components/NotificationsPanel/NotificationsPanel.js +13 -1
  95. package/lib/components/PageHeader/PageHeader.js +9 -6
  96. package/lib/components/PageHeader/PageHeaderTitle.js +10 -6
  97. package/lib/components/SidePanel/SidePanel.js +33 -16
  98. package/lib/components/Tearsheet/Tearsheet.js +1 -1
  99. package/lib/components/Tearsheet/TearsheetNarrow.js +1 -1
  100. package/lib/components/Tearsheet/TearsheetShell.js +3 -4
  101. package/lib/components/WebTerminal/WebTerminal.js +1 -1
  102. package/lib/components/index.js +9 -1
  103. package/lib/global/js/hooks/index.js +8 -0
  104. package/lib/global/js/hooks/useCreateComponentStepChange.js +31 -11
  105. package/lib/global/js/hooks/useResetCreateComponent.js +7 -4
  106. package/lib/global/js/hooks/useRetrieveStepData.js +62 -0
  107. package/lib/global/js/package-settings.js +2 -1
  108. package/lib/global/js/utils/getScrollbarWidth.js +23 -0
  109. package/lib/global/js/utils/lastIndexInArray.js +35 -0
  110. package/lib/settings.js +0 -6
  111. package/package.json +27 -25
  112. package/scss/components/AddSelect/_add-select.scss +59 -5
  113. package/scss/components/BreadcrumbWithOverflow/_index.scss +1 -1
  114. package/scss/components/CancelableTextEdit/_cancelable-text-edit.scss +1 -0
  115. package/scss/components/CancelableTextEdit/_storybook-styles.scss +0 -7
  116. package/scss/components/CreateInfluencer/_create-influencer.scss +4 -4
  117. package/scss/components/CreateTearsheet/_create-tearsheet.scss +2 -2
  118. package/scss/components/CreateTearsheetNarrow/_storybook-styles.scss +0 -6
  119. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +79 -0
  120. package/scss/components/DataSpreadsheet/_index.scss +8 -0
  121. package/scss/components/DataSpreadsheet/_storybook-styles.scss +6 -0
  122. package/scss/components/EditSidePanel/_storybook-styles.scss +0 -8
  123. package/scss/components/InlineEdit/_inline-edit.scss +288 -10
  124. package/scss/components/InlineEdit/_storybook-styles.scss +12 -6
  125. package/scss/components/LoadingBar/_storybook-styles.scss +0 -5
  126. package/scss/components/NotificationsPanel/_notifications-panel.scss +2 -2
  127. package/scss/components/OptionsTile/_storybook-styles.scss +0 -7
  128. package/scss/components/PageHeader/_index.scss +1 -1
  129. package/scss/components/PageHeader/_page-header.scss +4 -1
  130. package/scss/components/ProductiveCard/_productive-card.scss +0 -4
  131. package/scss/components/SidePanel/_side-panel.scss +15 -6
  132. package/scss/components/StatusIcon/_index.scss +1 -1
  133. package/scss/components/StatusIcon/_status-icon.scss +6 -4
  134. package/scss/components/TagSet/_index.scss +1 -1
  135. package/scss/components/UserProfileImage/_index.scss +1 -1
  136. package/scss/components/UserProfileImage/_user-profile-image.scss +2 -2
  137. package/scss/components/WebTerminal/_web-terminal.scss +2 -2
  138. package/scss/components/_index.scss +1 -0
  139. package/scss/global/styles/_project-settings.scss +5 -1
  140. package/es/generated/feature-flags/feature-flags.js +0 -15
  141. package/lib/generated/feature-flags/feature-flags.js +0 -22
  142. package/scss/generated/feature-flags/_feature-flags.scss +0 -19
@@ -149,7 +149,7 @@ var CancelableTextEdit = /*#__PURE__*/_react.default.forwardRef(function (_ref,
149
149
  hasIconOnly: true,
150
150
  iconDescription: revertDescription,
151
151
  onClick: handleRevert,
152
- renderIcon: _iconsReact.Reset16
152
+ renderIcon: _iconsReact.Close16
153
153
  }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
154
154
  className: "".concat(blockClass, "__save"),
155
155
  kind: "ghost",
@@ -30,7 +30,8 @@ var _CardFooter = require("./CardFooter");
30
30
  var _settings = require("../../settings");
31
31
 
32
32
  var _excluded = ["actionIcons", "actionsPlacement", "children", "className", "clickZone", "description", "label", "media", "mediaPosition", "onClick", "onKeyDown", "onPrimaryButtonClick", "overflowActions", "onSecondaryButtonClick", "pictogram", "primaryButtonHref", "primaryButtonIcon", "primaryButtonKind", "primaryButtonText", "productive", "secondaryButtonHref", "secondaryButtonIcon", "secondaryButtonKind", "secondaryButtonText", "title", "titleSize"],
33
- _excluded2 = ["id"];
33
+ _excluded2 = ["id"],
34
+ _excluded3 = ["id", "icon", "onClick", "iconDescription", "onKeyDown", "href"];
34
35
 
35
36
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
36
37
 
@@ -105,10 +106,11 @@ var Card = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
105
106
  onClick = _ref3.onClick,
106
107
  iconDescription = _ref3.iconDescription,
107
108
  onKeyDown = _ref3.onKeyDown,
108
- href = _ref3.href;
109
+ href = _ref3.href,
110
+ rest = (0, _objectWithoutProperties2.default)(_ref3, _excluded3);
109
111
 
110
112
  if (productive) {
111
- return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
113
+ return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, (0, _extends2.default)({}, rest, {
112
114
  key: id,
113
115
  renderIcon: Icon,
114
116
  hasIconOnly: true,
@@ -117,7 +119,7 @@ var Card = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
117
119
  iconDescription: iconDescription,
118
120
  kind: "ghost",
119
121
  href: href
120
- });
122
+ }));
121
123
  }
122
124
 
123
125
  if (href) {
@@ -33,6 +33,8 @@ var _ActionSet = require("../ActionSet");
33
33
 
34
34
  var _hooks = require("../../global/js/hooks");
35
35
 
36
+ var _lastIndexInArray = require("../../global/js/utils/lastIndexInArray");
37
+
36
38
  var _excluded = ["backButtonText", "cancelButtonText", "children", "className", "modalDangerButtonText", "modalDescription", "modalSecondaryButtonText", "modalTitle", "nextButtonText", "onClose", "onRequestSubmit", "submitButtonText"];
37
39
 
38
40
  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); }
@@ -116,8 +118,30 @@ var CreateFullPage = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
116
118
  stepData = _useState18[0],
117
119
  setStepData = _useState18[1];
118
120
 
119
- var totalStepCount = _react.default.Children.count(children);
121
+ var _useState19 = (0, _react.useState)(1),
122
+ _useState20 = (0, _slicedToArray2.default)(_useState19, 2),
123
+ firstIncludedStep = _useState20[0],
124
+ setFirstIncludedStep = _useState20[1];
125
+
126
+ var _useState21 = (0, _react.useState)(null),
127
+ _useState22 = (0, _slicedToArray2.default)(_useState21, 2),
128
+ lastIncludedStep = _useState22[0],
129
+ setLastIncludedStep = _useState22[1];
120
130
 
131
+ (0, _react.useEffect)(function () {
132
+ var firstItem = stepData.findIndex(function (item) {
133
+ return item === null || item === void 0 ? void 0 : item.shouldIncludeStep;
134
+ }) + 1;
135
+ var lastItem = (0, _lastIndexInArray.lastIndexInArray)(stepData, 'shouldIncludeStep', true);
136
+
137
+ if (firstItem !== firstIncludedStep) {
138
+ setFirstIncludedStep(firstItem);
139
+ }
140
+
141
+ if (lastItem !== lastIncludedStep) {
142
+ setLastIncludedStep(lastItem);
143
+ }
144
+ }, [stepData, firstIncludedStep, lastIncludedStep]);
121
145
  (0, _hooks.useCreateComponentFocus)({
122
146
  previousState: previousState,
123
147
  currentStep: currentStep,
@@ -126,7 +150,9 @@ var CreateFullPage = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
126
150
  });
127
151
  (0, _hooks.useValidCreateStepCount)(stepData.length, componentName);
128
152
  (0, _hooks.useCreateComponentStepChange)({
129
- totalStepCount: totalStepCount,
153
+ firstIncludedStep: firstIncludedStep,
154
+ lastIncludedStep: lastIncludedStep,
155
+ stepData: stepData,
130
156
  onNext: onNext,
131
157
  isSubmitDisabled: isDisabled,
132
158
  setCurrentStep: setCurrentStep,
@@ -180,8 +206,7 @@ var CreateFullPage = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
180
206
  });
181
207
  },
182
208
  setStepData: setStepData,
183
- stepData: stepData,
184
- totalStepCount: totalStepCount
209
+ stepData: stepData
185
210
  }
186
211
  }, _react.default.Children.map(children, function (child, index) {
187
212
  return /*#__PURE__*/_react.default.createElement(StepNumberContext.Provider, {
@@ -11,7 +11,7 @@ exports.CreateFullPageStep = void 0;
11
11
 
12
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
13
 
14
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
15
 
16
16
  var _react = _interopRequireWildcard(require("react"));
17
17
 
@@ -49,6 +49,7 @@ var CreateFullPageStep = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref
49
49
  subtitle = _ref.subtitle,
50
50
  description = _ref.description,
51
51
  disableSubmit = _ref.disableSubmit,
52
+ includeStep = _ref.includeStep,
52
53
  introStep = _ref.introStep,
53
54
  title = _ref.title,
54
55
  hasFieldset = _ref.hasFieldset,
@@ -56,47 +57,45 @@ var CreateFullPageStep = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref
56
57
  onNext = _ref.onNext,
57
58
  onMount = _ref.onMount,
58
59
  secondaryLabel = _ref.secondaryLabel;
59
- var steps = (0, _react.useContext)(_CreateFullPage.StepsContext);
60
+ var stepsContext = (0, _react.useContext)(_CreateFullPage.StepsContext);
60
61
  var stepNumber = (0, _react.useContext)(_CreateFullPage.StepNumberContext);
62
+
63
+ var _useState = (0, _react.useState)(),
64
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
65
+ shouldIncludeStep = _useState2[0],
66
+ setShouldIncludeStep = _useState2[1];
67
+
61
68
  var previousState = (0, _hooks.usePreviousValue)({
62
- currentStep: steps === null || steps === void 0 ? void 0 : steps.currentStep
69
+ currentStep: stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.currentStep
70
+ });
71
+ (0, _hooks.useRetrieveStepData)({
72
+ stepsContext: stepsContext,
73
+ stepNumber: stepNumber,
74
+ introStep: introStep,
75
+ shouldIncludeStep: shouldIncludeStep,
76
+ secondaryLabel: secondaryLabel,
77
+ title: title
63
78
  }); // This useEffect reports back the onNext and onMount values so that they can be used
64
79
  // in the appropriate custom hooks.
65
80
 
66
81
  (0, _react.useEffect)(function () {
67
- if (stepNumber === (steps === null || steps === void 0 ? void 0 : steps.currentStep) && (previousState === null || previousState === void 0 ? void 0 : previousState.currentStep) !== (steps === null || steps === void 0 ? void 0 : steps.currentStep)) {
68
- steps === null || steps === void 0 ? void 0 : steps.setOnNext(onNext);
69
- steps === null || steps === void 0 ? void 0 : steps.setOnMount(onMount);
82
+ if (stepNumber === (stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.currentStep) && (previousState === null || previousState === void 0 ? void 0 : previousState.currentStep) !== (stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.currentStep)) {
83
+ stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.setOnNext(onNext);
84
+ stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.setOnMount(onMount);
70
85
  }
71
- }, [onMount, onNext, steps, stepNumber, previousState === null || previousState === void 0 ? void 0 : previousState.currentStep]); // This useEffect makes sure that every CreateTearsheetStep reports back it's
72
- // title, secondaryLabel, and introStep props so that it can be sent to the CreateInfluencer.
73
-
86
+ }, [onMount, onNext, stepsContext, stepNumber, previousState === null || previousState === void 0 ? void 0 : previousState.currentStep]);
74
87
  (0, _react.useEffect)(function () {
75
- var _steps$stepData, _steps$stepData2;
76
-
77
- var stepHasReported = steps === null || steps === void 0 ? void 0 : (_steps$stepData = steps.stepData) === null || _steps$stepData === void 0 ? void 0 : _steps$stepData.includes(function (item) {
78
- return item.title === title;
79
- });
80
-
81
- if (!stepHasReported && (steps === null || steps === void 0 ? void 0 : (_steps$stepData2 = steps.stepData) === null || _steps$stepData2 === void 0 ? void 0 : _steps$stepData2.length) < (steps === null || steps === void 0 ? void 0 : steps.totalStepCount)) {
82
- steps === null || steps === void 0 ? void 0 : steps.setStepData(function (prev) {
83
- return [].concat((0, _toConsumableArray2.default)(prev), [{
84
- title: title,
85
- secondaryLabel: secondaryLabel,
86
- introStep: introStep
87
- }]);
88
- });
89
- }
90
- }, [steps, title, secondaryLabel, introStep]); // Whenever we are the current step, supply our disableSubmit value to the
88
+ setShouldIncludeStep(includeStep);
89
+ }, [includeStep, stepsContext, title]); // Whenever we are the current step, supply our disableSubmit value to the
91
90
  // steps container context so that it can manage the 'Next' button appropriately.
92
91
 
93
92
  (0, _react.useEffect)(function () {
94
- if (stepNumber === (steps === null || steps === void 0 ? void 0 : steps.currentStep)) {
95
- steps.setIsDisabled(disableSubmit);
93
+ if (stepNumber === (stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.currentStep)) {
94
+ stepsContext.setIsDisabled(disableSubmit);
96
95
  }
97
- }, [steps, stepNumber, disableSubmit, onNext]);
98
- return steps ? /*#__PURE__*/_react.default.createElement("section", {
99
- className: (0, _classnames.default)(blockClass, className, (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__step--hidden-step"), stepNumber !== (steps === null || steps === void 0 ? void 0 : steps.currentStep)), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__step--visible-step"), stepNumber === (steps === null || steps === void 0 ? void 0 : steps.currentStep)), _cx)),
96
+ }, [stepsContext, stepNumber, disableSubmit, onNext]);
97
+ return stepsContext ? /*#__PURE__*/_react.default.createElement("section", {
98
+ className: (0, _classnames.default)(blockClass, className, (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__step--hidden-step"), stepNumber !== (stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.currentStep)), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__step--visible-step"), stepNumber === (stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.currentStep)), _cx)),
100
99
  ref: ref
101
100
  }, /*#__PURE__*/_react.default.createElement("h5", {
102
101
  className: "".concat(blockClass, "-title")
@@ -146,6 +145,12 @@ CreateFullPageStep.propTypes = {
146
145
  */
147
146
  hasFieldset: _propTypes.default.bool,
148
147
 
148
+ /**
149
+ * This prop is used to help track dynamic steps. If this value is `false` then the step is not included in the visible steps or the ProgressIndicator
150
+ * steps. If this value is `true` then the step will be included in the list of visible steps, as well as being included in the ProgressIndicator step list
151
+ */
152
+ includeStep: _propTypes.default.bool,
153
+
149
154
  /**
150
155
  * This prop can be used on the first step to mark it as an intro step, which will not render the progress indicator steps
151
156
  */
@@ -178,4 +183,7 @@ CreateFullPageStep.propTypes = {
178
183
  * Sets the title text for a create full page step
179
184
  */
180
185
  title: _propTypes.default.node.isRequired
186
+ };
187
+ CreateFullPageStep.defaultProps = {
188
+ includeStep: true
181
189
  };
@@ -35,21 +35,42 @@ var CreateInfluencer = function CreateInfluencer(_ref) {
35
35
  currentStep = _ref.currentStep,
36
36
  stepData = _ref.stepData;
37
37
 
38
- // renders the step progression components in the left influencer area
38
+ var getNumberOfDynamicStepsBeforeCurrentStep = function getNumberOfDynamicStepsBeforeCurrentStep(array, key) {
39
+ var dynamicSteps = [];
40
+ array.forEach(function (item, index) {
41
+ var _array$index;
42
+
43
+ if (((_array$index = array[index]) === null || _array$index === void 0 ? void 0 : _array$index[key]) === false && index <= currentStep - 1) {
44
+ dynamicSteps.push(item);
45
+ }
46
+ });
47
+ return dynamicSteps.length;
48
+ }; // renders the step progression components in the left influencer area
49
+
50
+
39
51
  var renderProgressSteps = function renderProgressSteps() {
40
52
  var _stepData$, _stepData$2;
41
53
 
42
54
  var extractedSteps = stepData === null || stepData === void 0 ? void 0 : stepData.filter(function (item) {
43
55
  return !(item !== null && item !== void 0 && item.introStep);
44
56
  });
57
+ var progressSteps = extractedSteps === null || extractedSteps === void 0 ? void 0 : extractedSteps.filter(function (item) {
58
+ return item === null || item === void 0 ? void 0 : item.shouldIncludeStep;
59
+ }); // To get the ProgressIndicator's `currentIndex`, accounting for dynamic steps,
60
+ // we need to subtract the number of !shouldIncludeStep/s before the current step
61
+ // which we get from `getNumberOfDynamicStepsBeforeCurrentStep()`
62
+
63
+ var totalDynamicSteps = getNumberOfDynamicStepsBeforeCurrentStep(stepData, 'shouldIncludeStep') || 0;
45
64
  return /*#__PURE__*/_react.default.createElement("div", {
46
65
  className: "".concat(blockClass, "__left-nav")
47
66
  }, currentStep === 1 && (_stepData$ = stepData[0]) !== null && _stepData$ !== void 0 && _stepData$.introStep ? null : /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.ProgressIndicator, {
48
- currentIndex: (_stepData$2 = stepData[0]) !== null && _stepData$2 !== void 0 && _stepData$2.introStep ? currentStep - 2 : currentStep - 1,
67
+ currentIndex: (_stepData$2 = stepData[0]) !== null && _stepData$2 !== void 0 && _stepData$2.introStep ? currentStep - totalDynamicSteps - 2 // minus 2 because we need to account for the intro step in addition to `currentIndex` being 0 index based and our steps being 1 index based
68
+ : currentStep - totalDynamicSteps - 1 // minus 1 because ProgressIndicator currentIndex prop is 0 index based, but our steps are 1 index based
69
+ ,
49
70
  spaceEqually: true,
50
71
  vertical: true,
51
72
  className: (0, _classnames.default)("".concat(blockClass, "__progress-indicator"))
52
- }, extractedSteps.map(function (step, stepIndex) {
73
+ }, progressSteps.map(function (step, stepIndex) {
53
74
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.ProgressStep, {
54
75
  label: step.title,
55
76
  key: stepIndex,
@@ -84,6 +105,7 @@ CreateInfluencer.propTypes = {
84
105
  stepData: _propTypes.default.arrayOf(_propTypes.default.shape({
85
106
  introStep: _propTypes.default.bool,
86
107
  secondaryLabel: _propTypes.default.string,
108
+ shouldIncludeStep: _propTypes.default.bool,
87
109
  title: _propTypes.default.node
88
110
  }))
89
111
  };
@@ -35,6 +35,8 @@ var _hooks = require("../../global/js/hooks");
35
35
 
36
36
  var _devtools = require("../../global/js/utils/devtools");
37
37
 
38
+ var _lastIndexInArray = require("../../global/js/utils/lastIndexInArray");
39
+
38
40
  var _excluded = ["backButtonText", "cancelButtonText", "children", "className", "description", "influencerWidth", "initialStep", "label", "nextButtonText", "onClose", "onRequestSubmit", "open", "submitButtonText", "title", "verticalPosition"];
39
41
 
40
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); }
@@ -110,13 +112,35 @@ var CreateTearsheet = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
110
112
  stepData = _useState16[0],
111
113
  setStepData = _useState16[1];
112
114
 
113
- var totalStepCount = _react.default.Children.count(children);
115
+ var _useState17 = (0, _react.useState)(1),
116
+ _useState18 = (0, _slicedToArray2.default)(_useState17, 2),
117
+ firstIncludedStep = _useState18[0],
118
+ setFirstIncludedStep = _useState18[1];
119
+
120
+ var _useState19 = (0, _react.useState)(null),
121
+ _useState20 = (0, _slicedToArray2.default)(_useState19, 2),
122
+ lastIncludedStep = _useState20[0],
123
+ setLastIncludedStep = _useState20[1];
114
124
 
115
125
  var previousState = (0, _hooks.usePreviousValue)({
116
126
  currentStep: currentStep,
117
127
  open: open
118
128
  });
119
129
  var contentRef = (0, _react.useRef)();
130
+ (0, _react.useEffect)(function () {
131
+ var firstItem = stepData.findIndex(function (item) {
132
+ return item === null || item === void 0 ? void 0 : item.shouldIncludeStep;
133
+ }) + 1;
134
+ var lastItem = (0, _lastIndexInArray.lastIndexInArray)(stepData, 'shouldIncludeStep', true);
135
+
136
+ if (firstItem !== firstIncludedStep) {
137
+ setFirstIncludedStep(firstItem);
138
+ }
139
+
140
+ if (lastItem !== lastIncludedStep) {
141
+ setLastIncludedStep(lastItem);
142
+ }
143
+ }, [stepData, firstIncludedStep, lastIncludedStep]);
120
144
  (0, _hooks.useCreateComponentFocus)({
121
145
  previousState: previousState,
122
146
  currentStep: currentStep,
@@ -125,15 +149,18 @@ var CreateTearsheet = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
125
149
  });
126
150
  (0, _hooks.useValidCreateStepCount)(stepData.length, componentName);
127
151
  (0, _hooks.useResetCreateComponent)({
152
+ firstIncludedStep: firstIncludedStep,
128
153
  previousState: previousState,
129
154
  open: open,
130
155
  setCurrentStep: setCurrentStep,
131
156
  initialStep: initialStep,
132
- totalSteps: totalStepCount,
157
+ totalSteps: stepData === null || stepData === void 0 ? void 0 : stepData.length,
133
158
  componentName: componentName
134
159
  });
135
160
  (0, _hooks.useCreateComponentStepChange)({
136
- totalStepCount: totalStepCount,
161
+ firstIncludedStep: firstIncludedStep,
162
+ lastIncludedStep: lastIncludedStep,
163
+ stepData: stepData,
137
164
  onNext: onNext,
138
165
  isSubmitDisabled: isDisabled,
139
166
  setCurrentStep: setCurrentStep,
@@ -206,8 +233,7 @@ var CreateTearsheet = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
206
233
  });
207
234
  },
208
235
  setStepData: setStepData,
209
- stepData: stepData,
210
- totalStepCount: totalStepCount
236
+ stepData: stepData
211
237
  }
212
238
  }, _react.default.Children.map(children, function (child, index) {
213
239
  return /*#__PURE__*/_react.default.createElement(StepNumberContext.Provider, {
@@ -11,7 +11,7 @@ exports.CreateTearsheetStep = void 0;
11
11
 
12
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
13
 
14
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
15
 
16
16
  var _react = _interopRequireWildcard(require("react"));
17
17
 
@@ -34,7 +34,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
34
34
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
35
35
 
36
36
  /**
37
- * Copyright IBM Corp. 2021, 2021
37
+ * Copyright IBM Corp. 2021, 2022
38
38
  *
39
39
  * This source code is licensed under the Apache-2.0 license found in the
40
40
  * LICENSE file in the root directory of this source tree.
@@ -46,57 +46,57 @@ var CreateTearsheetStep = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
46
46
 
47
47
  var children = _ref.children,
48
48
  className = _ref.className,
49
- subtitle = _ref.subtitle,
50
49
  description = _ref.description,
51
50
  disableSubmit = _ref.disableSubmit,
52
- introStep = _ref.introStep,
53
- title = _ref.title,
54
- hasFieldset = _ref.hasFieldset,
55
51
  fieldsetLegendText = _ref.fieldsetLegendText,
52
+ hasFieldset = _ref.hasFieldset,
53
+ includeStep = _ref.includeStep,
54
+ introStep = _ref.introStep,
56
55
  onNext = _ref.onNext,
57
56
  onMount = _ref.onMount,
58
- secondaryLabel = _ref.secondaryLabel;
59
- var steps = (0, _react.useContext)(_CreateTearsheet.StepsContext);
57
+ secondaryLabel = _ref.secondaryLabel,
58
+ subtitle = _ref.subtitle,
59
+ title = _ref.title;
60
+ var stepsContext = (0, _react.useContext)(_CreateTearsheet.StepsContext);
60
61
  var stepNumber = (0, _react.useContext)(_CreateTearsheet.StepNumberContext);
62
+
63
+ var _useState = (0, _react.useState)(),
64
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
65
+ shouldIncludeStep = _useState2[0],
66
+ setShouldIncludeStep = _useState2[1];
67
+
61
68
  var previousState = (0, _hooks.usePreviousValue)({
62
- currentStep: steps === null || steps === void 0 ? void 0 : steps.currentStep
69
+ currentStep: stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.currentStep
70
+ });
71
+ (0, _hooks.useRetrieveStepData)({
72
+ stepsContext: stepsContext,
73
+ stepNumber: stepNumber,
74
+ introStep: introStep,
75
+ shouldIncludeStep: shouldIncludeStep,
76
+ secondaryLabel: secondaryLabel,
77
+ title: title
63
78
  }); // This useEffect reports back the onNext and onMount values so that they can be used
64
79
  // in the appropriate custom hooks.
65
80
 
66
81
  (0, _react.useEffect)(function () {
67
- if (stepNumber === (steps === null || steps === void 0 ? void 0 : steps.currentStep) && (previousState === null || previousState === void 0 ? void 0 : previousState.currentStep) !== (steps === null || steps === void 0 ? void 0 : steps.currentStep)) {
68
- steps === null || steps === void 0 ? void 0 : steps.setOnNext(onNext);
69
- steps === null || steps === void 0 ? void 0 : steps.setOnMount(onMount);
82
+ if (stepNumber === (stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.currentStep) && (previousState === null || previousState === void 0 ? void 0 : previousState.currentStep) !== (stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.currentStep)) {
83
+ stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.setOnNext(onNext);
84
+ stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.setOnMount(onMount);
70
85
  }
71
- }, [onMount, onNext, steps, stepNumber, previousState === null || previousState === void 0 ? void 0 : previousState.currentStep]); // This useEffect makes sure that every CreateTearsheetStep reports back it's
72
- // title, secondaryLabel, and introStep props so that it can be sent to the CreateInfluencer.
86
+ }, [onMount, onNext, stepsContext, stepNumber, previousState === null || previousState === void 0 ? void 0 : previousState.currentStep]); // Used to take the `includeStep` prop and use it as a local state value
73
87
 
74
88
  (0, _react.useEffect)(function () {
75
- var _steps$stepData, _steps$stepData2;
76
-
77
- var stepHasReported = steps === null || steps === void 0 ? void 0 : (_steps$stepData = steps.stepData) === null || _steps$stepData === void 0 ? void 0 : _steps$stepData.includes(function (item) {
78
- return item.title === title;
79
- });
80
-
81
- if (!stepHasReported && (steps === null || steps === void 0 ? void 0 : (_steps$stepData2 = steps.stepData) === null || _steps$stepData2 === void 0 ? void 0 : _steps$stepData2.length) < (steps === null || steps === void 0 ? void 0 : steps.totalStepCount)) {
82
- steps === null || steps === void 0 ? void 0 : steps.setStepData(function (prev) {
83
- return [].concat((0, _toConsumableArray2.default)(prev), [{
84
- title: title,
85
- secondaryLabel: secondaryLabel,
86
- introStep: introStep
87
- }]);
88
- });
89
- }
90
- }, [steps, title, secondaryLabel, introStep]); // Whenever we are the current step, supply our disableSubmit value to the
89
+ setShouldIncludeStep(includeStep);
90
+ }, [includeStep, stepsContext, title]); // Whenever we are the current step, supply our disableSubmit value to the
91
91
  // steps container context so that it can manage the 'Next' button appropriately.
92
92
 
93
93
  (0, _react.useEffect)(function () {
94
- if (stepNumber === (steps === null || steps === void 0 ? void 0 : steps.currentStep)) {
95
- steps.setIsDisabled(disableSubmit);
94
+ if (stepNumber === (stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.currentStep)) {
95
+ stepsContext.setIsDisabled(disableSubmit);
96
96
  }
97
- }, [steps, stepNumber, disableSubmit, onNext]);
98
- return steps ? /*#__PURE__*/_react.default.createElement("div", {
99
- className: (0, _classnames.default)(blockClass, className, (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__step--hidden-step"), stepNumber !== (steps === null || steps === void 0 ? void 0 : steps.currentStep)), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__step--visible-step"), stepNumber === (steps === null || steps === void 0 ? void 0 : steps.currentStep)), _cx)),
97
+ }, [stepsContext, stepNumber, disableSubmit, onNext]);
98
+ return stepsContext ? /*#__PURE__*/_react.default.createElement("div", {
99
+ className: (0, _classnames.default)(blockClass, className, (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__step--hidden-step"), stepNumber !== (stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.currentStep)), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "__step--visible-step"), stepNumber === (stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.currentStep)), _cx)),
100
100
  ref: ref
101
101
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Row, null, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Column, {
102
102
  xlg: 12,
@@ -155,6 +155,12 @@ CreateTearsheetStep.propTypes = {
155
155
  */
156
156
  hasFieldset: _propTypes.default.bool,
157
157
 
158
+ /**
159
+ * This prop is used to help track dynamic steps. If this value is `false` then the step is not included in the visible steps or the ProgressIndicator
160
+ * steps. If this value is `true` then the step will be included in the list of visible steps, as well as being included in the ProgressIndicator step list
161
+ */
162
+ includeStep: _propTypes.default.bool,
163
+
158
164
  /**
159
165
  * This prop can be used on the first step to mark it as an intro step, which will not render the progress indicator steps
160
166
  */
@@ -193,5 +199,6 @@ CreateTearsheetStep.propTypes = {
193
199
  // component needs to make a choice or assumption when a prop is not supplied.
194
200
 
195
201
  CreateTearsheetStep.defaultProps = {
196
- hasFieldset: true
202
+ hasFieldset: true,
203
+ includeStep: true
197
204
  };
@@ -122,6 +122,11 @@ var MultiStepTearsheet = function MultiStepTearsheet(_ref2) {
122
122
  isInvalid = _useState22[0],
123
123
  setIsInvalid = _useState22[1];
124
124
 
125
+ var _useState23 = (0, _react.useState)(false),
126
+ _useState24 = (0, _slicedToArray2.default)(_useState23, 2),
127
+ shouldIncludeAdditionalStep = _useState24[0],
128
+ setShouldIncludeAdditionalStep = _useState24[1];
129
+
125
130
  var clearCreateData = function clearCreateData() {
126
131
  setStepOneTextInputValue('');
127
132
  setTopicDescriptionValue('');
@@ -132,6 +137,7 @@ var MultiStepTearsheet = function MultiStepTearsheet(_ref2) {
132
137
  setIsInvalid(false);
133
138
  setOpen(false);
134
139
  setValue1('');
140
+ setShouldIncludeAdditionalStep(false);
135
141
  };
136
142
 
137
143
  return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("style", null, ".".concat(blockClass, " { opacity: 0 }"), ";"), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
@@ -234,12 +240,26 @@ var MultiStepTearsheet = function MultiStepTearsheet(_ref2) {
234
240
  onToggle: function onToggle(event) {
235
241
  return setShouldReject(event);
236
242
  }
237
- })))), /*#__PURE__*/_react.default.createElement(CustomStep, {
243
+ }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, {
244
+ labelText: "Include additional step",
245
+ id: "include-additional-step-checkbox",
246
+ onChange: function onChange(value) {
247
+ return setShouldIncludeAdditionalStep(value);
248
+ },
249
+ checked: shouldIncludeAdditionalStep
250
+ })))), /*#__PURE__*/_react.default.createElement(_CreateTearsheetStep.CreateTearsheetStep, {
251
+ title: "Dynamic step",
252
+ subtitle: "Dynamic step subtitle",
253
+ description: "This is an example showing how to include a dynamic step into the CreateTearsheet",
254
+ hasFieldset: false,
255
+ includeStep: shouldIncludeAdditionalStep
256
+ }, "dynamic step content"), /*#__PURE__*/_react.default.createElement(CustomStep, {
238
257
  title: "Location",
239
258
  subtitle: "Custom step subtitle",
240
259
  description: "Custom step description (see storybook implementation for new custom step capability)",
241
260
  value1: value1,
242
- setValue1: setValue1
261
+ setValue1: setValue1,
262
+ hasFieldset: false
243
263
  }), /*#__PURE__*/_react.default.createElement(_CreateTearsheetStep.CreateTearsheetStep, {
244
264
  title: "Partitions",
245
265
  disableSubmit: !stepTwoTextInputValue,
@@ -32,7 +32,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
32
32
  /* eslint-disable react/prop-types */
33
33
 
34
34
  /**
35
- * Copyright IBM Corp. 2021, 2021
35
+ * Copyright IBM Corp. 2021, 2022
36
36
  *
37
37
  * This source code is licensed under the Apache-2.0 license found in the
38
38
  * LICENSE file in the root directory of this source tree.
@@ -177,14 +177,16 @@ var MultiStepWithIntro = function MultiStepWithIntro(_ref) {
177
177
  size: "lg"
178
178
  }), /*#__PURE__*/_react.default.createElement("span", {
179
179
  className: "".concat(_settings.pkg.prefix, "--tearsheet-create-multi-step--custom-tile-label")
180
- }, "Plus")))), selectedCategory === 'plus' && /*#__PURE__*/_react.default.createElement(_CreateTearsheetStep.CreateTearsheetStep, {
180
+ }, "Plus")))), /*#__PURE__*/_react.default.createElement(_CreateTearsheetStep.CreateTearsheetStep, {
181
181
  title: "Conditional step",
182
182
  subtitle: "This step will only show for plus category creation flows",
183
- hasFieldset: false
184
- }, "conditional step content"), selectedCategory === 'standard' && /*#__PURE__*/_react.default.createElement(_CreateTearsheetStep.CreateTearsheetStep, {
183
+ hasFieldset: false,
184
+ includeStep: selectedCategory === 'plus'
185
+ }, "This step will only show for plus create flows"), /*#__PURE__*/_react.default.createElement(_CreateTearsheetStep.CreateTearsheetStep, {
185
186
  title: "Standard step only",
186
- hasFieldset: false
187
- }, "This step will only show for standard flows"), /*#__PURE__*/_react.default.createElement(_CreateTearsheetStep.CreateTearsheetStep, {
187
+ hasFieldset: false,
188
+ includeStep: selectedCategory === 'standard'
189
+ }, "This step will only show for standard create flows"), /*#__PURE__*/_react.default.createElement(_CreateTearsheetStep.CreateTearsheetStep, {
188
190
  onNext: function onNext() {
189
191
  return new Promise(function (resolve, reject) {
190
192
  setTimeout(function () {