UNPKG

@douyinfe/semi-ui

Version:

A modern, comprehensive, flexible design system and UI library. Connect DesignOps & DevOps. Quickly build beautiful React apps. Maintained by Douyin-fe team.

154 lines (153 loc) 5.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _isEqual2 = _interopRequireDefault(require("lodash/isEqual")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _constants = require("@douyinfe/semi-foundation/lib/cjs/checkbox/constants"); var _checkboxGroupFoundation = _interopRequireDefault(require("@douyinfe/semi-foundation/lib/cjs/checkbox/checkboxGroupFoundation")); var _baseComponent = _interopRequireDefault(require("../_base/baseComponent")); var _context = require("./context"); var _checkbox = _interopRequireDefault(require("./checkbox")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } class CheckboxGroup extends _baseComponent.default { get adapter() { return Object.assign(Object.assign({}, super.adapter), { updateGroupValue: value => { this.setState({ value }); }, notifyChange: value => { this.props.onChange && this.props.onChange(value); } }); } constructor(props) { super(props); this.state = { value: props.value || props.defaultValue }; this.foundation = new _checkboxGroupFoundation.default(this.adapter); this.onChange = this.onChange.bind(this); } componentDidMount() { this.foundation.init(); } componentDidUpdate(prevProps) { if (!(0, _isEqual2.default)(prevProps.value, this.props.value)) { this.foundation.handlePropValueChange(this.props.value); } } componentWillUnmount() { this.foundation.destroy(); } onChange(evt) { this.foundation.handleChange(evt); } render() { const { children, options, prefixCls, direction, className, id, style, type, disabled } = this.props; const isPureCardType = type === _constants.strings.TYPE_PURECARD; const isCardType = type === _constants.strings.TYPE_CARD || isPureCardType; const prefix = prefixCls || _constants.checkboxGroupClasses.PREFIX; const prefixClsDisplay = (0, _classnames.default)({ [prefix]: true, [`${prefix}-wrapper`]: true, [`${prefix}-${direction}`]: direction, [`${prefix}-${direction}-cardType`]: direction && isCardType, [`${prefix}-${direction}-pureCardType`]: direction && isPureCardType }, className); const realValue = this.state.value.slice(); let inner; if (options) { inner = (options || []).map((option, index) => { if (typeof option === 'string') { return /*#__PURE__*/_react.default.createElement(_checkbox.default, { role: "listitem", key: index, disabled: this.props.disabled, value: option, prefixCls: prefixCls }, option); } else { return /*#__PURE__*/_react.default.createElement(_checkbox.default, { role: "listitem", key: index, disabled: option.disabled || this.props.disabled, value: option.value, prefixCls: prefixCls, extra: option.extra, className: option.className, style: option.style, onChange: option.onChange }, option.label); } }); } else if (children) { inner = _react.default.Children.toArray(children).map((itm, index) => /*#__PURE__*/_react.default.cloneElement(itm, { key: index, role: 'listitem' })); } return /*#__PURE__*/_react.default.createElement("div", Object.assign({ id: id, role: "list", "aria-label": this.props['aria-label'], className: prefixClsDisplay, style: style, "aria-labelledby": this.props['aria-labelledby'], "aria-describedby": this.props['aria-describedby'] }, this.getDataAttr(this.props)), /*#__PURE__*/_react.default.createElement(_context.Context.Provider, { value: { checkboxGroup: { onChange: this.onChange, value: realValue, disabled: this.props.disabled, name: this.foundation.getFormatName(), isCardType, isPureCardType } } }, inner)); } } CheckboxGroup.propTypes = { 'aria-describedby': _propTypes.default.string, 'aria-errormessage': _propTypes.default.string, 'aria-invalid': _propTypes.default.bool, 'aria-labelledby': _propTypes.default.string, 'aria-required': _propTypes.default.bool, defaultValue: _propTypes.default.array, disabled: _propTypes.default.bool, name: _propTypes.default.string, options: _propTypes.default.array, value: _propTypes.default.array, onChange: _propTypes.default.func, children: _propTypes.default.node, prefixCls: _propTypes.default.string, direction: _propTypes.default.oneOf(_constants.strings.DIRECTION_SET), className: _propTypes.default.string, type: _propTypes.default.oneOf([_constants.strings.TYPE_DEFAULT, _constants.strings.TYPE_CARD, _constants.strings.TYPE_PURECARD]), style: _propTypes.default.object }; CheckboxGroup.defaultProps = { disabled: false, onChange: () => {}, type: _constants.strings.TYPE_DEFAULT, defaultValue: [], direction: _constants.strings.DEFAULT_DIRECTION }; var _default = exports.default = CheckboxGroup;