@mskcc/carbon-react
Version:
Carbon react components for the MSKCC DSM
147 lines (136 loc) • 5.25 kB
JavaScript
/**
* MSKCC 2021, 2024
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
var cx = require('classnames');
var React = require('react');
var StepperStep = require('./Step/StepperStep.js');
var StepperContext = require('./StepperContext.js');
var PropTypes = require('prop-types');
var useIsomorphicEffect = require('../../internal/useIsomorphicEffect.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
const Stepper = _ref => {
let {
title,
steps,
children,
className,
stepClassName = '',
activeStep = 0,
size = 'default',
vertical = false,
...rest
} = _ref;
const contextValue = React.useMemo(() => ({
activeStep,
vertical
}), [activeStep, vertical]);
const useStepsProp = steps instanceof Array && steps.length > 0;
const stepsArray = useStepsProp ? steps : React.Children.toArray(children);
const stepsToRender = stepsArray.map((step, index) => {
if (!useStepsProp && ! /*#__PURE__*/React.isValidElement(step)) {
return null;
}
const stepProps = {
className: stepClassName,
index
};
return /*#__PURE__*/React__default["default"].createElement("div", {
key: index,
className: "stepper-step-container"
}, /*#__PURE__*/React.isValidElement(step) ? /*#__PURE__*/React.cloneElement(step, {
...stepProps,
...step.props
}) : /*#__PURE__*/React__default["default"].createElement(StepperStep.StepperStep, _rollupPluginBabelHelpers["extends"]({}, stepProps, typeof step === 'object' ? step : {})));
});
const ref = /*#__PURE__*/React__default["default"].createRef();
const stepperRef = /*#__PURE__*/React__default["default"].createRef();
// for horizontal stepper
useIsomorphicEffect["default"](() => {
const progressBar = ref.current;
if (!progressBar) {
return;
}
if (activeStep === -1) {
if (vertical) {
progressBar.style.height = '0%';
} else {
progressBar.style.width = '0%';
}
} else {
const percentage = activeStep / (stepsArray.length - 1) * 100;
if (vertical) {
if (activeStep > stepsArray.length - 1) {
progressBar.style.height = '100%';
} else {
progressBar.style.height = `${percentage}%`;
}
} else {
if (activeStep > stepsArray.length - 1) {
progressBar.style.width = '100%';
} else {
progressBar.style.width = `${percentage}%`;
}
}
}
}, [activeStep, stepsArray.length, vertical, ref]);
// for vertical stepper
useIsomorphicEffect["default"](() => {
const stepper = stepperRef.current;
if (!stepper) {
return;
}
}, [stepperRef]);
return /*#__PURE__*/React__default["default"].createElement(StepperContext["default"].Provider, {
value: contextValue
}, /*#__PURE__*/React__default["default"].createElement("div", {
className: cx__default["default"]('msk-stepper-container', className)
}, /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
ref: stepperRef,
role: "progressbar",
"aria-valuemin": 1,
"aria-valuemax": stepsArray.length,
"aria-valuenow": activeStep + 1
// eslint-disable-next-line react/no-unknown-property, jsx-a11y/aria-props
,
"aria-defaultValue": activeStep + 1,
"aria-label": title || `Stepper ${activeStep + 1} of ${stepsArray.length}`,
className: cx__default["default"]('msk-stepper', `msk-stepper-${size}`, {
'msk-stepper-vertical': vertical,
'msk-stepper-horizontal': !vertical
}),
style: {
height: `${vertical ? `${stepsArray.length * 4}rem` : 'auto'}`
}
}, rest), stepsToRender, /*#__PURE__*/React__default["default"].createElement("div", {
className: `msk-stepper--progress-bar`,
ref: ref
}))));
};
Stepper.displayName = 'Stepper';
Stepper.propTypes = {
activeStep: PropTypes__default["default"].number,
children: PropTypes__default["default"].node,
className: PropTypes__default["default"].string,
size: PropTypes__default["default"].oneOf(['small', 'default']),
stepClassName: PropTypes__default["default"].string,
steps: PropTypes__default["default"].arrayOf(PropTypes__default["default"].oneOfType([PropTypes__default["default"].shape({
label: PropTypes__default["default"].string,
active: PropTypes__default["default"].bool,
completed: PropTypes__default["default"].bool,
disabled: PropTypes__default["default"].bool,
icon: PropTypes__default["default"].node,
index: PropTypes__default["default"].number,
className: PropTypes__default["default"].string,
children: PropTypes__default["default"].node
}), PropTypes__default["default"].element // Allow for JSX elements
])),
title: PropTypes__default["default"].string,
vertical: PropTypes__default["default"].bool
};
exports.Stepper = Stepper;