@carbon/ibm-products 2.6.1 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. package/css/index-full-carbon.css +6288 -5847
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +3 -3
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +21 -21
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +2 -2
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +1256 -184
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +3 -3
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +3666 -3609
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +2 -2
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/CreateTearsheet/CreateTearsheet.js +30 -14
  18. package/es/components/CreateTearsheet/CreateTearsheetStep.js +10 -4
  19. package/es/components/CreateTearsheet/preview-components/MultiStepTearsheet.js +3 -0
  20. package/es/components/Datagrid/Datagrid/Datagrid.js +12 -7
  21. package/es/components/Datagrid/Datagrid/DatagridContent.js +18 -14
  22. package/es/components/Datagrid/Datagrid/DatagridHeaderRow.js +12 -1
  23. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +1 -23
  24. package/es/components/Datagrid/utils/getColTitle.js +25 -0
  25. package/es/components/NotificationsPanel/NotificationsPanel.js +5 -5
  26. package/es/components/OptionsTile/OptionsTile.js +2 -4
  27. package/es/global/js/hooks/useCreateComponentStepChange.js +98 -49
  28. package/es/global/js/hooks/useResizeObserver.js +15 -1
  29. package/es/global/js/hooks/useRetrieveStepData.js +1 -1
  30. package/es/global/js/utils/StoryDocsPage.js +0 -1
  31. package/lib/components/CreateTearsheet/CreateTearsheet.js +30 -14
  32. package/lib/components/CreateTearsheet/CreateTearsheetStep.js +10 -4
  33. package/lib/components/CreateTearsheet/preview-components/MultiStepTearsheet.js +3 -0
  34. package/lib/components/Datagrid/Datagrid/Datagrid.js +12 -7
  35. package/lib/components/Datagrid/Datagrid/DatagridContent.js +17 -13
  36. package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +12 -1
  37. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +4 -26
  38. package/lib/components/Datagrid/utils/getColTitle.js +32 -0
  39. package/lib/components/NotificationsPanel/NotificationsPanel.js +5 -5
  40. package/lib/components/OptionsTile/OptionsTile.js +2 -4
  41. package/lib/global/js/hooks/useCreateComponentStepChange.js +98 -49
  42. package/lib/global/js/hooks/useResizeObserver.js +15 -1
  43. package/lib/global/js/hooks/useRetrieveStepData.js +1 -1
  44. package/lib/global/js/utils/StoryDocsPage.js +0 -1
  45. package/package.json +8 -8
@@ -7,27 +7,28 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
7
7
  * LICENSE file in the root directory of this source tree.
8
8
  */
9
9
 
10
+ import { FilterContext, FilterPanel } from './addons/Filtering';
10
11
  import React, { useContext, useEffect, useRef } from 'react';
11
- import cx from 'classnames';
12
- import PropTypes from 'prop-types';
13
- import { TableContainer, Table } from '@carbon/react';
14
- import { px } from '@carbon/layout';
15
- import DatagridHead from './DatagridHead';
12
+ import { Table, TableContainer } from '@carbon/react';
13
+ import { carbon, pkg } from '../../../settings';
14
+ import { CLEAR_FILTERS } from './addons/Filtering/constants';
16
15
  import DatagridBody from './DatagridBody';
16
+ import DatagridHead from './DatagridHead';
17
17
  import DatagridToolbar from './DatagridToolbar';
18
- import { handleGridKeyPress } from './addons/InlineEdit/handleGridKeyPress';
19
- import { carbon, pkg } from '../../../settings';
18
+ import { FilterSummary } from '../../FilterSummary';
20
19
  import { InlineEditContext } from './addons/InlineEdit/InlineEditContext';
21
- import { FilterContext, FilterPanel } from './addons/Filtering';
20
+ import PropTypes from 'prop-types';
21
+ import cx from 'classnames';
22
22
  import { handleGridFocus } from './addons/InlineEdit/handleGridFocus';
23
+ import { handleGridKeyPress } from './addons/InlineEdit/handleGridKeyPress';
24
+ import { px } from '@carbon/layout';
23
25
  import { useClickOutside } from '../../../global/js/hooks';
24
26
  import { useMultipleKeyTracking } from '../../DataSpreadsheet/hooks';
25
- import { FilterSummary } from '../../FilterSummary';
26
- import { CLEAR_FILTERS } from './addons/Filtering/constants';
27
27
  var blockClass = "".concat(pkg.prefix, "--datagrid");
