UNPKG

hy-checkbox

Version:

checkbox & radio ui components for react

330 lines (295 loc) 13.1 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames2 = require('classnames'); var _classnames3 = _interopRequireDefault(_classnames2); var _menuList = require('./menuList'); var _menuList2 = _interopRequireDefault(_menuList); var _menuItem = require('./menuItem'); var _menuItem2 = _interopRequireDefault(_menuItem); require('./menu.less'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* * @Author: SiMeiyu * @Date: 2017-07-06 11:10:43 */ var Menu = function (_React$Component) { _inherits(Menu, _React$Component); function Menu(props) { _classCallCheck(this, Menu); var _this = _possibleConstructorReturn(this, (Menu.__proto__ || Object.getPrototypeOf(Menu)).call(this, props)); _this.state = { items: _this.getItems(), activeKey: [], openKey: [] }; _this.handleToggle = _this.handleToggle.bind(_this); _this.handleSelect = _this.handleSelect.bind(_this); return _this; } _createClass(Menu, [{ key: 'componentWillMount', value: function componentWillMount() { var items = this.state.items; var defaultActiveKey = this.props.defaultActiveKey; var activeKey = void 0; var loop = function loop(data) { data.forEach(function (d) { if (d.id === defaultActiveKey) { activeKey = d.enkey; } else if (d.subMenu) { loop(d.subMenu); } }); }; loop(items); this.getOpenActiveKeys(activeKey); } }, { key: 'getItems', value: function getItems() { var _props = this.props, items = _props.items, tips = _props.tips; var loop = function loop(data, parentKey) { var newData = data.map(function (item, index) { var enkey = parentKey + '-' + index; if (!item.subMenu) { return _extends({}, item, { enkey: enkey }); } return _extends({}, item, { enkey: enkey, subMenu: loop(item.subMenu, enkey) }); }); return newData; }; var newItems = loop(items, "0"); if (!!tips) { newItems = this.addTips(newItems); } return newItems; } }, { key: 'addTips', value: function addTips(items) { var tips = this.props.tips; var loop = function loop(data) { var newData = data.map(function (d) { var dis = tips.find(function (t) { return t.id === d.id; }); if (dis) { if (!d.subMenu) { return _extends({}, d, { tip: dis }); } return _extends({}, d, { tip: dis, subMenu: loop(d.subMenu) }); } else { if (!d.subMenu) { return d; } else { return _extends({}, d, { subMenu: loop(d.subMenu) }); } } }); return newData; }; return loop(items); } }, { key: 'getOpenActiveKeys', value: function getOpenActiveKeys(ak) { var _state = this.state, items = _state.items, openKey = _state.openKey, activeKey = _state.activeKey; var newOpenKey = []; if (openKey.length > 1) { openKey.forEach(function (k, i) { if (ak.slice(0, ak.length - 1) === k.slice(0, k.length - 1)) { newOpenKey.push(k); } }); } var newActiveKey = [].concat(ak); items.forEach(function (item) { if (item.subMenu) { item.subMenu.forEach(function (sm) { if (sm.enkey === ak) { newOpenKey = newOpenKey.concat(item.enkey); newActiveKey = newActiveKey.concat(item.enkey); } else if (sm.subMenu) { sm.subMenu.forEach(function (ssm) { if (ssm.enkey === ak) { newOpenKey = newOpenKey.concat(item.enkey, sm.enkey); newActiveKey = newActiveKey.concat(item.enkey, sm.enkey); } }); } }); } }); this.setState({ openKey: newOpenKey, activeKey: newActiveKey }); } }, { key: 'handleToggle', value: function handleToggle(eKey) { var openKey = this.state.openKey; var dicide = openKey.find(function (k) { return k === eKey; }); var newOpenKey = void 0; if (dicide) { newOpenKey = openKey.filter(function (k) { return k !== eKey; }); } else { var is_child = eKey.indexOf(openKey[openKey.length - 1]) > -1; var is_parent = void 0; if (openKey.length > 0) { is_parent = openKey[openKey.length - 1].indexOf(eKey) > -1; } if (is_child || is_parent) { newOpenKey = openKey.concat(eKey); } else { newOpenKey = openKey.filter(function (k) { return k.length !== 3; }); newOpenKey = newOpenKey.concat(eKey);; } } this.setState({ openKey: newOpenKey }); } }, { key: 'handleSelect', value: function handleSelect(key) { this.getOpenActiveKeys(key); } }, { key: 'getItemOpen', value: function getItemOpen(key) { var openKey = this.state.openKey; if (openKey) { return !!openKey.find(function (k) { return k === key; }); } return false; } }, { key: 'renderItems', value: function renderItems() { var _this2 = this; var prefixCls = this.props.prefixCls; var _state2 = this.state, items = _state2.items, activeKey = _state2.activeKey, openKey = _state2.openKey; if (items) { return items.map(function (item) { if (item.subMenu) { return _react2.default.createElement( _menuItem2.default, _extends({ key: item.id }, item, { prefixCls: prefixCls, onToggle: _this2.handleToggle, open: _this2.getItemOpen(item.enkey), active: !!activeKey.find(function (k) { return k === item.enkey; }) }), _react2.default.createElement( _menuList2.default, { prefixCls: prefixCls }, item.subMenu.map(function (sm) { if (sm.subMenu) { return _react2.default.createElement( _menuItem2.default, _extends({ key: sm.id }, sm, { prefixCls: prefixCls, onToggle: _this2.handleToggle, open: _this2.getItemOpen(sm.enkey), active: !!activeKey.find(function (k) { return k === sm.enkey; }) }), _react2.default.createElement( _menuList2.default, { prefixCls: prefixCls }, sm.subMenu.map(function (ssm) { return _react2.default.createElement(_menuItem2.default, _extends({ key: ssm.id }, ssm, { prefixCls: prefixCls, onSelect: _this2.handleSelect, active: !!activeKey.find(function (k) { return k === ssm.enkey; }) })); }) ) ); } return _react2.default.createElement(_menuItem2.default, _extends({ key: sm.id }, sm, { prefixCls: prefixCls, onSelect: _this2.handleSelect, active: !!activeKey.find(function (k) { return k === sm.enkey; }) })); }) ) ); } return _react2.default.createElement(_menuItem2.default, _extends({ key: item.id }, item, { prefixCls: prefixCls, onSelect: _this2.handleSelect, active: !!activeKey.find(function (k) { return k === item.enkey; }) })); }); } } }, { key: 'render', value: function render() { var _classnames; var _props2 = this.props, prefixCls = _props2.prefixCls, className = _props2.className, style = _props2.style, mode = _props2.mode, theme = _props2.theme; var classes = (0, _classnames3.default)((_classnames = {}, _defineProperty(_classnames, prefixCls + '-menu-' + mode, !!mode), _defineProperty(_classnames, prefixCls + '-menu-' + theme, !!theme), _classnames), className); return _react2.default.createElement( _menuList2.default, { className: classes, style: style, prefixCls: prefixCls }, this.renderItems() ); } }]); return Menu; }(_react2.default.Component); Menu.propTypes = { prefixCls: _react2.default.PropTypes.string, className: _react2.default.PropTypes.string, style: _react2.default.PropTypes.object, mode: _react2.default.PropTypes.oneOf(["horizontal", "vertical"]), theme: _react2.default.PropTypes.oneOf(["light", "dark"]), items: _react2.default.PropTypes.array.isRequired, tips: _react2.default.PropTypes.array, defaultActiveKey: _react2.default.PropTypes.string.isRequired }; Menu.defaultProps = { prefixCls: 'ult', mode: "horizontal", theme: "light" }; exports.default = Menu;