123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- "use strict";
- "use client";
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var React = _interopRequireWildcard(require("react"));
- var _classnames = _interopRequireDefault(require("classnames"));
- var _useId = _interopRequireDefault(require("rc-util/lib/hooks/useId"));
- var _useMergedState = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
- var _pickAttrs = _interopRequireDefault(require("rc-util/lib/pickAttrs"));
- var _configProvider = require("../config-provider");
- var _useCSSVarCls = _interopRequireDefault(require("../config-provider/hooks/useCSSVarCls"));
- var _useSize = _interopRequireDefault(require("../config-provider/hooks/useSize"));
- var _context = require("./context");
- var _radio = _interopRequireDefault(require("./radio"));
- var _style = _interopRequireDefault(require("./style"));
- var _context2 = require("../form/context");
- var _useForm = require("../form/hooks/useForm");
- const RadioGroup = /*#__PURE__*/React.forwardRef((props, ref) => {
- const {
- getPrefixCls,
- direction
- } = React.useContext(_configProvider.ConfigContext);
- const {
- name: formItemName
- } = React.useContext(_context2.FormItemInputContext);
- const defaultName = (0, _useId.default)((0, _useForm.toNamePathStr)(formItemName));
- const {
- prefixCls: customizePrefixCls,
- className,
- rootClassName,
- options,
- buttonStyle = 'outline',
- disabled,
- children,
- size: customizeSize,
- style,
- id,
- optionType,
- name = defaultName,
- defaultValue,
- value: customizedValue,
- block = false,
- onChange,
- onMouseEnter,
- onMouseLeave,
- onFocus,
- onBlur
- } = props;
- const [value, setValue] = (0, _useMergedState.default)(defaultValue, {
- value: customizedValue
- });
- const onRadioChange = React.useCallback(event => {
- const lastValue = value;
- const val = event.target.value;
- if (!('value' in props)) {
- setValue(val);
- }
- if (val !== lastValue) {
- onChange === null || onChange === void 0 ? void 0 : onChange(event);
- }
- }, [value, setValue, onChange]);
- const prefixCls = getPrefixCls('radio', customizePrefixCls);
- const groupPrefixCls = `${prefixCls}-group`;
- // Style
- const rootCls = (0, _useCSSVarCls.default)(prefixCls);
- const [wrapCSSVar, hashId, cssVarCls] = (0, _style.default)(prefixCls, rootCls);
- let childrenToRender = children;
- // 如果存在 options, 优先使用
- if (options && options.length > 0) {
- childrenToRender = options.map(option => {
- if (typeof option === 'string' || typeof option === 'number') {
- // 此处类型自动推导为 string
- return /*#__PURE__*/React.createElement(_radio.default, {
- key: option.toString(),
- prefixCls: prefixCls,
- disabled: disabled,
- value: option,
- checked: value === option
- }, option);
- }
- // 此处类型自动推导为 { label: string value: string }
- return /*#__PURE__*/React.createElement(_radio.default, {
- key: `radio-group-value-options-${option.value}`,
- prefixCls: prefixCls,
- disabled: option.disabled || disabled,
- value: option.value,
- checked: value === option.value,
- title: option.title,
- style: option.style,
- className: option.className,
- id: option.id,
- required: option.required
- }, option.label);
- });
- }
- const mergedSize = (0, _useSize.default)(customizeSize);
- const classString = (0, _classnames.default)(groupPrefixCls, `${groupPrefixCls}-${buttonStyle}`, {
- [`${groupPrefixCls}-${mergedSize}`]: mergedSize,
- [`${groupPrefixCls}-rtl`]: direction === 'rtl',
- [`${groupPrefixCls}-block`]: block
- }, className, rootClassName, hashId, cssVarCls, rootCls);
- const memoizedValue = React.useMemo(() => ({
- onChange: onRadioChange,
- value,
- disabled,
- name,
- optionType,
- block
- }), [onRadioChange, value, disabled, name, optionType, block]);
- return wrapCSSVar(/*#__PURE__*/React.createElement("div", Object.assign({}, (0, _pickAttrs.default)(props, {
- aria: true,
- data: true
- }), {
- className: classString,
- style: style,
- onMouseEnter: onMouseEnter,
- onMouseLeave: onMouseLeave,
- onFocus: onFocus,
- onBlur: onBlur,
- id: id,
- ref: ref
- }), /*#__PURE__*/React.createElement(_context.RadioGroupContextProvider, {
- value: memoizedValue
- }, childrenToRender)));
- });
- var _default = exports.default = /*#__PURE__*/React.memo(RadioGroup);
|