UNPKG

@6thquake/react-material

Version:

React components that implement Google's Material Design.

388 lines (316 loc) 11 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "SubMenuBar", { enumerable: true, get: function get() { return _SubMenuBar.default; } }); Object.defineProperty(exports, "MenuBarItem", { enumerable: true, get: function get() { return _MenuBarItem.default; } }); Object.defineProperty(exports, "MenuBarItemGroup", { enumerable: true, get: function get() { return _MenuBarItemGroup.default; } }); exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _withStyles = _interopRequireDefault(require("../styles/withStyles")); var _reactDom = require("react-dom"); var _rcMenu = _interopRequireWildcard(require("rc-menu")); var _classnames = _interopRequireDefault(require("classnames")); var _SubMenuBar = _interopRequireDefault(require("./SubMenuBar")); var _MenuBarItem = _interopRequireDefault(require("./MenuBarItem")); var _MenuBarItemGroup = _interopRequireDefault(require("./MenuBarItemGroup")); var _styles = _interopRequireDefault(require("./styles")); /** * @ignore - do not document. */ var menuPrefixCls = 'rm-menu'; var effect = { animationDuration: 0.3, animationFillMode: 'both', transformOrigin: '0 0' }; function leave(node, done) { done(); } var OriginNavBar = /*#__PURE__*/ function (_React$Component) { (0, _inherits2.default)(OriginNavBar, _React$Component); function OriginNavBar(props) { var _this; (0, _classCallCheck2.default)(this, OriginNavBar); _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(OriginNavBar).call(this, props)); _this.inlineOpenKeys = []; _this.handleClick = function (e) { _this.handleOpenChange([]); var onClick = _this.props.onClick; if (onClick) { onClick(e); } }; _this.handleOpenChange = function (openKeys) { _this.setOpenKeys(openKeys); var onOpenChange = _this.props.onOpenChange; if (onOpenChange) { onOpenChange(openKeys); } }; var openKeys; if ('defaultOpenKeys' in props) { openKeys = props.defaultOpenKeys; } else if ('openKeys' in props) { openKeys = props.openKeys; } _this.state = { openKeys: openKeys || [] }; return _this; } (0, _createClass2.default)(OriginNavBar, [{ key: "getChildContext", value: function getChildContext() { return { inlineCollapsed: this.getInlineCollapsed(), rMMenuTheme: this.props.theme }; } // todo remove unsafe life }, { key: "componentWillReceiveProps", value: function componentWillReceiveProps(nextProps, nextContext) { // componentWillReceiveProps(nextProps, nextContext) { var prefixCls = this.props.prefixCls; if (this.props.mode === 'inline' && nextProps.mode !== 'inline') { this.switchModeFromInline = true; } if ('openKeys' in nextProps) { this.setState({ openKeys: nextProps.openKeys }); return; } if (nextProps.inlineCollapsed && !this.props.inlineCollapsed || nextContext.siderCollapsed && !this.context.siderCollapsed) { var menuNode = (0, _reactDom.findDOMNode)(this); this.switchModeFromInline = !!this.state.openKeys.length && !!menuNode.querySelectorAll(".".concat(prefixCls, "-submenu-open")).length; this.inlineOpenKeys = this.state.openKeys; this.setState({ openKeys: [] }); } if (!nextProps.inlineCollapsed && this.props.inlineCollapsed || !nextContext.siderCollapsed && this.context.siderCollapsed) { this.setState({ openKeys: this.inlineOpenKeys }); this.inlineOpenKeys = []; } } }, { key: "setOpenKeys", value: function setOpenKeys(openKeys) { if (!('openKeys' in this.props)) { this.setState({ openKeys: openKeys }); } } }, { key: "getRealMenuMode", value: function getRealMenuMode() { var inlineCollapsed = this.getInlineCollapsed(); if (this.switchModeFromInline && inlineCollapsed) { return 'inline'; } var mode = this.props.mode; return inlineCollapsed ? 'vertical' : mode; } }, { key: "getInlineCollapsed", value: function getInlineCollapsed() { var inlineCollapsed = this.props.inlineCollapsed; if (this.context.siderCollapsed !== undefined) { return this.context.siderCollapsed; } return inlineCollapsed; } }, { key: "getMenuOpenAnimation", value: function getMenuOpenAnimation(menuMode) { var _this$props = this.props, openAnimation = _this$props.openAnimation, openTransitionName = _this$props.openTransitionName; var menuOpenAnimation = openAnimation || openTransitionName; if (openAnimation === undefined && openTransitionName === undefined) { switch (menuMode) { case 'horizontal': menuOpenAnimation = 'slide-up'; break; case 'vertical': case 'vertical-left': case 'vertical-right': // When mode switch from inline // submenu should hide without animation if (this.switchModeFromInline) { menuOpenAnimation = ''; this.switchModeFromInline = false; } else { menuOpenAnimation = 'zoom-big'; } break; case 'inline': menuOpenAnimation = {// leave: (node, done) => { // this.switchModeFromInline = false; // this.setState({}); // if (this.getRealMenuMode() === 'vertical') { // return; // } // done(); // } }; this.switchModeFromInline = false; break; default: } } return menuOpenAnimation; } }, { key: "render", value: function render() { var _this$props2 = this.props, prefixCls = _this$props2.prefixCls, className = _this$props2.className, theme = _this$props2.theme; var _this$props3 = this.props, classes = _this$props3.classes, props = (0, _objectWithoutProperties2.default)(_this$props3, ["classes"]); var menuMode = this.getRealMenuMode(); var menuOpenAnimation = this.getMenuOpenAnimation(menuMode); var menuClassName = (0, _classnames.default)(className, "".concat(prefixCls, "-").concat(theme), (0, _defineProperty2.default)({}, "".concat(prefixCls, "-inline-collapsed"), this.getInlineCollapsed())); var menuProps = { openKeys: this.state.openKeys, onOpenChange: this.handleOpenChange, className: menuClassName, mode: menuMode }; if (menuMode !== 'inline') { // closing vertical popup submenu after click it menuProps.onClick = this.handleClick; menuProps.openTransitionName = menuOpenAnimation; } else { menuProps.openAnimation = menuOpenAnimation; } var collapsedWidth = this.context.collapsedWidth; if (this.getInlineCollapsed() && (collapsedWidth === 0 || collapsedWidth === '0' || collapsedWidth === '0px')) { return null; } return _react.default.createElement(_rcMenu.default, (0, _extends2.default)({}, props, menuProps, { mode: "horizontal", selectable: false })); } }]); return OriginNavBar; }(_react.default.Component); OriginNavBar.Divider = _rcMenu.Divider; OriginNavBar.Item = _MenuBarItem.default; OriginNavBar.SubMenu = _SubMenuBar.default; OriginNavBar.ItemGroup = _MenuBarItemGroup.default; OriginNavBar.propTypes = { /** * @ignore */ className: _propTypes.default.string, /** * 初始选中的菜单项 key 数组 */ defaultOpenKeys: _propTypes.default.arrayOf(_propTypes.default.string), /** * 初始展开的 SubMenu 菜单项 key 数组 */ defaultSelectedKeys: _propTypes.default.arrayOf(_propTypes.default.string), /** * inline 时菜单是否收起状态 */ inlineCollapsed: _propTypes.default.bool, /** * 菜单类型,现在支持垂直、水平、和内嵌模式三种 */ mode: _propTypes.default.oneOf(['vertical', 'horizontal', 'inline']), /** * 是否允许多选 */ multiple: _propTypes.default.bool, /** * 点击 MenuItem 调用此函数 ,参数 ({item, key, keyPath}) */ onClick: _propTypes.default.func, /** * 取消选中时调用,仅在 multiple 生效,参数 ({item, key, selectedKeys}) */ onDeselect: _propTypes.default.func, /** * SubMenu 展开/关闭的回调,参数 (openKeys) */ onOpenChange: _propTypes.default.func, /** * 被选中时调用,参数 ({item, key, selectedKeys}) */ onSelect: _propTypes.default.func, /** * 当前展开的 SubMenu 菜单项 key 数组 */ openKeys: _propTypes.default.arrayOf(_propTypes.default.string), /** * @ignore */ prefixCls: _propTypes.default.string, /** * 是否允许选中 */ selectable: _propTypes.default.bool, /** * 当前选中的菜单项 key 数组 */ selectedKeys: _propTypes.default.arrayOf(_propTypes.default.string), /** * 主题颜色 */ theme: _propTypes.default.oneOf(['light', 'dark']) }; OriginNavBar.defaultProps = { prefixCls: menuPrefixCls, className: '', theme: 'light' }; OriginNavBar.childContextTypes = { inlineCollapsed: _propTypes.default.bool, rMMenuTheme: _propTypes.default.string }; OriginNavBar.contextTypes = { siderCollapsed: _propTypes.default.bool, collapsedWidth: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]) }; var _default = (0, _withStyles.default)(_styles.default, { name: 'RMOriginNavBar' })(OriginNavBar); exports.default = _default;