28
28
  export var DatagridContent = function DatagridContent(_ref) {
29
29
  var _cx4;
30
- var datagridState = _ref.datagridState;
30
+ var datagridState = _ref.datagridState,
31
+ title = _ref.title;
31
32
  var _useContext = useContext(InlineEditContext),
32
33
  inlineEditState = _useContext.state,
33
34
  dispatch = _useContext.dispatch;
@@ -95,7 +96,8 @@ export var DatagridContent = function DatagridContent(_ref) {
95
96
  } : null,
96
97
  onFocus: withInlineEdit ? function () {
97
98
  return handleGridFocus(inlineEditState, dispatch);
98
- } : null
99
+ } : null,
100
+ title: title
99
101
  }), !withVirtualScroll ? /*#__PURE__*/React.createElement(DatagridHead, datagridState) : null, /*#__PURE__*/React.createElement(DatagridBody, _extends({}, datagridState, {
100
102
  rows: rows
101
103
  })));
@@ -126,7 +128,8 @@ export var DatagridContent = function DatagridContent(_ref) {
126
128
  filters: filterTags,
127
129
  clearFilters: function clearFilters() {
128
130
  return EventEmitter.dispatch(CLEAR_FILTERS);
129
- }
131
+ },
132
+ renderLabel: filterProps.renderLabel
130
133
  });
131
134
  };
132
135
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TableContainer, {
@@ -177,5 +180,6 @@ DatagridContent.propTypes = {
177
180
  setAllFilters: PropTypes.func,
178
181
  getFilterProps: PropTypes.func,
179
182
  state: PropTypes.object
180
- })
183
+ }),
184
+ title: PropTypes.string
181
185
  };
@@ -13,7 +13,18 @@ import cx from 'classnames';
13
13
  import { TableHeader, TableRow } from '@carbon/react';
14
14
  import { selectionColumnId } from '../common-column-ids';
15
15
  import { pkg } from '../../../settings';
16
+ import getColTitle from '../utils/getColTitle';
16
17
  var blockClass = "".concat(pkg.prefix, "--datagrid");
18
+ var getAccessibilityProps = function getAccessibilityProps(header) {
19
+ var props = {};
20
+ var title = getColTitle(header);
21
+ if (title) {
22
+ props.title = title;
23
+ } else {
24
+ props['aria-hidden'] = true;
25
+ }
26
+ return props;
27
+ };
17
28
  var HeaderRow = function HeaderRow(datagridState, headRef, headerGroup) {
18
29
  return /*#__PURE__*/React.createElement(TableRow, _extends({}, headerGroup.getHeaderGroupProps({
19
30
  role: false
@@ -36,7 +47,7 @@ var HeaderRow = function HeaderRow(datagridState, headRef, headerGroup) {
36
47
  }), {
37
48
  className: cx((_cx = {}, _defineProperty(_cx, "".concat(blockClass, "__resizableColumn"), header.getResizerProps), _defineProperty(_cx, "".concat(blockClass, "__isResizing"), header.isResizing), _defineProperty(_cx, "".concat(blockClass, "__sortableColumn"), datagridState.isTableSortable), _defineProperty(_cx, "".concat(blockClass, "__isSorted"), header.isSorted), _cx), header.getHeaderProps().className),
38
49
  key: header.id
39
- }), header.render('Header'), header.getResizerProps && /*#__PURE__*/React.createElement("div", _extends({}, header.getResizerProps(), {
50
+ }, getAccessibilityProps(header)), header.render('Header'), header.getResizerProps && /*#__PURE__*/React.createElement("div", _extends({}, header.getResizerProps(), {
40
51
  className: "".concat(blockClass, "__resizer")
41
52
  })));
42
53
  }));
@@ -11,6 +11,7 @@ import { Checkbox } from '@carbon/react';
11
11
  import { isColumnVisible } from './common';
12
12
  import DraggableElement from '../../DraggableElement';
13
13
  import { pkg } from '../../../../../settings';
14
+ import getColTitle from '../../../utils/getColTitle';
14
15
  var blockClass = "".concat(pkg.prefix, "--datagrid");
