UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

224 lines (183 loc) 7.16 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"]; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper")); var _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _shallowequal = _interopRequireDefault(require("shallowequal")); var _radio = _interopRequireDefault(require("./radio")); var _ConfigContext = _interopRequireDefault(require("../config-provider/ConfigContext")); var _RadioContext = require("./RadioContext"); function getCheckedValue(children) { var value = null; var matched = false; _react.Children.forEach(children, function (radio) { if (radio && radio.props && radio.props.checked) { value = radio.props.value; matched = true; } }); return matched ? { value: value } : undefined; } var RadioGroup = /*#__PURE__*/function (_Component) { (0, _inherits2["default"])(RadioGroup, _Component); var _super = (0, _createSuper2["default"])(RadioGroup); function RadioGroup(props, context) { var _this; (0, _classCallCheck2["default"])(this, RadioGroup); _this = _super.call(this, props, context); _this.onRadioChange = function (ev) { var lastValue = _this.state.value; var value = ev.target.value; if (!('value' in _this.props)) { _this.setState({ value: value }); } var onChange = _this.props.onChange; if (onChange && value !== lastValue) { onChange(ev); } }; var value; if ('value' in props) { value = props.value; } else if ('defaultValue' in props) { value = props.defaultValue; } else { var checkedValue = getCheckedValue(props.children); value = checkedValue && checkedValue.value; } _this.state = { value: value }; return _this; } (0, _createClass2["default"])(RadioGroup, [{ key: "getContextValue", value: function getContextValue() { var _this$props = this.props, disabled = _this$props.disabled, name = _this$props.name; var value = this.state.value; return { radioGroup: { onChange: this.onRadioChange, value: value, disabled: disabled, name: name } }; } }, { key: "componentWillReceiveProps", value: function componentWillReceiveProps(nextProps) { if ('value' in nextProps) { this.setState({ value: nextProps.value }); } else { var checkedValue = getCheckedValue(nextProps.children); if (checkedValue) { this.setState({ value: checkedValue.value }); } } } }, { key: "shouldComponentUpdate", value: function shouldComponentUpdate(nextProps, nextState) { return !(0, _shallowequal["default"])(this.props, nextProps) || !(0, _shallowequal["default"])(this.state, nextState); } }, { key: "render", value: function render() { var _this2 = this; var props = this.props; var customizePrefixCls = props.prefixCls, _props$className = props.className, className = _props$className === void 0 ? '' : _props$className, options = props.options, buttonStyle = props.buttonStyle, size = props.size, label = props.label, disabled = props.disabled; var value = this.state.value; var getPrefixCls = this.context.getPrefixCls; var prefixCls = getPrefixCls('radio', customizePrefixCls); var groupPrefixCls = "".concat(prefixCls, "-group"); var classString = (0, _classnames["default"])(groupPrefixCls, "".concat(groupPrefixCls, "-").concat(buttonStyle), (0, _defineProperty2["default"])({}, "".concat(groupPrefixCls, "-").concat(size), size), className); var children = props.children; // 如果存在 options, 优先使用 if (options && options.length > 0) { children = options.map(function (option, index) { if (typeof option === 'string') { // 此处类型自动推导为 string return /*#__PURE__*/_react["default"].createElement(_radio["default"], { key: String(index), prefixCls: prefixCls, disabled: disabled, value: option, onChange: _this2.onRadioChange, checked: value === option }, option); } // 此处类型自动推导为 { label: string value: string } return /*#__PURE__*/_react["default"].createElement(_radio["default"], { key: String(index), prefixCls: prefixCls, disabled: option.disabled || disabled, value: option.value, onChange: _this2.onRadioChange, checked: value === option.value }, option.label); }); } var group = /*#__PURE__*/_react["default"].createElement("div", { className: classString, style: props.style, onMouseEnter: props.onMouseEnter, onMouseLeave: props.onMouseLeave, id: props.id }, /*#__PURE__*/_react["default"].createElement(_RadioContext.RadioContextProvider, (0, _extends2["default"])({}, this.getContextValue(), { getPrefixCls: getPrefixCls }), children)); if (label) { var _classNames2; var wrapperClassString = (0, _classnames["default"])((_classNames2 = {}, (0, _defineProperty2["default"])(_classNames2, "".concat(groupPrefixCls, "-wrapper"), true), (0, _defineProperty2["default"])(_classNames2, "".concat(groupPrefixCls, "-has-label"), label), _classNames2)); var labelClassString = (0, _classnames["default"])("".concat(groupPrefixCls, "-label"), { 'label-disabled': disabled }); return /*#__PURE__*/_react["default"].createElement("div", { className: wrapperClassString }, /*#__PURE__*/_react["default"].createElement("span", { className: labelClassString }, label), group); } return group; } }], [{ key: "contextType", get: function get() { return _ConfigContext["default"]; } }]); return RadioGroup; }(_react.Component); exports["default"] = RadioGroup; RadioGroup.displayName = 'RadioGroup'; RadioGroup.defaultProps = { disabled: false, buttonStyle: 'outline' }; //# sourceMappingURL=group.js.map