zp-bee
Version:
zp-bee,是一款基于 Dumi,由 React + TypeScript 开发的组件库 🎉。
120 lines (96 loc) • 4.14 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireDefault(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _useMergedState3 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
var _radio = _interopRequireDefault(require("./radio"));
var _beeConfig = require("../bee-config");
var _context = require("./context");
var RadioGroup = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
var _React$useContext = _react.default.useContext(_beeConfig.ConfigContext),
getPrefixCls = _React$useContext.getPrefixCls,
direction = _React$useContext.direction;
var _useMergedState = (0, _useMergedState3.default)(props.defaultValue, {
value: props.value
}),
_useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
value = _useMergedState2[0],
setValue = _useMergedState2[1];
var onRadioChange = function onRadioChange(ev) {
var lastValue = value;
var val = ev.target.value;
if (!('value' in props)) {
setValue(val);
}
var onChange = props.onChange;
if (onChange && val !== lastValue) {
onChange(ev);
}
};
var renderGroup = function renderGroup() {
var customizePrefixCls = props.prefixCls,
_props$className = props.className,
className = _props$className === void 0 ? '' : _props$className,
options = props.options,
optionType = props.optionType,
_props$buttonStyle = props.buttonStyle,
buttonStyle = _props$buttonStyle === void 0 ? 'outline' : _props$buttonStyle,
disabled = props.disabled,
children = props.children,
style = props.style,
id = props.id,
onMouseEnter = props.onMouseEnter,
onMouseLeave = props.onMouseLeave;
var prefixCls = getPrefixCls('radio', customizePrefixCls);
var groupPrefixCls = "".concat(prefixCls, "-group");
var childrenToRender = children; // 如果存在 options, 优先使用
if (options && options.length > 0) {
var optionsPrefixCls = optionType === 'button' ? "".concat(prefixCls, "-button") : prefixCls;
childrenToRender = options.map(function (option) {
if (typeof option === 'string') {
// 此处类型自动推导为 string
return /*#__PURE__*/_react.default.createElement(_radio.default, {
key: option,
prefixCls: optionsPrefixCls,
disabled: disabled,
value: option,
checked: value === option
}, option);
} // 此处类型自动推导为 { label: string value: string }
return /*#__PURE__*/_react.default.createElement(_radio.default, {
key: "radio-group-value-options-".concat(option.value),
prefixCls: optionsPrefixCls,
disabled: option.disabled || disabled,
value: option.value,
checked: value === option.value,
style: option.style
}, option.label);
});
}
var classString = (0, _classnames.default)(groupPrefixCls, "".concat(groupPrefixCls, "-").concat(buttonStyle), (0, _defineProperty2.default)({}, "".concat(groupPrefixCls, "-rtl"), direction === 'rtl'), className);
return /*#__PURE__*/_react.default.createElement("div", {
className: classString,
style: style,
onMouseEnter: onMouseEnter,
onMouseLeave: onMouseLeave,
id: id,
ref: ref
}, childrenToRender);
};
return /*#__PURE__*/_react.default.createElement(_context.RadioGroupContextProvider, {
value: {
onChange: onRadioChange,
value: value,
disabled: props.disabled,
name: props.name
}
}, renderGroup());
});
var _default = /*#__PURE__*/_react.default.memo(RadioGroup);
exports.default = _default;