15
16
  export var DraggableItemsList = function DraggableItemsList(_ref) {
16
17
  var columns = _ref.columns,
@@ -22,29 +23,6 @@ export var DraggableItemsList = function DraggableItemsList(_ref) {
22
23
  setAriaRegionText = _ref.setAriaRegionText,
23
24
  setColumnsObject = _ref.setColumnsObject,
24
25
  setFocusIndex = _ref.setFocusIndex;
25
- // This function recursively looks for the nested header element until we can find the key which contains the title.
26
- // This can happen if multiple hooks are used together that manipulate the rendering of the column
27
- // header, such as `useColumnCenterAlign` and `useSortableColumns`.
28
- var getNestedTitle = function getNestedTitle(component) {
29
- if (component && !component.key) {
30
- return getNestedTitle(component.children);
31
- }
32
- if (component && component.key && typeof component.key === 'string') {
33
- return component.key;
34
- }
35
- };
36
- var getColTitle = function getColTitle(col) {
37
- if (!col) {
38
- return;
39
- }
40
- var checkTitle = function checkTitle() {
41
- if (col.Header().props.children.props && col.Header().props.children.props.title) {
42
- return col.Header().props.children.props.title;
43
- }
44
- return getNestedTitle(col.Header().props.children.props);
45
- };
46
- return typeof (col === null || col === void 0 ? void 0 : col.Header) === 'function' ? checkTitle() : col.Header.props.title;
47
- };
48
26
  return /*#__PURE__*/React.createElement(React.Fragment, null, columns
49
27
  // hide the columns without Header, e.g the sticky actions, spacer
50
28
  .filter(function (colDef) {
@@ -0,0 +1,25 @@
1
+ // This function recursively looks for the nested header element until we can find the key which contains the title.
2
+ // This can happen if multiple hooks are used together that manipulate the rendering of the column
3
+ // header, such as `useColumnCenterAlign` and `useSortableColumns`.
4
+ var getNestedTitle = function getNestedTitle(component) {
5
+ if (component && !component.key) {
6
+ return getNestedTitle(component.children);
7
+ }
8
+ if (component && component.key && typeof component.key === 'string') {
9
+ return component.key;
10
+ }
11
+ };
12
+ var getColTitle = function getColTitle(col) {
13
+ var _col$Header;
14
+ if (!col) {
15
+ return;
16
+ }
17
+ var checkTitle = function checkTitle() {
18
+ if (col.Header().props.children.props && col.Header().props.children.props.title) {
19
+ return col.Header().props.children.props.title;
20
+ }
21
+ return getNestedTitle(col.Header().props.children.props);
22
+ };
23
+ return typeof (col === null || col === void 0 ? void 0 : col.Header) === 'function' ? checkTitle() : col === null || col === void 0 || (_col$Header = col.Header) === null || _col$Header === void 0 || (_col$Header = _col$Header.props) === null || _col$Header === void 0 ? void 0 : _col$Header.title;
24
+ };
25
+ export default getColTitle;
@@ -331,7 +331,7 @@ export var NotificationsPanel = /*#__PURE__*/React.forwardRef(function (_ref, re
331
331
  className: "".concat(blockClass, "__header-container")
332
332
  }, /*#__PURE__*/React.createElement("div", {
333
333
  className: "".concat(blockClass, "__header-flex")
334
- }, /*#__PURE__*/React.createElement("h1", {
334
+ }, /*#__PURE__*/React.createElement("h2", {
335
335
  className: "".concat(blockClass, "__header")
336
336
  }, title), /*#__PURE__*/React.createElement(Button, {
337
337
  size: "sm",
@@ -340,7 +340,7 @@ export var NotificationsPanel = /*#__PURE__*/React.forwardRef(function (_ref, re
340
340
  onClick: function onClick() {
341
341
  return onDismissAllNotifications();
342
342
  }
343
- }, dismissAllLabel)), /*#__PURE__*/React.createElement(Toggle, {
343
+ }, dismissAllLabel)), onDoNotDisturbChange && /*#__PURE__*/React.createElement(Toggle, {
344
344
  size: "sm",
345
345
  className: "".concat(blockClass, "__do-not-disturb-toggle"),
346
346
  id: "".concat(blockClass, "__do-not-disturb-toggle-component"),
@@ -441,11 +441,11 @@ NotificationsPanel.propTypes = {
441
441
  */
442
442
  dismissSingleNotificationIconDescription: PropTypes.string,
443
443
  /**
444
- * Determines if the `Do not disturb` toggle is on or off when the component is rendered
444
+ * Optional: Determines if the `Do not disturb` toggle is on or off when the component is rendered
445
445
  */
446
446
  doNotDisturbDefaultToggled: PropTypes.bool,
447
447
  /**
448
- * Label for Do not disturb toggle
448
+ * Optional: Label for Do not disturb toggle
449
449
  */
450
450
  doNotDisturbLabel: PropTypes.string,
451
451
  /**
@@ -493,7 +493,7 @@ NotificationsPanel.propTypes = {
493
493
  */
494
494
  onDismissSingleNotification: PropTypes.func,
495
495
  /**
496
- * Function that returns the current selected value of the disable notification toggle
496
+ * Optional: function that returns the current selected value of the disable notification toggle
497
497
  */
498
498
  onDoNotDisturbChange: PropTypes.func,
499
499
  /**
@@ -217,13 +217,11 @@ export var OptionsTile = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
217
217
  id: "".concat(id, "-toggle"),
218
218
  className: "".concat(blockClass, "__toggle"),
219
219
  toggled: enabled,
220
- labelA: "",
221
- labelB: "",
222
220
  "aria-labelledby": titleId,
221
+ hideLabel: true,
223
222
  onToggle: onToggle,
224
223
  size: "sm",
225
- disabled: isLocked,
226
- labelText: title
224
+ disabled: isLocked
227
225
  })), isExpandable ? /*#__PURE__*/React.createElement("details", {
228
226
  open: isOpen,
229
227
  ref: detailsRef
@@ -1,7 +1,7 @@
1
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
2
  import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
  /**
4
- * Copyright IBM Corp. 2021, 2022
4
+ * Copyright IBM Corp. 2021, 2023
5
5
  *
6
6
  * This source code is licensed under the Apache-2.0 license found in the
7
7
  * LICENSE file in the root directory of this source tree.
@@ -12,16 +12,19 @@ export var useCreateComponentStepChange = function useCreateComponentStepChange(
12
12
  var firstIncludedStep = _ref.firstIncludedStep,
13
13
  lastIncludedStep = _ref.lastIncludedStep,
14
14
  stepData = _ref.stepData,
15
+ onPrevious = _ref.onPrevious,
15
16
  onNext = _ref.onNext,
16
17
  isSubmitDisabled = _ref.isSubmitDisabled,
17
18
  setCurrentStep = _ref.setCurrentStep,
18
19
  setIsSubmitting = _ref.setIsSubmitting,
19
- setShouldViewAll = _ref.setShouldViewAll,
20
+ _ref$setLoadingPrevio = _ref.setLoadingPrevious,
21
+ setLoadingPrevious = _ref$setLoadingPrevio === void 0 ? null : _ref$setLoadingPrevio,
22
+ _ref$loadingPrevious = _ref.loadingPrevious,
23
+ loadingPrevious = _ref$loadingPrevious === void 0 ? false : _ref$loadingPrevious,
20
24
  onClose = _ref.onClose,
21
25
  onRequestSubmit = _ref.onRequestSubmit,
22
26
  componentName = _ref.componentName,
23
27
  currentStep = _ref.currentStep,
24
- shouldViewAll = _ref.shouldViewAll,
25
28
  backButtonText = _ref.backButtonText,
26
29
  cancelButtonText = _ref.cancelButtonText,
27
30
  submitButtonText = _ref.submitButtonText,
@@ -43,6 +46,21 @@ export var useCreateComponentStepChange = function useCreateComponentStepChange(
43
46
  return prev;
44
47
  });
45
48
  }, [setCurrentStep, setIsSubmitting, stepData]);
49
+ var moveToPreviousStep = useCallback(function () {
50
+ if (componentName !== 'CreateFullPage') {
51
+ setLoadingPrevious(false);
52
+ }
53
+ setCurrentStep(function (prev) {
54
+ // Find previous included step to render
55
+ // There will always be a previous step otherwise we will
56
+ // have disabled the back button since we have reached the first visible step
57
+ do {
58
+ var _stepData2;
59
+ prev--;
60
+ } while (!((_stepData2 = stepData[prev - 1]) !== null && _stepData2 !== void 0 && _stepData2.shouldIncludeStep));
61
+ return prev;
62
+ });
63
+ }, [setCurrentStep, stepData, setLoadingPrevious, componentName]);
46
64
 
47
65
  // useEffect to handle multi step logic
48
66
  useEffect(function () {
@@ -51,7 +69,6 @@ export var useCreateComponentStepChange = function useCreateComponentStepChange(
51
69
  setCurrentStep(0);
52
70
  }
53
71
  setIsSubmitting(false);
54
- setShouldViewAll(false);
55
72
  onClose();
56
73
  };
57
74
  var handleOnRequestSubmit = /*#__PURE__*/function () {
@@ -81,104 +98,136 @@ export var useCreateComponentStepChange = function useCreateComponentStepChange(
81
98
  return _ref2.apply(this, arguments);
82
99
  };
83
100
  }();
84
- var handleNext = /*#__PURE__*/function () {
101
+ var handlePrevious = /*#__PURE__*/function () {
85
102
  var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
86
103
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
87
104
  while (1) switch (_context2.prev = _context2.next) {
105
+ case 0:
106
+ if (!(componentName === 'CreateFullPage')) {
107
+ _context2.next = 2;
108
+ break;
109
+ }
110
+ return _context2.abrupt("return");
111
+ case 2:
112
+ setLoadingPrevious(true);
113
+ if (!(typeof onPrevious === 'function')) {
114
+ _context2.next = 15;
115
+ break;
116
+ }
117
+ _context2.prev = 4;
118
+ _context2.next = 7;
119
+ return onPrevious();
120
+ case 7:
121
+ moveToPreviousStep();
122
+ _context2.next = 13;
123
+ break;
124
+ case 10:
125
+ _context2.prev = 10;
126
+ _context2.t0 = _context2["catch"](4);
127
+ console.warn("".concat(componentName, " onBack error: ").concat(_context2.t0));
128
+ case 13:
129
+ _context2.next = 16;
130
+ break;
131
+ case 15:
132
+ moveToPreviousStep();
133
+ case 16:
134
+ case "end":
135
+ return _context2.stop();
136
+ }
137
+ }, _callee2, null, [[4, 10]]);
138
+ }));
139
+ return function handlePrevious() {
140
+ return _ref3.apply(this, arguments);
141
+ };
142
+ }();
143
+ var handleNext = /*#__PURE__*/function () {
144
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
145
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
146
+ while (1) switch (_context3.prev = _context3.next) {
88
147
  case 0:
89
148
  setIsSubmitting(true);
90
149
  if (!(typeof onNext === 'function')) {
91
- _context2.next = 14;
150
+ _context3.next = 14;
92
151
  break;
93
152
  }
94
- _context2.prev = 2;
95
- _context2.next = 5;
153
+ _context3.prev = 2;
154
+ _context3.next = 5;
96
155
  return onNext();
97
156
  case 5:
98
157
  continueToNextStep();
99
- _context2.next = 12;
158
+ _context3.next = 12;
100
159
  break;
101
160
  case 8:
102
- _context2.prev = 8;
103
- _context2.t0 = _context2["catch"](2);
161
+ _context3.prev = 8;
162
+ _context3.t0 = _context3["catch"](2);
104
163
  setIsSubmitting(false);
105
- console.warn("".concat(componentName, " onNext error: ").concat(_context2.t0));
164
+ console.warn("".concat(componentName, " onNext error: ").concat(_context3.t0));
106
165
  case 12:
107
- _context2.next = 15;
166
+ _context3.next = 15;
108
167
  break;
109
168
  case 14:
110
169
  continueToNextStep();
111
170
  case 15:
112
171
  case "end":
113
- return _context2.stop();
172
+ return _context3.stop();
114
173
  }
115
- }, _callee2, null, [[2, 8]]);
174
+ }, _callee3, null, [[2, 8]]);
116
175
  }));
117
176
  return function handleNext() {
118
- return _ref3.apply(this, arguments);
177
+ return _ref4.apply(this, arguments);
119
178
  };
120
179
  }();
121
180
  var handleSubmit = /*#__PURE__*/function () {
122
- var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
123
- return _regeneratorRuntime.wrap(function _callee3$(_context3) {
124
- while (1) switch (_context3.prev = _context3.next) {
181
+ var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
182
+ return _regeneratorRuntime.wrap(function _callee4$(_context4) {
183
+ while (1) switch (_context4.prev = _context4.next) {
125
184
  case 0:
126
185
  setIsSubmitting(true);
127
186
  // last step should have onNext as well
128
187
  if (!(typeof onNext === 'function')) {
129
- _context3.next = 15;
188
+ _context4.next = 15;
130
189
  break;
131
190
  }
132
- _context3.prev = 2;
133
- _context3.next = 5;
191
+ _context4.prev = 2;
192
+ _context4.next = 5;
134
193
  return onNext();
135
194
  case 5:
136
- _context3.next = 7;
195
+ _context4.next = 7;
137
196
  return handleOnRequestSubmit();
138
197
  case 7:
139
- _context3.next = 13;
198
+ _context4.next = 13;
140
199
  break;
141
200
  case 9:
142
- _context3.prev = 9;
143
- _context3.t0 = _context3["catch"](2);
201
+ _context4.prev = 9;
202
+ _context4.t0 = _context4["catch"](2);
144
203
  setIsSubmitting(false);
145
- console.warn("".concat(componentName, " onNext error: ").concat(_context3.t0));
204
+ console.warn("".concat(componentName, " onNext error: ").concat(_context4.t0));
146
205
  case 13:
147
- _context3.next = 17;
206
+ _context4.next = 17;
148
207
  break;
149
208
  case 15:
150
- _context3.next = 17;
209
+ _context4.next = 17;
151
210
  return handleOnRequestSubmit();
152
211
  case 17:
153
212
  case "end":
154
- return _context3.stop();
213
+ return _context4.stop();
155
214
  }
156
- }, _callee3, null, [[2, 9]]);
215
+ }, _callee4, null, [[2, 9]]);
157
216
  }));
158
217
  return function handleSubmit() {
159
- return _ref4.apply(this, arguments);
218
+ return _ref5.apply(this, arguments);
160
219
  };
161
220
  }();
