zarm-web
Version:
基于 React 的桌面端UI库
98 lines (85 loc) • 3.62 kB
JavaScript
function _extends() { _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; }; return _extends.apply(this, arguments); }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
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; }
import React, { Component } from 'react';
import classnames from 'classnames';
import Tooltip from '../tooltip';
import MenuContext from './menu-context';
import { noop } from '../utils';
class MenuItem extends Component {
constructor(...args) {
super(...args);
this.handleClick = e => {
const {
itemKey,
inlineCollapsed
} = this.props;
this.props.onClick(e, itemKey);
this.props.toggleSelectedKeys(itemKey);
if (inlineCollapsed) {
this.props.toggleSubMenuOpen('');
}
};
}
render() {
const {
checked,
isDisabled,
children,
prefixCls,
level,
inlineIndent,
className,
style,
onDoubleClick,
selectedKeys,
itemKey,
mode,
inlineCollapsed
} = this.props;
const cls = classnames({
[`${prefixCls}-level-${level}`]: level,
[`${prefixCls}-item`]: true,
active: !!itemKey && selectedKeys.indexOf(itemKey) > -1,
[className]: !!className,
selected: !!checked,
disabled: 'disabled' in this.props || isDisabled
});
const itemStyle = _objectSpread({}, style);
if (mode === 'inline' && !inlineCollapsed) {
itemStyle.paddingLeft = level * inlineIndent;
}
return React.createElement(Tooltip, {
hasArrow: true,
content: level === 1 && inlineCollapsed ? children : '',
direction: "right",
className: "za-menu-item__tooltip"
}, React.createElement("li", {
className: cls,
role: "menuitem",
style: itemStyle,
onClick: this.handleClick,
onDoubleClick: onDoubleClick
}, children));
}
}
MenuItem.defaultProps = {
prefixCls: 'za-menu',
checked: false,
isDisabled: false,
level: 1,
style: {},
mode: 'inline',
inlineIndent: 10,
onClick: noop,
onDoubleClick: noop
};
export default function MenuItemConsumer(props) {
return React.createElement(MenuContext.Consumer, null, menuKeys => React.createElement(MenuItem, _extends({}, props, {
inlineCollapsed: menuKeys.inlineCollapsed,
selectedKeys: menuKeys.selectedKeys,
toggleSubMenuOpen: menuKeys.toggleOpenKeys,
toggleSelectedKeys: menuKeys.toggleSelectedKeys
})));
}