@douyinfe/semi-ui
Version:
A modern, comprehensive, flexible design system and UI library. Connect DesignOps & DevOps. Quickly build beautiful React apps. Maintained by Douyin-fe team.
125 lines (124 loc) • 4.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.stepSizeMapIconSize = exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _constants = require("@douyinfe/semi-foundation/lib/cjs/steps/constants");
var _semiIcons = require("@douyinfe/semi-icons");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
var stepSizeMapIconSize;
(function (stepSizeMapIconSize) {
stepSizeMapIconSize["small"] = "large";
stepSizeMapIconSize["default"] = "extra-large";
})(stepSizeMapIconSize || (exports.stepSizeMapIconSize = stepSizeMapIconSize = {}));
const BasicStep = props => {
const {
prefixCls = _constants.stepsClasses.ITEM,
className = '',
size,
title,
description,
status = 'wait',
style,
active = false,
done = false,
icon,
stepNumber,
onClick,
onChange,
onKeyDown
} = props;
const renderIcon = () => {
let inner, progress;
if ('icon' in props) {
if (/*#__PURE__*/_react.default.isValidElement(icon)) {
inner = icon;
}
} else if ('status' in props) {
switch (status) {
case 'error':
inner = /*#__PURE__*/_react.default.createElement(_semiIcons.IconAlertCircle, {
size: stepSizeMapIconSize[size]
});
break;
case 'wait':
inner = /*#__PURE__*/_react.default.createElement("span", {
className: `${prefixCls}-number-icon`
}, stepNumber);
break;
case 'process':
inner = /*#__PURE__*/_react.default.createElement("span", {
className: `${prefixCls}-number-icon`
}, stepNumber);
progress = true;
break;
case 'finish':
inner = /*#__PURE__*/_react.default.createElement(_semiIcons.IconTickCircle, {
size: stepSizeMapIconSize[size]
});
break;
case 'warning':
inner = /*#__PURE__*/_react.default.createElement(_semiIcons.IconAlertTriangle, {
size: stepSizeMapIconSize[size]
});
break;
default:
inner = null;
break;
}
}
const cls = (0, _classnames.default)({
[`${prefixCls}-icon`]: true,
[`${prefixCls}-custom-icon`]: 'icon' in props,
[`${prefixCls}-icon-process`]: progress
});
return inner ? /*#__PURE__*/_react.default.createElement("span", {
className: cls
}, inner) : null;
};
const classString = (0, _classnames.default)(prefixCls, `${prefixCls}-${status}`, {
[`${prefixCls}-active`]: active,
[`${prefixCls}-done`]: done,
[`${prefixCls}-hover`]: onChange || props.onClick,
[`${prefixCls}-clickable`]: onChange || onClick,
[`${prefixCls}-${status}-hover`]: onChange || props.onClick
}, className);
const handleClick = e => {
onClick === null || onClick === void 0 ? void 0 : onClick(e);
onChange === null || onChange === void 0 ? void 0 : onChange();
};
const handleKeyDown = e => {
if (e.key === 'Enter') {
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
onChange === null || onChange === void 0 ? void 0 : onChange();
}
};
const titleTextClass = (0, _classnames.default)(`${prefixCls}-title-text`, {
[`${prefixCls}-title-text-empty`]: !title
});
return /*#__PURE__*/_react.default.createElement("div", {
role: props["role"],
"aria-label": props["aria-label"],
tabIndex: 0,
"aria-current": "step",
className: classString,
style: style,
onClick: e => handleClick(e),
onKeyDown: handleKeyDown
}, /*#__PURE__*/_react.default.createElement("div", {
className: `${prefixCls}-container`
}, /*#__PURE__*/_react.default.createElement("div", {
className: `${prefixCls}-left`
}, renderIcon()), /*#__PURE__*/_react.default.createElement("div", {
className: `${prefixCls}-content`
}, /*#__PURE__*/_react.default.createElement("div", {
className: `${prefixCls}-title`
}, /*#__PURE__*/_react.default.createElement("div", {
className: titleTextClass
}, title)), description && /*#__PURE__*/_react.default.createElement("div", {
className: `${prefixCls}-description`
}, description))));
};
var _default = exports.default = BasicStep;