preact-arco-design
Version:
Arco Design React UI Library.
89 lines (79 loc) • 2.91 kB
JavaScript
var __assign = this && this.__assign || function () {
__assign = Object.assign || function (t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) {
if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
}
}
return t;
};
return __assign.apply(this, arguments);
};
import React, { forwardRef, useContext } from "preact/compat";
import cs from "../_util/classNames";
import { ConfigContext } from "../ConfigProvider";
import LineProgress from "./line-progess";
import CircleProgress from "./circle-progress";
import StepsProgress from "./steps-progress";
import useMergeProps from "../_util/hooks/useMergeProps";
var defaultProps = {
type: 'line',
showText: true,
percent: 0,
size: 'default'
};
function Progress(baseProps, ref) {
var _a;
var _b = useContext(ConfigContext),
getPrefixCls = _b.getPrefixCls,
componentConfig = _b.componentConfig,
rtl = _b.rtl;
var props = useMergeProps(baseProps, defaultProps, componentConfig === null || componentConfig === void 0 ? void 0 : componentConfig.Progress);
var className = props.className,
style = props.style,
size = props.size,
width = props.width,
strokeWidth = props.strokeWidth,
steps = props.steps,
percent = props.percent;
var type = steps && props.type !== 'circle' ? 'steps' : props.type;
var prefixCls = getPrefixCls('progress');
var status = 'status' in props ? props.status : percent >= 100 ? 'success' : 'normal';
var widthStyle = {
width: width
};
if (size === 'mini' && type === 'line') {
widthStyle.width = width || 16;
widthStyle.height = width || 16;
}
return React.createElement("div", {
ref: ref,
className: cs(prefixCls, "".concat(prefixCls, "-").concat(type), "".concat(prefixCls, "-").concat(size), (_a = {}, _a["".concat(prefixCls, "-is-").concat(status)] = status !== 'normal', _a["".concat(prefixCls, "-rtl")] = rtl, _a), className),
style: __assign(__assign({}, widthStyle), style)
}, type === 'steps' && React.createElement(StepsProgress, __assign({}, props, {
type: type,
status: status,
prefixCls: prefixCls
})), type === 'circle' && React.createElement(CircleProgress, __assign({
width: props.width
}, props, {
pathStrokeColor: props.trailColor,
status: status,
prefixCls: prefixCls
})), type === 'line' && (size === 'mini' ? React.createElement(CircleProgress, __assign({
pathStrokeColor: props.trailColor
}, props, {
pathStrokeWidth: strokeWidth || 4,
width: width || 16,
strokeWidth: strokeWidth || 4,
prefixCls: prefixCls,
status: status
})) : React.createElement(LineProgress, __assign({}, props, {
status: status,
prefixCls: prefixCls
}))));
}
var ProgressRef = forwardRef(Progress);
ProgressRef.displayName = 'Progress';
export default ProgressRef;