162
221
  if ((stepData === null || stepData === void 0 ? void 0 : stepData.length) > 0) {
163
222
  var buttons = [];
164
- if ((stepData === null || stepData === void 0 ? void 0 : stepData.length) > 1 && !shouldViewAll) {
223
+ if ((stepData === null || stepData === void 0 ? void 0 : stepData.length) > 1) {
165
224
  buttons.push({
166
225
  key: 'create-action-button-back',
167
226
  label: backButtonText,
168
- onClick: function onClick() {
169
- return setCurrentStep(function (prev) {
170
- // Find previous included step to render
171
- // There will always be a previous step otherwise we will
172
- // have disabled the back button since we have reached the first visible step
173
- do {
174
- var _stepData2;
175
- prev--;
176
- } while (!((_stepData2 = stepData[prev - 1]) !== null && _stepData2 !== void 0 && _stepData2.shouldIncludeStep));
177
- return prev;
178
- });
179
- },
227
+ onClick: handlePrevious,
180
228
  kind: 'secondary',
181
- disabled: currentStep === firstIncludedStep
229
+ disabled: currentStep === firstIncludedStep,
230
+ loading: loadingPrevious
182
231
  });
183
232
  }
184
233
  buttons.push({
@@ -191,8 +240,8 @@ export var useCreateComponentStepChange = function useCreateComponentStepChange(
191
240
  });
192
241
  buttons.push({
193
242
  key: 'create-action-button-submit',
194
- label: shouldViewAll ? submitButtonText : currentStep < lastIncludedStep ? nextButtonText : submitButtonText,
195
- onClick: shouldViewAll ? handleSubmit : currentStep < lastIncludedStep ? handleNext : handleSubmit,
243
+ label: currentStep < lastIncludedStep ? nextButtonText : submitButtonText,
244
+ onClick: currentStep < lastIncludedStep ? handleNext : handleSubmit,
196
245
  disabled: isSubmitDisabled,
197
246
  kind: 'primary',
198
247
  loading: isSubmitting,
@@ -200,5 +249,5 @@ export var useCreateComponentStepChange = function useCreateComponentStepChange(
200
249
  });
201
250
  setCreateComponentActions(buttons);
202
251
  }
203
- }, [firstIncludedStep, lastIncludedStep, stepData, onNext, isSubmitDisabled, backButtonText, cancelButtonText, currentStep, onClose, nextButtonText, submitButtonText, onRequestSubmit, isSubmitting, shouldViewAll, componentBlockClass, componentName, continueToNextStep, setCurrentStep, setCreateComponentActions, setIsSubmitting, setShouldViewAll, setModalIsOpen]);
252
+ }, [firstIncludedStep, lastIncludedStep, stepData, onNext, isSubmitDisabled, backButtonText, cancelButtonText, currentStep, onClose, nextButtonText, submitButtonText, onRequestSubmit, isSubmitting, componentBlockClass, componentName, continueToNextStep, setCurrentStep, setCreateComponentActions, setIsSubmitting, setModalIsOpen, moveToPreviousStep, onPrevious, setLoadingPrevious, loadingPrevious]);
204
253
  };
