@carbon/ibm-products 1.4.0 → 1.5.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 (52) hide show
  1. package/css/index-full-carbon.css +124 -40
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +1 -1
  4. package/css/index-without-carbon-released-only.css +124 -40
  5. package/css/index-without-carbon-released-only.css.map +1 -1
  6. package/css/index-without-carbon-released-only.min.css +1 -1
  7. package/css/index-without-carbon.css +124 -40
  8. package/css/index-without-carbon.css.map +1 -1
  9. package/css/index-without-carbon.min.css +1 -1
  10. package/css/index.css +124 -40
  11. package/css/index.css.map +1 -1
  12. package/css/index.min.css +1 -1
  13. package/es/components/ActionSet/ActionSet.js +22 -10
  14. package/es/components/ActionSet/actions.js +25 -17
  15. package/es/components/CreateFullPage/CreateFullPage.js +30 -5
  16. package/es/components/CreateFullPage/CreateFullPageStep.js +40 -32
  17. package/es/components/CreateInfluencer/CreateInfluencer.js +25 -3
  18. package/es/components/CreateTearsheet/CreateTearsheet.js +32 -6
  19. package/es/components/CreateTearsheet/CreateTearsheetStep.js +45 -38
  20. package/es/components/CreateTearsheet/preview-components/MultiStepTearsheet.js +24 -4
  21. package/es/components/CreateTearsheet/preview-components/MultiStepWithIntro.js +8 -6
  22. package/es/components/ExportModal/ExportModal.js +39 -12
  23. package/es/components/SidePanel/SidePanel.js +1 -1
  24. package/es/components/Tearsheet/Tearsheet.js +1 -1
  25. package/es/components/Tearsheet/TearsheetNarrow.js +1 -1
  26. package/es/components/Tearsheet/TearsheetShell.js +1 -1
  27. package/es/global/js/hooks/index.js +1 -0
  28. package/es/global/js/hooks/useCreateComponentStepChange.js +31 -11
  29. package/es/global/js/hooks/useResetCreateComponent.js +7 -4
  30. package/es/global/js/hooks/useRetrieveStepData.js +51 -0
  31. package/es/global/js/utils/lastIndexInArray.js +26 -0
  32. package/lib/components/ActionSet/ActionSet.js +22 -10
  33. package/lib/components/ActionSet/actions.js +25 -17
  34. package/lib/components/CreateFullPage/CreateFullPage.js +29 -4
  35. package/lib/components/CreateFullPage/CreateFullPageStep.js +38 -30
  36. package/lib/components/CreateInfluencer/CreateInfluencer.js +25 -3
  37. package/lib/components/CreateTearsheet/CreateTearsheet.js +31 -5
  38. package/lib/components/CreateTearsheet/CreateTearsheetStep.js +43 -36
  39. package/lib/components/CreateTearsheet/preview-components/MultiStepTearsheet.js +22 -2
  40. package/lib/components/CreateTearsheet/preview-components/MultiStepWithIntro.js +8 -6
  41. package/lib/components/ExportModal/ExportModal.js +36 -11
  42. package/lib/components/SidePanel/SidePanel.js +1 -1
  43. package/lib/components/Tearsheet/Tearsheet.js +1 -1
  44. package/lib/components/Tearsheet/TearsheetNarrow.js +1 -1
  45. package/lib/components/Tearsheet/TearsheetShell.js +1 -1
  46. package/lib/global/js/hooks/index.js +8 -0
  47. package/lib/global/js/hooks/useCreateComponentStepChange.js +31 -11
  48. package/lib/global/js/hooks/useResetCreateComponent.js +7 -4
  49. package/lib/global/js/hooks/useRetrieveStepData.js +62 -0
  50. package/lib/global/js/utils/lastIndexInArray.js +35 -0
  51. package/package.json +15 -15
  52. package/scss/components/StatusIcon/_status-icon.scss +2 -0
@@ -6,13 +6,13 @@ var _excluded = ["value1", "setValue1"];
6
6
  /* eslint-disable react/prop-types */
7
7
 
8
8
  /**
9
- * Copyright IBM Corp. 2021, 2021
9
+ * Copyright IBM Corp. 2021, 2022
10
10
  *
11
11
  * This source code is licensed under the Apache-2.0 license found in the
12
12
  * LICENSE file in the root directory of this source tree.
13
13
  */
14
14
  import React, { useState } from 'react';
15
- import { Button, Column, InlineNotification, RadioButtonGroup, RadioButton, Row, TextInput, Toggle, NumberInput } from 'carbon-components-react';
15
+ import { Button, Column, InlineNotification, RadioButtonGroup, RadioButton, Row, TextInput, Toggle, NumberInput, Checkbox } from 'carbon-components-react';
16
16
  import cx from 'classnames';
17
17
  import { pkg } from '../../../settings';
18
18
  import { CreateTearsheet } from '../CreateTearsheet';
