UNPKG

qt-public-ui

Version:

新设计规范下业务组件库

99 lines 3.39 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; var _excluded = ["children", "className", "styleType", "max"]; import React, { useState, useEffect } from 'react'; import { Radio, Menu, Dropdown } from 'antd'; import { IconSlim as Icon } from '..'; import classnames from 'classnames'; import './style'; var MORE_BTN = { value: '$more', name: '更多' }; export default (function (props) { var children = props.children, className = props.className, styleType = props.styleType, _props$max = props.max, max = _props$max === void 0 ? Infinity : _props$max, antProps = _objectWithoutPropertiesLoose(props, _excluded); var isControlled = ('value' in antProps); var _useState = useState(MORE_BTN), moreBtn = _useState[0], setMoreBtn = _useState[1]; var _useState2 = useState(isControlled ? antProps.value : antProps.defaultValue), value = _useState2[0], setValue = _useState2[1]; var childrenArrary = React.Children.toArray(children); if (styleType === 'borderless') { delete antProps.buttonStyle; } var onChange = function onChange(e) { if (e.target.value !== '$more') { // 过滤更多按钮 !isControlled && setValue(e.target.value); antProps.onChange && antProps.onChange(e); setMoreBtn(MORE_BTN); } }; var getRadios = function getRadios() { var childrenRadios = childrenArrary; return childrenRadios.slice(0, max); }; var getMenu = function getMenu() { var childrenMenu = childrenArrary; return childrenMenu.slice(max); }; var handleMenuClick = function handleMenuClick(element) { setMoreBtn({ value: element.item.props.value, name: element.item.props.children }); !isControlled && setValue(element.item.props.value); if (antProps.onChange) { var event = new MouseEvent('radioSelect'); antProps.onChange({ nativeEvent: event, preventDefault: event.preventDefault, stopPropagation: event.stopPropagation, target: element.item.props }); } }; useEffect(function () { if (isControlled) { setValue(antProps.value); var idx = getMenu().findIndex(function (d) { return d.props.value === antProps.value; }); if (idx > -1) { setMoreBtn({ value: antProps.value, name: getMenu()[idx].props.children }); } } }, [antProps.value, isControlled]); var menus = /*#__PURE__*/React.createElement(Menu, { onClick: handleMenuClick, selectedKeys: ["" + value] }, getMenu().map(function (item) { var menuProps = item.props; return /*#__PURE__*/React.createElement(Menu.Item, _extends({ key: menuProps.value }, menuProps)); })); return /*#__PURE__*/React.createElement(Radio.Group, _extends({}, antProps, { value: value, onChange: onChange, className: classnames('umui-radio-group', className, { 'umui-radio-boardless': styleType === 'borderless' }) }), getRadios(), childrenArrary.length > max && /*#__PURE__*/React.createElement(Dropdown, { overlay: menus }, /*#__PURE__*/React.createElement(Radio.Button, { value: moreBtn.value }, moreBtn.name, " ", /*#__PURE__*/React.createElement(Icon, { type: "umicon-arrow-select" })))); });