@nutui/nutui-react
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
119 lines (118 loc) • 5.51 kB
JavaScript
import { _ as _define_property } from "@swc/helpers/_/_define_property";
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
import React, { useContext } from "react";
import { CheckChecked, CheckDisabled, CheckNormal } from "@nutui/icons-react";
import classNames from "classnames";
import RadioContext from "../radiogroup/context";
import { ComponentDefaults } from "../../utils/typings";
import { usePropsValue } from "../../hooks/use-props-value";
var defaultProps = _object_spread_props(_object_spread({}, ComponentDefaults), {
disabled: false,
shape: 'round',
value: '',
labelPosition: 'right',
icon: null,
activeIcon: null,
onChange: function(checked) {}
});
export var Radio = function(props) {
var classPrefix = 'nut-radio';
var _ref = _object_spread({}, defaultProps, props), children = _ref.children, className = _ref.className, style = _ref.style, checked = _ref.checked, defaultChecked = _ref.defaultChecked, shape = _ref.shape, value = _ref.value, icon = _ref.icon, activeIcon = _ref.activeIcon, onChange = _ref.onChange, others = _object_without_properties(_ref, [
"children",
"className",
"style",
"checked",
"defaultChecked",
"shape",
"value",
"icon",
"activeIcon",
"onChange"
]);
// eslint-disable-next-line prefer-const
var labelPosition = others.labelPosition, disabled = others.disabled, rest = _object_without_properties(others, [
"labelPosition",
"disabled"
]);
// eslint-disable-next-line prefer-const
var _usePropsValue = _sliced_to_array(usePropsValue({
value: checked,
defaultValue: defaultChecked,
finalValue: false,
onChange: onChange
}), 2), checkedStatement = _usePropsValue[0], setCheckedStatement = _usePropsValue[1];
var context = useContext(RadioContext);
if (context) {
checkedStatement = context.value === value;
if (context.labelPosition !== undefined) {
labelPosition = context.labelPosition;
}
if (context.disabled !== undefined) {
disabled = context.disabled;
}
setCheckedStatement = function(value) {
if (value) {
context.check(props.value === undefined ? '' : props.value);
} else {
context.uncheck();
}
};
}
var color = function() {
var _obj;
return _obj = {}, _define_property(_obj, "".concat(classPrefix, "-icon-disabled"), disabled), _define_property(_obj, "".concat(classPrefix, "-icon"), !checkedStatement), _define_property(_obj, "".concat(classPrefix, "-icon-checked"), checkedStatement), _obj;
};
var renderIcon = function() {
var icon = props.icon, activeIcon = props.activeIcon;
if (disabled && !checkedStatement) {
return /*#__PURE__*/ React.createElement(CheckDisabled, {
className: classNames(color())
});
}
if (checkedStatement) {
return /*#__PURE__*/ React.isValidElement(activeIcon) ? /*#__PURE__*/ React.cloneElement(activeIcon, _object_spread_props(_object_spread({}, activeIcon.props), {
className: classNames(color())
})) : /*#__PURE__*/ React.createElement(CheckChecked, {
className: classNames(color())
});
}
return /*#__PURE__*/ React.isValidElement(icon) ? /*#__PURE__*/ React.cloneElement(icon, _object_spread_props(_object_spread({}, icon.props), {
className: classNames(color())
})) : /*#__PURE__*/ React.createElement(CheckNormal, {
className: classNames(color())
});
};
var renderLabel = function() {
var labelcls = classNames("".concat(classPrefix, "-label"), _define_property({}, "".concat(classPrefix, "-label-disabled"), disabled));
return /*#__PURE__*/ React.createElement(React.Fragment, null, renderIcon(), /*#__PURE__*/ React.createElement("div", {
className: labelcls
}, children));
};
var renderButton = function() {
var _obj;
var buttoncls = classNames("".concat(classPrefix, "-button"), (_obj = {}, _define_property(_obj, "".concat(classPrefix, "-button-active"), checkedStatement), _define_property(_obj, "".concat(classPrefix, "-button-disabled"), disabled), _obj));
return /*#__PURE__*/ React.createElement("div", {
className: buttoncls
}, children);
};
var renderByShape = function(shape) {
return shape === 'button' ? renderButton() : renderLabel();
};
var renderRadioItem = function() {
return renderByShape(context && context.shape ? context.shape : shape);
};
var handleClick = function(e) {
if (disabled || checkedStatement) return;
setCheckedStatement(!checkedStatement);
};
var cls = classNames(classPrefix, _define_property({}, "".concat(classPrefix, "-reverse"), labelPosition === 'left'), className);
return /*#__PURE__*/ React.createElement("div", _object_spread({
className: cls,
style: style,
onClick: handleClick
}, rest), renderRadioItem());
};
Radio.displayName = 'NutRadio';