@@ -107,6 +107,11 @@ export var MultiStepTearsheet = function MultiStepTearsheet(_ref2) {
107
107
  isInvalid = _useState22[0],
108
108
  setIsInvalid = _useState22[1];
109
109
 
110
+ var _useState23 = useState(false),
111
+ _useState24 = _slicedToArray(_useState23, 2),
112
+ shouldIncludeAdditionalStep = _useState24[0],
113
+ setShouldIncludeAdditionalStep = _useState24[1];
114
+
110
115
  var clearCreateData = function clearCreateData() {
111
116
  setStepOneTextInputValue('');
112
117
  setTopicDescriptionValue('');
@@ -117,6 +122,7 @@ export var MultiStepTearsheet = function MultiStepTearsheet(_ref2) {
117
122
  setIsInvalid(false);
118
123
  setOpen(false);
119
124
  setValue1('');
125
+ setShouldIncludeAdditionalStep(false);
120
126
  };
121
127
 
122
128
  return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("style", null, ".".concat(blockClass, " { opacity: 0 }"), ";"), /*#__PURE__*/React.createElement(Button, {
@@ -219,12 +225,26 @@ export var MultiStepTearsheet = function MultiStepTearsheet(_ref2) {
219
225
  onToggle: function onToggle(event) {
220
226
  return setShouldReject(event);
221
227
  }
222
- })))), /*#__PURE__*/React.createElement(CustomStep, {
228
+ }), /*#__PURE__*/React.createElement(Checkbox, {
229
+ labelText: "Include additional step",
230
+ id: "include-additional-step-checkbox",
231
+ onChange: function onChange(value) {
232
+ return setShouldIncludeAdditionalStep(value);
233
+ },
234
+ checked: shouldIncludeAdditionalStep
235
+ })))), /*#__PURE__*/React.createElement(CreateTearsheetStep, {
236
+ title: "Dynamic step",
237
+ subtitle: "Dynamic step subtitle",
238
+ description: "This is an example showing how to include a dynamic step into the CreateTearsheet",
239
+ hasFieldset: false,
240
+ includeStep: shouldIncludeAdditionalStep
241
+ }, "dynamic step content"), /*#__PURE__*/React.createElement(CustomStep, {
223
242
  title: "Location",
224
243
  subtitle: "Custom step subtitle",
225
244
  description: "Custom step description (see storybook implementation for new custom step capability)",
226
245
  value1: value1,
227
- setValue1: setValue1
246
+ setValue1: setValue1,
247
+ hasFieldset: false
228
248
  }), /*#__PURE__*/React.createElement(CreateTearsheetStep, {
229
249
  title: "Partitions",
230
250
  disableSubmit: !stepTwoTextInputValue,
@@ -3,7 +3,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  /* eslint-disable react/prop-types */
4
4
 
5
5
  /**
6
- * Copyright IBM Corp. 2021, 2021
6
+ * Copyright IBM Corp. 2021, 2022
7
7
  *
8
8
  * This source code is licensed under the Apache-2.0 license found in the
9
9
  * LICENSE file in the root directory of this source tree.
@@ -154,14 +154,16 @@ export var MultiStepWithIntro = function MultiStepWithIntro(_ref) {
154
154
  size: "lg"
155
155
  }), /*#__PURE__*/React.createElement("span", {
156
156
  className: "".concat(pkg.prefix, "--tearsheet-create-multi-step--custom-tile-label")
157
- }, "Plus")))), selectedCategory === 'plus' && /*#__PURE__*/React.createElement(CreateTearsheetStep, {
157
+ }, "Plus")))), /*#__PURE__*/React.createElement(CreateTearsheetStep, {
158
158
  title: "Conditional step",
159
159
  subtitle: "This step will only show for plus category creation flows",
160
- hasFieldset: false
161
- }, "conditional step content"), selectedCategory === 'standard' && /*#__PURE__*/React.createElement(CreateTearsheetStep, {
160
+ hasFieldset: false,
161
+ includeStep: selectedCategory === 'plus'
162
+ }, "This step will only show for plus create flows"), /*#__PURE__*/React.createElement(CreateTearsheetStep, {
162
163
  title: "Standard step only",
163
- hasFieldset: false
164
- }, "This step will only show for standard flows"), /*#__PURE__*/React.createElement(CreateTearsheetStep, {
164
+ hasFieldset: false,
165
+ includeStep: selectedCategory === 'standard'
166
+ }, "This step will only show for standard create flows"), /*#__PURE__*/React.createElement(CreateTearsheetStep, {
165
167
  onNext: function onNext() {
166
168
  return new Promise(function (resolve, reject) {
167
169
  setTimeout(function () {
@@ -2,7 +2,7 @@ import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
5
- var _excluded = ["body", "className", "error", "errorMessage", "filename", "inputLabel", "invalidInputText", "loading", "loadingMessage", "onClose", "onRequestSubmit", "open", "preformattedExtensions", "preformattedExtensionsLabel", "primaryButtonText", "secondaryButtonText", "successMessage", "successful", "title", "validExtensions"];
5
+ var _excluded = ["body", "className", "error", "errorMessage", "filename", "hidePasswordLabel", "inputLabel", "inputType", "invalidInputText", "loading", "loadingMessage", "onClose", "onRequestSubmit", "open", "preformattedExtensions", "preformattedExtensionsLabel", "primaryButtonText", "secondaryButtonText", "showPasswordLabel", "successMessage", "successful", "title", "validExtensions"];
6
6
 
7
7
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8
8
 
@@ -15,7 +15,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
15
15
  // LICENSE file in the root directory of this source tree.
16
16
  //
17
17
  import React, { useState, useRef, forwardRef } from 'react';
18
- import { Button, ComposedModal, ModalHeader, ModalFooter, ModalBody, TextInput, RadioButton, RadioButtonGroup, FormGroup, Loading } from 'carbon-components-react';
18
+ import { Button, ComposedModal, ModalHeader, ModalFooter, ModalBody, TextInput, RadioButton, RadioButtonGroup, FormGroup, Loading, PasswordInput } from 'carbon-components-react';
19
19
  import cx from 'classnames';
20
20
  import { ErrorFilled16, CheckmarkFilled16 } from '@carbon/icons-react';
21
21
  import PropTypes from 'prop-types';
@@ -31,7 +31,9 @@ export var ExportModal = /*#__PURE__*/forwardRef(function (_ref, ref) {
31
31
  error = _ref.error,
32
32
  errorMessage = _ref.errorMessage,
33
33
  filename = _ref.filename,
34
+ hidePasswordLabel = _ref.hidePasswordLabel,
34
35
  inputLabel = _ref.inputLabel,
36
+ inputType = _ref.inputType,
35
37
  invalidInputText = _ref.invalidInputText,
36
38
  loading = _ref.loading,
37
39
  loadingMessage = _ref.loadingMessage,
@@ -42,6 +44,7 @@ export var ExportModal = /*#__PURE__*/forwardRef(function (_ref, ref) {
42
44
  preformattedExtensionsLabel = _ref.preformattedExtensionsLabel,
43
45
  primaryButtonText = _ref.primaryButtonText,
44
46
  secondaryButtonText = _ref.secondaryButtonText,
47
+ showPasswordLabel = _ref.showPasswordLabel,
45
48
  successMessage = _ref.successMessage,
46
49
  successful = _ref.successful,
47
50
  title = _ref.title,
@@ -103,6 +106,17 @@ export var ExportModal = /*#__PURE__*/forwardRef(function (_ref, ref) {
103
106
  var internalId = useRef(uuidv4());
104
107
  var primaryButtonDisabled = loading || !name || hasInvalidExtension();
105
108
  var submitted = loading || error || successful;
109
+
110
+ var commonInputProps = _defineProperty({
111
+ id: "text-input--".concat(internalId.current),
112
+ value: name,
113
+ onChange: onNameChangeHandler,
114
+ labelText: inputLabel,
115
+ invalid: hasInvalidExtension(),
116
+ invalidText: invalidInputText,
117
+ onBlur: onBlurHandler
118
+ }, 'data-modal-primary-focus', true);
119
+
106
120
  return /*#__PURE__*/React.createElement(ComposedModal, _extends({}, rest, {
107
121
  className: cx(blockClass, className),
108
122
  "aria-label": title,
@@ -134,16 +148,13 @@ export var ExportModal = /*#__PURE__*/forwardRef(function (_ref, ref) {
134
148
  labelText: "".concat(o.extension, " (").concat(o.description, ")"),
135
149
  "data-modal-primary-focus": true
136
150
  });
137
- }))) : /*#__PURE__*/React.createElement(TextInput, {
138
- id: "text-input--".concat(internalId.current),
139
- value: name,
140
- onChange: onNameChangeHandler,
141
- labelText: inputLabel,
142
- invalid: hasInvalidExtension(),
143
- invalidText: invalidInputText,
144
- onBlur: onBlurHandler,
145
- "data-modal-primary-focus": true
146
- })), /*#__PURE__*/React.createElement("div", {
151
+ }))) : /*#__PURE__*/React.createElement("div", {
152
+ className: "".concat(blockClass, "__input-container")
153
+ }, inputType === 'text' ? /*#__PURE__*/React.createElement(TextInput, commonInputProps) : /*#__PURE__*/React.createElement(PasswordInput, _extends({}, commonInputProps, {
154
+ showPasswordLabel: showPasswordLabel,
155
+ hidePasswordLabel: hidePasswordLabel,
156
+ tooltipPosition: "left"
157
+ })))), /*#__PURE__*/React.createElement("div", {
147
158
  className: "".concat(blockClass, "__messaging")
148
159
  }, loading && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Loading, {
149
160
  small: true,
@@ -193,11 +204,21 @@ ExportModal.propTypes = {
193
204
  */
194
205
  filename: PropTypes.string.isRequired,
195
206
 
207
+ /**
208
+ * label text that's displayed when hovering over visibility toggler to hide key
209
+ */
210
+ hidePasswordLabel: PropTypes.string,
211
+
196
212
  /**
197
213
  * label for the text input
198
214
  */
199
215
  inputLabel: PropTypes.string,
200
216
 
217
+ /**
218
+ * specify the type of text input
219
+ */
220
+ inputType: PropTypes.oneOf(['text', 'password']),
221
+
201
222
  /**
202
223
  * text for an invalid input
203
224
  */
@@ -251,6 +272,11 @@ ExportModal.propTypes = {
251
272
  */
252
273
  secondaryButtonText: PropTypes.string.isRequired,
253
274
 
275
+ /**
276
+ * label text that's displayed when hovering over visibility toggler to show key
277
+ */
278
+ showPasswordLabel: PropTypes.string,
279
+
254
280
  /**
255
281
  * messaging to display if the export was successful
256
282
  */
@@ -272,6 +298,7 @@ ExportModal.propTypes = {
272
298
  validExtensions: PropTypes.array
273
299
  };
274
300
  ExportModal.defaultProps = {
301
+ inputType: 'text',
275
302
  preformattedExtensions: [],
276
303
  validExtensions: []
277
304
  };
@@ -508,7 +508,7 @@ SidePanel.propTypes = {
508
508
  * See https://react.carbondesignsystem.com/?path=/docs/components-button--default#component-api
509
509
  */
510
510
  actions: allPropTypes([ActionSet.validateActions(), PropTypes.arrayOf(PropTypes.shape(_objectSpread(_objectSpread({}, Button.propTypes), {}, {
511
- kind: PropTypes.oneOf(['ghost', 'secondary', 'primary']),
511
+ kind: PropTypes.oneOf(['ghost', 'danger--ghost', 'secondary', 'danger', 'primary']),
512
512
  label: PropTypes.string,
513
513
  loading: PropTypes.bool,
514
514
  // we duplicate this Button prop to improve the DocGen here
@@ -82,7 +82,7 @@ Tearsheet.propTypes = _objectSpread({
82
82
  actions: allPropTypes([ActionSet.validateActions(function () {
83
83
  return 'max';
84
84
  }), PropTypes.arrayOf(PropTypes.shape(_objectSpread(_objectSpread({}, Button.propTypes), {}, {
85
- kind: PropTypes.oneOf(['ghost', 'secondary', 'primary']),
85
+ kind: PropTypes.oneOf(['ghost', 'danger--ghost', 'secondary', 'danger', 'primary']),
86
86
  label: PropTypes.string,
87
87
  loading: PropTypes.bool,
88
88
  // we duplicate this Button prop to improve the DocGen here
@@ -78,7 +78,7 @@ TearsheetNarrow.propTypes = _objectSpread({
78
78
  actions: allPropTypes([ActionSet.validateActions(function () {
79
79
  return 'lg';
80
80
  }), PropTypes.arrayOf(PropTypes.shape(_objectSpread(_objectSpread({}, Button.propTypes), {}, {
81
- kind: PropTypes.oneOf(['ghost', 'secondary', 'primary']),
81
+ kind: PropTypes.oneOf(['ghost', 'danger--ghost', 'secondary', 'danger', 'primary']),
82
82
  label: PropTypes.string,
83
83
  loading: PropTypes.bool,
84
84
  // we duplicate this Button prop to improve the DocGen here
@@ -281,7 +281,7 @@ TearsheetShell.propTypes = _objectSpread({
281
281
  actions: PropTypes.arrayOf( // NB we don't include the validator here, as the component wrapping this
282
282
  // one should ensure appropriate validation is done.
283
283
  PropTypes.shape(_objectSpread(_objectSpread({}, Button.propTypes), {}, {
284
- kind: PropTypes.oneOf(['ghost', 'secondary', 'primary']),
284
+ kind: PropTypes.oneOf(['ghost', 'danger--ghost', 'secondary', 'danger', 'primary']),
285
285
  label: PropTypes.string,
286
286
  loading: PropTypes.bool,
287
287
  // we duplicate this Button prop to improve the DocGen here
@@ -11,4 +11,5 @@ export { useCreateComponentFocus } from './useCreateComponentFocus';
11
11
  export { useCreateComponentStepChange } from './useCreateComponentStepChange';
12
12
  export { usePreviousValue } from './usePreviousValue';
13
13
  export { useResetCreateComponent } from './useResetCreateComponent';
14
+ export { useRetrieveStepData } from './useRetrieveStepData';
14
15
  export { useValidCreateStepCount } from './useValidCreateStepCount';
@@ -2,14 +2,16 @@ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
2
  import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
 
4
4
  /**
5
- * Copyright IBM Corp. 2021, 2021
5
+ * Copyright IBM Corp. 2021, 2022
6
6
  *
7
7
  * This source code is licensed under the Apache-2.0 license found in the
8
8
  * LICENSE file in the root directory of this source tree.
9
9
  */
10
10
  import { useCallback, useEffect } from 'react';
11
11
  export var useCreateComponentStepChange = function useCreateComponentStepChange(_ref) {
12
- var totalStepCount = _ref.totalStepCount,
12
+ var firstIncludedStep = _ref.firstIncludedStep,
13
+ lastIncludedStep = _ref.lastIncludedStep,
14
+ stepData = _ref.stepData,
13
15
  onNext = _ref.onNext,
14
16
  isSubmitDisabled = _ref.isSubmitDisabled,
15
17
  setCurrentStep = _ref.setCurrentStep,
@@ -174,20 +176,29 @@ export var useCreateComponentStepChange = function useCreateComponentStepChange(
174
176
  };
175
177
  }();
176
178
 
177
- if (totalStepCount > 0) {
179
+ if ((stepData === null || stepData === void 0 ? void 0 : stepData.length) > 0) {
178
180
  var buttons = [];
179
181
 
180
- if (totalStepCount > 1 && !shouldViewAll) {
182
+ if ((stepData === null || stepData === void 0 ? void 0 : stepData.length) > 1 && !shouldViewAll) {
181
183
  buttons.push({
182
184
  key: 'create-action-button-back',
183
185
  label: backButtonText,
184
186
  onClick: function onClick() {
185
187
  return setCurrentStep(function (prev) {
186
- return prev - 1;
188
+ // Find previous included step to render
189
+ // There will always be a previous step otherwise we will
190
+ // have disabled the back button since we have reached the first visible step
191
+ do {
192
+ var _stepData;
193
+
194
+ prev--;
195
+ } while (!((_stepData = stepData[prev - 1]) !== null && _stepData !== void 0 && _stepData.shouldIncludeStep));
196
+
197
+ return prev;
187
198
  });
188
199
  },
189
200
  kind: 'secondary',
190
- disabled: currentStep === 1
201
+ disabled: currentStep === firstIncludedStep
191
202
  });
192
203
  }
193
204
 
@@ -201,8 +212,8 @@ export var useCreateComponentStepChange = function useCreateComponentStepChange(
201
212
  });
202
213
  buttons.push({
203
214
  key: 'create-action-button-submit',
204
- label: shouldViewAll ? submitButtonText : currentStep < totalStepCount ? nextButtonText : submitButtonText,
205
- onClick: shouldViewAll ? handleSubmit : currentStep < totalStepCount ? handleNext : handleSubmit,
215
+ label: shouldViewAll ? submitButtonText : currentStep < lastIncludedStep ? nextButtonText : submitButtonText,
216
+ onClick: shouldViewAll ? handleSubmit : currentStep < lastIncludedStep ? handleNext : handleSubmit,
206
217
  disabled: isSubmitDisabled,
207
218
  kind: 'primary',
208
219
  loading: isSubmitting,
@@ -210,11 +221,20 @@ export var useCreateComponentStepChange = function useCreateComponentStepChange(
210
221
  });
211
222
  setCreateComponentActions(buttons);
212
223
  }
213
- }, [totalStepCount, onNext, isSubmitDisabled, backButtonText, cancelButtonText, currentStep, onClose, nextButtonText, submitButtonText, onRequestSubmit, isSubmitting, shouldViewAll, componentBlockClass, componentName, continueToNextStep, setCurrentStep, setCreateComponentActions, setIsSubmitting, setShouldViewAll, setModalIsOpen]);
224
+ }, [firstIncludedStep, lastIncludedStep, stepData, onNext, isSubmitDisabled, backButtonText, cancelButtonText, currentStep, onClose, nextButtonText, submitButtonText, onRequestSubmit, isSubmitting, shouldViewAll, componentBlockClass, componentName, continueToNextStep, setCurrentStep, setCreateComponentActions, setIsSubmitting, setShouldViewAll, setModalIsOpen]);
214
225
  var continueToNextStep = useCallback(function () {
215
226
  setIsSubmitting(false);
216
227
  setCurrentStep(function (prev) {
217
- return prev + 1;
228
+ // Find next included step to render
229
+ // There will always be a next step otherwise we will
230
+ // have reach the onSubmit
231
+ do {
232
+ var _stepData2;
233
+
234
+ prev++;
235
+ } while (!((_stepData2 = stepData[prev - 1]) !== null && _stepData2 !== void 0 && _stepData2.shouldIncludeStep));
236
+
237
+ return prev;
218
238
  });
219
- }, [setCurrentStep, setIsSubmitting]);
239
+ }, [setCurrentStep, setIsSubmitting, stepData]);
220
240
  };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2021, 2021
2
+ * Copyright IBM Corp. 2021, 2022
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -8,6 +8,7 @@ import { useEffect } from 'react';
8
8
  /**
9
9
  * Resets the current step of the create component if it has been closed.
10
10
  * @param {object} useResetCreateComponent - Create component that uses this custom hook
11
+ * @param {object} useResetCreateComponent.firstIncludedStep
11
12
  * @param {object} useResetCreateComponent.previousState
12
13
  * @param {boolean} useResetCreateComponent.open
13
14
  * @param {Function} useResetCreateComponent.setCurrentStep
@@ -17,7 +18,8 @@ import { useEffect } from 'react';
17
18
  */
18
19
 
19
20
  export var useResetCreateComponent = function useResetCreateComponent(_ref) {
20
- var previousState = _ref.previousState,
21
+ var firstIncludedStep = _ref.firstIncludedStep,
22
+ previousState = _ref.previousState,
21
23
  open = _ref.open,
22
24
  setCurrentStep = _ref.setCurrentStep,
23
25
  initialStep = _ref.initialStep,
@@ -28,7 +30,8 @@ export var useResetCreateComponent = function useResetCreateComponent(_ref) {
28
30
  if (initialStep && totalSteps && Number(initialStep) <= Number(totalSteps) && Number(initialStep) > 0) {
29
31
  setCurrentStep(Number(initialStep));
30
32
  } else {
31
- setCurrentStep(1);
33
+ // default should be fist includedStep instead of just 1
34
+ setCurrentStep(firstIncludedStep);
32
35
  } // An invalid initialStep value was provided, we'll default to rendering the first step in this scenario
33
36
 
34
37
 
@@ -36,5 +39,5 @@ export var useResetCreateComponent = function useResetCreateComponent(_ref) {
36
39
  console.warn("".concat(componentName, ": An invalid `initialStep` prop was supplied. The `initialStep` prop should be a number that is greater than 0 or less than or equal to the number of steps your ").concat(componentName, " has."));
37
40
  }
38
41
  }
39
- }, [open, previousState, setCurrentStep, initialStep, totalSteps, componentName]);
42
+ }, [firstIncludedStep, open, previousState, setCurrentStep, initialStep, totalSteps, componentName]);
40
43
  };
@@ -0,0 +1,51 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+
3
+ /**
4
+ * Copyright IBM Corp. 2022, 2022
5
+ *
6
+ * This source code is licensed under the Apache-2.0 license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */
9
+ import { useEffect } from 'react';
10
+ /**
11
+ * This useEffect makes sure that every CreateTearsheetStep/CreateFullPageStep reports back it's
12
+ * title, secondaryLabel, introStep, and shouldIncludeStep data so that it can be sent to the CreateInfluencer.
13
+ * @param {object} useResetCreateComponent
14
+ * @param {object} useResetCreateComponent.stepsContext
15
+ * @param {number} useResetCreateComponent.stepNumber
16
+ * @param {boolean} useResetCreateComponent.introStep
17
+ * @param {boolean} useResetCreateComponent.shouldIncludeStep
18
+ * @param {string} useResetCreateComponent.secondaryLabel
19
+ * @param {string} useResetCreateComponent.title
20
+ */
21
+
22
+ export var useRetrieveStepData = function useRetrieveStepData(_ref) {
23
+ var stepsContext = _ref.stepsContext,
24
+ stepNumber = _ref.stepNumber,
25
+ introStep = _ref.introStep,
26
+ shouldIncludeStep = _ref.shouldIncludeStep,
27
+ secondaryLabel = _ref.secondaryLabel,
28
+ title = _ref.title;
29
+ useEffect(function () {
30
+ if (stepsContext) {
31
+ stepsContext.setStepData(function (prev) {
32
+ var stepItem = {
33
+ title: title,
34
+ secondaryLabel: secondaryLabel,
35
+ introStep: introStep,
36
+ shouldIncludeStep: shouldIncludeStep
37
+ };
38
+ var previousItem = prev[stepNumber - 1];
39
+
40
+ if ((previousItem === null || previousItem === void 0 ? void 0 : previousItem.title) !== stepItem.title || (previousItem === null || previousItem === void 0 ? void 0 : previousItem.secondaryLabel) !== stepItem.secondaryLabel || (previousItem === null || previousItem === void 0 ? void 0 : previousItem.introStep) !== stepItem.introStep || (previousItem === null || previousItem === void 0 ? void 0 : previousItem.shouldIncludeStep) !== stepItem.shouldIncludeStep) {
41
+ var clone = _toConsumableArray(prev);
42
+
43
+ clone[stepNumber - 1] = stepItem;
44
+ return clone;
45
+ }
46
+
47
+ return prev;
48
+ });
49
+ }
50
+ }, [shouldIncludeStep, title, secondaryLabel, introStep, stepsContext, stepNumber]);
51
+ };
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022, 2022
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ /**
9
+ * This utility will return the index of the last instance of an
10
+ * item in the given array of objects whose key is equal to the value
11
+ * parameter. If there are no matches, -1 is returned as similar to findIndex
12
+ * @param {Array<Object.*>} array
13
+ * @param {string} key
14
+ * @param {string|boolean|number} value
15
+ */
16
+ export var lastIndexInArray = function lastIndexInArray(array, key, value) {
17
+ for (var i = array.length - 1; i >= 0; i--) {
18
+ var _array$i;
19
+
20
+ if (((_array$i = array[i]) === null || _array$i === void 0 ? void 0 : _array$i[key]) === value) {
21
+ return i + 1;
22
+ }
23
+ }
24
+
25
+ return -1;
26
+ };
@@ -46,7 +46,7 @@ var ActionSetButton = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
46
46
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
47
47
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, (0, _extends2.default)({}, rest, {
48
48
  isExpressive: true,
49
- className: (0, _classnames.default)(className, ["".concat(blockClass, "__action-button"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__action-button--ghost"), kind === 'ghost')]),
49
+ className: (0, _classnames.default)(className, ["".concat(blockClass, "__action-button"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__action-button--ghost"), kind === 'ghost' || kind === 'danger--ghost')]),
50
50
  disabled: disabled || loading || false,
51
51
  kind: kind,
52
52
  onClick: onClick,
@@ -57,7 +57,7 @@ var ActionSetButton = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
57
57
 
58
58
  ActionSetButton.displayName = 'ActionSetButton';
59
59
  ActionSetButton.propTypes = _objectSpread(_objectSpread({}, _carbonComponentsReact.Button.PropTypes), {}, {
60
- kind: _propTypes.default.oneOf(['ghost', 'secondary', 'primary']),
60
+ kind: _propTypes.default.oneOf(['ghost', 'danger--ghost', 'secondary', 'danger', 'primary']),
61
61
  label: _propTypes.default.string,
62
62
  loading: _propTypes.default.bool
63
63
  });
@@ -90,13 +90,24 @@ var ActionSet = /*#__PURE__*/_react.default.forwardRef(function (_ref3, ref) {
90
90
  rest = (0, _objectWithoutProperties2.default)(_ref3, _excluded2);
91
91
  var buttons = actions && ((_actions$slice = actions.slice) === null || _actions$slice === void 0 ? void 0 : _actions$slice.call(actions, 0)) || []; // We stack the buttons in a xs/sm set, or if there are three or more in a md set.
92
92
 
93
- var stacking = willStack(size, buttons.length); // order the actions with ghost buttons first and primary buttons last
94
- // (and the opposite way if we're stacking)
93
+ var stacking = willStack(size, buttons.length); // Order of button kinds: ghost first, then danger--ghost, then most other types,
94
+ // then danger, and finally primary
95
+
96
+ var buttonOrder = function buttonOrder(kind) {
97
+ var _ghost$dangerGhost$;
98
+
99
+ return (_ghost$dangerGhost$ = {
100
+ ghost: 1,
101
+ 'danger--ghost': 2,
102
+ danger: 4,
103
+ primary: 5
104
+ }[kind]) !== null && _ghost$dangerGhost$ !== void 0 ? _ghost$dangerGhost$ : 3;
105
+ }; // order the actions with ghost/ghost-danger buttons first and primary/danger buttons last
106
+ // (or the opposite way if we're stacking)
107
+
95
108
 
96
109
  buttons.sort(function (action1, action2) {
97
- var kind1 = action1.kind || defaultKind;
98
- var kind2 = action2.kind || defaultKind;
99
- return kind1 === 'ghost' || kind2 === 'primary' ? stacking ? 1 : -1 : kind1 === 'primary' || kind2 === 'ghost' ? stacking ? -1 : 1 : 0;
110
+ return (buttonOrder(action1.kind || defaultKind) - buttonOrder(action2.kind || defaultKind)) * (stacking ? -1 : 1);
100
111
  });
101
112
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.ButtonSet, (0, _extends2.default)({}, rest, {
102
113
  className: (0, _classnames.default)(blockClass, className, (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--row-single"), !stacking && buttons.length === 1), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--row-double"), !stacking && buttons.length === 2), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--row-triple"), !stacking && buttons.length === 3), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--row-quadruple"), !stacking && buttons.length >= 4), (0, _defineProperty2.default)(_cx, "".concat(blockClass, "--stacking"), stacking), _cx), "".concat(blockClass, "--").concat(size)),
@@ -147,13 +158,14 @@ ActionSet.validateActions = function (sizeFn) {
147
158
 
148
159
  var primaryActions = countActions('primary');
149
160
  var secondaryActions = countActions('secondary');
150
- var ghostActions = countActions('ghost');
161
+ var dangerActions = countActions('danger');
162
+ var ghostActions = countActions('ghost') + countActions('danger--ghost');
151
163
  stacking && actions > 3 && problems.push("you cannot have more than three actions in this size of ".concat(componentName));
152
164
  actions > 4 && problems.push("you cannot have more than four actions in a ".concat(componentName));
153
165
  primaryActions > 1 && problems.push("you cannot have more than one 'primary' action in a ".concat(componentName));
154
166
  ghostActions > 1 && problems.push("you cannot have more than one 'ghost' action in a ".concat(componentName));
155
167
  stacking && actions > 1 && ghostActions > 0 && problems.push("you cannot have a 'ghost' button in conjunction with other action types in this size of ".concat(componentName));
156
- actions > primaryActions + secondaryActions + ghostActions && problems.push("you can only have 'primary', 'secondary' and 'ghost' buttons in a ".concat(componentName));
168
+ actions > primaryActions + secondaryActions + dangerActions + ghostActions && problems.push("you can only have 'primary', 'danger', 'secondary', 'ghost' and 'danger--ghost' buttons in a ".concat(componentName));
157
169
  }
158
170
 
159
171
  return problems.length > 0 ? new Error("Invalid ".concat(location, " `").concat(name, "` supplied to `").concat(componentName, "`: ").concat(problems.join(', and '), ".")) : null;
@@ -174,7 +186,7 @@ ActionSet.propTypes = {
174
186
  * See https://react.carbondesignsystem.com/?path=/docs/components-button--default#component-api
175
187
  */
176
188
  actions: (0, _propsHelper.allPropTypes)([ActionSet.validateActions(), _propTypes.default.arrayOf(_propTypes.default.shape(_objectSpread(_objectSpread({}, _carbonComponentsReact.Button.propTypes), {}, {
177
- kind: _propTypes.default.oneOf(['ghost', 'secondary', 'primary']),
189
+ kind: _propTypes.default.oneOf(['ghost', 'danger--ghost', 'secondary', 'danger', 'primary']),
178
190
  label: _propTypes.default.string,
179
191
  loading: _propTypes.default.bool,
180
192
  // we duplicate this Button prop to improve the DocGen here
@@ -11,22 +11,25 @@ exports.actionsOptions = exports.actionsMapping = exports.actionsLabels = void 0
11
11
  * This source code is licensed under the Apache-2.0 license found in the
12
12
  * LICENSE file in the root directory of this source tree.
13
13
  */
14
- var actionsOptions = [0, 1, 2, 3, 4, 5, 6, 7];
14
+ var actionsOptions = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
15
15
  exports.actionsOptions = actionsOptions;
16
16
  var actionsLabels = {
17
17
  0: 'None',
18
18
  1: 'One button',
19
- 2: 'One ghost button',
20
- 3: 'Two buttons',
21
- 4: 'Two buttons including one ghost',
22
- 5: 'Three buttons',
23
- 6: 'Three buttons including one ghost',
24
- 7: 'Four buttons including one ghost'
19
+ 2: 'A danger button',
20
+ 3: 'A ghost button',
21
+ 4: 'Two buttons',
22
+ 5: 'Two buttons with one ghost',
23
+ 6: 'Three buttons',
24
+ 7: 'Three buttons with one ghost',
25
+ 8: 'Three buttons with one danger',
26
+ 9: 'Four buttons with one ghost',
27
+ 10: 'Four buttons with two danger'
25
28
  };
26
29
  exports.actionsLabels = actionsLabels;
27
30
 
28
31
  var actionsMapping = function actionsMapping(labels, action) {
29
- var _labels$primary, _labels$secondary, _labels$secondary2, _labels$ghost;
32
+ var _labels$primary, _labels$danger, _labels$secondary, _labels$secondary2, _labels$dangerGhost, _labels$ghost;
30
33
 
31
34
  var act = function act(label, kind, key) {
32
35
  var actionCall = action && action("Click on '".concat(label, "'"));
@@ -42,18 +45,23 @@ var actionsMapping = function actionsMapping(labels, action) {
42
45
  };
43
46
 
44
47
  var primary = act((_labels$primary = labels === null || labels === void 0 ? void 0 : labels.primary) !== null && _labels$primary !== void 0 ? _labels$primary : 'Primary', 'primary', 1);
45
- var secondary = act((_labels$secondary = labels === null || labels === void 0 ? void 0 : labels.secondary) !== null && _labels$secondary !== void 0 ? _labels$secondary : 'Secondary', 'secondary', 2);
46
- var secondary2 = act((_labels$secondary2 = labels === null || labels === void 0 ? void 0 : labels.secondary2) !== null && _labels$secondary2 !== void 0 ? _labels$secondary2 : 'Secondary', 'secondary', 3);
47
- var ghost = act((_labels$ghost = labels === null || labels === void 0 ? void 0 : labels.ghost) !== null && _labels$ghost !== void 0 ? _labels$ghost : 'Ghost', 'ghost', 4);
48
+ var danger = act((_labels$danger = labels === null || labels === void 0 ? void 0 : labels.danger) !== null && _labels$danger !== void 0 ? _labels$danger : 'Danger', 'danger', 2);
49
+ var secondary = act((_labels$secondary = labels === null || labels === void 0 ? void 0 : labels.secondary) !== null && _labels$secondary !== void 0 ? _labels$secondary : 'Secondary', 'secondary', 3);
50
+ var secondary2 = act((_labels$secondary2 = labels === null || labels === void 0 ? void 0 : labels.secondary2) !== null && _labels$secondary2 !== void 0 ? _labels$secondary2 : 'Secondary', 'secondary', 4);
51
+ var dangerGhost = act((_labels$dangerGhost = labels === null || labels === void 0 ? void 0 : labels.dangerGhost) !== null && _labels$dangerGhost !== void 0 ? _labels$dangerGhost : 'Danger-ghost', 'danger--ghost', 5);
52
+ var ghost = act((_labels$ghost = labels === null || labels === void 0 ? void 0 : labels.ghost) !== null && _labels$ghost !== void 0 ? _labels$ghost : 'Ghost', 'ghost', 6);
48
53
  return {
49
54
  0: [],
50
55
  1: [primary],
51
- 2: [ghost],
52
- 3: [primary, secondary],
53
- 4: [primary, ghost],
54
- 5: [primary, secondary, secondary2],
55
- 6: [primary, secondary, ghost],
56
- 7: [primary, secondary, secondary2, ghost]
56
+ 2: [danger],
57
+ 3: [ghost],
58
+ 4: [primary, secondary],
59
+ 5: [primary, ghost],
60
+ 6: [primary, secondary, secondary2],
61
+ 7: [primary, secondary, ghost],
62
+ 8: [danger, secondary, ghost],
63
+ 9: [primary, secondary, secondary2, ghost],
64
+ 10: [danger, secondary, secondary2, dangerGhost]
57
65
  };
58
66
  };
59
67