@@ -18,11 +18,25 @@ export var useResizeObserver = function useResizeObserver(ref, callback) {
18
18
  var entriesToHandle = useRef(null);
19
19
  var cb = useRef(callback);
20
20
  useEffect(function () {
21
- // ref for callback removes it as dependency fro useLayoutEffect
21
+ // ref for callback removes it as dependency from useLayoutEffect
22
22
  // This significantly reduces repeated calls if a function is redefined on every
23
23
  // render
24
24
  cb.current = callback;
25
25
  }, [callback]);
26
+ useEffect(function () {
27
+ var getInitialSize = function getInitialSize() {
28
+ if (ref.current) {
29
+ var _ref$current;
30
+ var refComputedStyle = window.getComputedStyle(ref.current);
31
+ var initialWidth = (((_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.offsetWidth) || 0) - (parseFloat((refComputedStyle === null || refComputedStyle === void 0 ? void 0 : refComputedStyle.paddingLeft) || 0), parseFloat((refComputedStyle === null || refComputedStyle === void 0 ? void 0 : refComputedStyle.paddingRight) || 0));
32
+ setWidth(initialWidth);
33
+ }
34
+ };
35
+ if (!(ref !== null && ref !== void 0 && ref.current) && width !== 0) {
36
+ return;
37
+ }
38
+ getInitialSize();
39
+ }, [width, ref]);
26
40
  useLayoutEffect(function () {
27
41
  if (!(ref !== null && ref !== void 0 && ref.current)) {
28
42
  return;
@@ -1,6 +1,6 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
2
  /**
3
- * Copyright IBM Corp. 2022, 2022
3
+ * Copyright IBM Corp. 2022, 2023
4
4
  *
5
5
  * This source code is licensed under the Apache-2.0 license found in the
6
6
  * LICENSE file in the root directory of this source tree.
@@ -83,7 +83,6 @@ export var StoryDocsPage = function StoryDocsPage(_ref2) {
83
83
  var isFullScreen = (csfFile === null || csfFile === void 0 || (_csfFile$meta = csfFile.meta) === null || _csfFile$meta === void 0 || (_csfFile$meta = _csfFile$meta.parameters) === null || _csfFile$meta === void 0 ? void 0 : _csfFile$meta.layout) === 'fullscreen' || false;
84
84
  var storyHelperClass = isFullScreen ? 'c4p--story-docs-page--fullscreen' : '';
85
85
  var processedBlocks = processBlocks(blocks, csfFile.stories, omitUnreferencedStories);
86
- console.log(processBlocks);
87
86
  var storyCount = (_processedBlocks$filt = processedBlocks === null || processedBlocks === void 0 ? void 0 : processedBlocks.filter(function (block) {
88
87
  return !!block.story;
89
88
  }).length) !== null && _processedBlocks$filt !== void 0 ? _processedBlocks$filt : 0;
@@ -89,26 +89,34 @@ var CreateTearsheet = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
89
89
  _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
90
90
  isDisabled = _useState10[0],
91
91
  setIsDisabled = _useState10[1];
92
- var _useState11 = (0, _react.useState)(),
92
+ var _useState11 = (0, _react.useState)(false),
93
93
  _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
94
- onNext = _useState12[0],
95
- _setOnNext = _useState12[1];
94
+ loadingPrevious = _useState12[0],
95
+ setLoadingPrevious = _useState12[1];
96
96
  var _useState13 = (0, _react.useState)(),
97
97
  _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
98
- onMount = _useState14[0],
99
- _setOnMount = _useState14[1];
100
- var _useState15 = (0, _react.useState)([]),
98
+ onPrevious = _useState14[0],
99
+ _setOnPrevious = _useState14[1];
100
+ var _useState15 = (0, _react.useState)(),
101
101
  _useState16 = (0, _slicedToArray2.default)(_useState15, 2),
102
- stepData = _useState16[0],
103
- setStepData = _useState16[1];
104
- var _useState17 = (0, _react.useState)(1),
102
+ onNext = _useState16[0],
103
+ _setOnNext = _useState16[1];
104
+ var _useState17 = (0, _react.useState)(),
105
105
  _useState18 = (0, _slicedToArray2.default)(_useState17, 2),
106
- firstIncludedStep = _useState18[0],
107
- setFirstIncludedStep = _useState18[1];
108
- var _useState19 = (0, _react.useState)(null),
106
+ onMount = _useState18[0],
107
+ _setOnMount = _useState18[1];
108
+ var _useState19 = (0, _react.useState)([]),
109
109
  _useState20 = (0, _slicedToArray2.default)(_useState19, 2),
110
- lastIncludedStep = _useState20[0],
111
- setLastIncludedStep = _useState20[1];
110
+ stepData = _useState20[0],
111
+ setStepData = _useState20[1];
112
+ var _useState21 = (0, _react.useState)(1),
113
+ _useState22 = (0, _slicedToArray2.default)(_useState21, 2),
114
+ firstIncludedStep = _useState22[0],
115
+ setFirstIncludedStep = _useState22[1];
116
+ var _useState23 = (0, _react.useState)(null),
117
+ _useState24 = (0, _slicedToArray2.default)(_useState23, 2),
118
+ lastIncludedStep = _useState24[0],
119
+ setLastIncludedStep = _useState24[1];
112
120
  var previousState = (0, _hooks.usePreviousValue)({
113
121
  currentStep: currentStep,
114
122
  open: open
@@ -152,11 +160,14 @@ var CreateTearsheet = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
152
160
  firstIncludedStep: firstIncludedStep,
153
161
  lastIncludedStep: lastIncludedStep,
154
162
  stepData: stepData,
163
+ onPrevious: onPrevious,
155
164
  onNext: onNext,
156
165
  isSubmitDisabled: isDisabled,
157
166
  setCurrentStep: setCurrentStep,
158
167
  setIsSubmitting: setIsSubmitting,
159
168
  setShouldViewAll: setShouldViewAll,
169
+ setLoadingPrevious: setLoadingPrevious,
170
+ loadingPrevious: loadingPrevious,
160
171
  onClose: onClose,
161
172
  onRequestSubmit: onRequestSubmit,
162
173
  componentName: componentName,
@@ -213,6 +224,11 @@ var CreateTearsheet = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
213
224
  value: {
214
225
  currentStep: currentStep,
215
226
  setIsDisabled: setIsDisabled,
227
+ setOnPrevious: function setOnPrevious(fn) {
228
+ return _setOnPrevious(function () {
229
+ return fn;
230
+ });
231
+ },
216
232
  setOnNext: function setOnNext(fn) {
217
233
  return _setOnNext(function () {
218
234
  return fn;
@@ -18,7 +18,7 @@ var _CreateTearsheet = require("./CreateTearsheet");
18
18
  var _settings = require("../../settings");
19
19
  var _pconsole = _interopRequireDefault(require("../../global/js/utils/pconsole"));
20
20
  var _hooks = require("../../global/js/hooks");
21
- var _excluded = ["children", "className", "description", "disableSubmit", "fieldsetLegendText", "hasFieldset", "includeStep", "introStep", "onNext", "onMount", "secondaryLabel", "subtitle", "title"];
21
+ var _excluded = ["children", "className", "description", "disableSubmit", "fieldsetLegendText", "hasFieldset", "includeStep", "introStep", "onMount", "onNext", "onPrevious", "secondaryLabel", "subtitle", "title"];
22
22
  /**
23
23
  * Copyright IBM Corp. 2021, 2023
24
24
  *
@@ -47,8 +47,9 @@ var CreateTearsheetStep = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
47
47
  _ref$includeStep = _ref.includeStep,
48
48
  includeStep = _ref$includeStep === void 0 ? defaults.includeStep : _ref$includeStep,
49
49
  introStep = _ref.introStep,
50
- onNext = _ref.onNext,
51
50
  onMount = _ref.onMount,
51
+ onNext = _ref.onNext,
52
+ onPrevious = _ref.onPrevious,
52
53
  secondaryLabel = _ref.secondaryLabel,
53
54
  subtitle = _ref.subtitle,
54
55
  title = _ref.title,
@@ -90,8 +91,9 @@ var CreateTearsheetStep = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
90
91
  if (stepNumber === (stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.currentStep)) {
91
92
  stepsContext.setIsDisabled(disableSubmit);
92
93
  stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.setOnNext(onNext); // needs to be updated here otherwise there could be stale state values from only initially setting onNext
94
+ stepsContext === null || stepsContext === void 0 ? void 0 : stepsContext.setOnPrevious(onPrevious);
93
95
  }
94
- }, [stepsContext, stepNumber, disableSubmit, onNext]);
96
+ }, [stepsContext, stepNumber, disableSubmit, onNext, onPrevious]);
95
97
  var renderDescription = function renderDescription() {
96
98
  if (description) {
97
99
  if (typeof description === 'string') {
@@ -177,11 +179,15 @@ CreateTearsheetStep.propTypes = {
177
179
  */
178
180
  onMount: _propTypes.default.func,
179
181
  /**
180
- * Optional function to be called on a step change.
182
+ * Optional function to be called when you move to the next step.
181
183
  * For example, this can be used to validate input fields before proceeding to the next step.
182
184
  * This function can _optionally_ return a promise that is either resolved or rejected and the CreateTearsheet will handle the submitting state of the next button.
183
185
  */
184
186
  onNext: _propTypes.default.func,
187
+ /**
188
+ * Optional function to be called when you move to the previous step.
189
+ */
190
+ onPrevious: _propTypes.default.func,
185
191
  /**
186
192
  * Sets the optional secondary label on the progress step component
187
193
  */
@@ -223,6 +223,9 @@ var MultiStepTearsheet = function MultiStepTearsheet(_ref2) {
223
223
  },
224
224
  checked: shouldIncludeAdditionalStep
225
225
  })))), /*#__PURE__*/_react.default.createElement(_CreateTearsheetStep.CreateTearsheetStep, {
226
+ onPrevious: function onPrevious() {
227
+ console.log('custom onPrevious handler');
228
+ },
226
229
  title: "Dynamic step",
227
230
  subtitle: "Dynamic step subtitle",
228
231
  description: "This is an example showing how to include a dynamic step into the CreateTearsheet",