213 lines
5.8 KiB
JavaScript
Raw Normal View History

2020-05-19 11:43:42 +03:00
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _createReactClass = require('create-react-class');
var _createReactClass2 = _interopRequireDefault(_createReactClass);
var _KeyCode = require('rc-util/lib/KeyCode');
var _KeyCode2 = _interopRequireDefault(_KeyCode);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _util = require('./util');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
/* eslint react/no-is-mounted:0 */
var MenuItem = (0, _createReactClass2['default'])({
displayName: 'MenuItem',
propTypes: {
rootPrefixCls: _propTypes2['default'].string,
eventKey: _propTypes2['default'].string,
active: _propTypes2['default'].bool,
children: _propTypes2['default'].any,
selectedKeys: _propTypes2['default'].array,
disabled: _propTypes2['default'].bool,
title: _propTypes2['default'].string,
onSelect: _propTypes2['default'].func,
onClick: _propTypes2['default'].func,
onDeselect: _propTypes2['default'].func,
parentMenu: _propTypes2['default'].object,
onItemHover: _propTypes2['default'].func,
onDestroy: _propTypes2['default'].func,
onMouseEnter: _propTypes2['default'].func,
onMouseLeave: _propTypes2['default'].func
},
getDefaultProps: function getDefaultProps() {
return {
onSelect: _util.noop,
onMouseEnter: _util.noop,
onMouseLeave: _util.noop
};
},
componentWillUnmount: function componentWillUnmount() {
var props = this.props;
if (props.onDestroy) {
props.onDestroy(props.eventKey);
}
if (props.parentMenu.menuItemInstance === this) {
this.clearMenuItemMouseLeaveTimer();
}
},
onKeyDown: function onKeyDown(e) {
var keyCode = e.keyCode;
if (keyCode === _KeyCode2['default'].ENTER) {
this.onClick(e);
return true;
}
},
onMouseLeave: function onMouseLeave(e) {
var _this = this;
var props = this.props;
var eventKey = props.eventKey,
parentMenu = props.parentMenu;
parentMenu.menuItemInstance = this;
parentMenu.menuItemMouseLeaveFn = function () {
if (props.active) {
props.onItemHover({
key: eventKey,
item: _this,
hover: false,
domEvent: e,
trigger: 'mouseleave'
});
}
};
parentMenu.menuItemMouseLeaveTimer = setTimeout(parentMenu.menuItemMouseLeaveFn, 30);
props.onMouseLeave({
key: eventKey,
domEvent: e
});
},
onMouseEnter: function onMouseEnter(e) {
var props = this.props;
var eventKey = props.eventKey,
parentMenu = props.parentMenu;
this.clearMenuItemMouseLeaveTimer();
if (parentMenu.subMenuInstance) {
parentMenu.subMenuInstance.clearSubMenuTimers();
}
props.onItemHover({
key: eventKey,
item: this,
hover: true,
domEvent: e,
trigger: 'mouseenter'
});
props.onMouseEnter({
key: eventKey,
domEvent: e
});
},
onClick: function onClick(e) {
var props = this.props;
var selected = this.isSelected();
var eventKey = props.eventKey;
var info = {
key: eventKey,
keyPath: [eventKey],
item: this,
domEvent: e
};
props.onClick(info);
if (props.multiple) {
if (selected) {
props.onDeselect(info);
} else {
props.onSelect(info);
}
} else if (!selected) {
props.onSelect(info);
}
},
getPrefixCls: function getPrefixCls() {
return this.props.rootPrefixCls + '-item';
},
getActiveClassName: function getActiveClassName() {
return this.getPrefixCls() + '-active';
},
getSelectedClassName: function getSelectedClassName() {
return this.getPrefixCls() + '-selected';
},
getDisabledClassName: function getDisabledClassName() {
return this.getPrefixCls() + '-disabled';
},
clearMenuItemMouseLeaveTimer: function clearMenuItemMouseLeaveTimer() {
var props = this.props;
var parentMenu = props.parentMenu;
if (parentMenu.menuItemMouseLeaveTimer) {
clearTimeout(parentMenu.menuItemMouseLeaveTimer);
parentMenu.menuItemMouseLeaveTimer = null;
parentMenu.menuItemMouseLeaveFn = null;
}
},
isSelected: function isSelected() {
return this.props.selectedKeys.indexOf(this.props.eventKey) !== -1;
},
render: function render() {
var props = this.props;
var selected = this.isSelected();
var classes = {};
classes[this.getActiveClassName()] = !props.disabled && props.active;
classes[this.getSelectedClassName()] = selected;
classes[this.getDisabledClassName()] = props.disabled;
classes[this.getPrefixCls()] = true;
classes[props.className] = !!props.className;
var attrs = (0, _extends3['default'])({}, props.attribute, {
title: props.title,
className: (0, _classnames2['default'])(classes),
role: 'menuitem',
'aria-selected': selected,
'aria-disabled': props.disabled
});
var mouseEvent = {};
if (!props.disabled) {
mouseEvent = {
onClick: this.onClick,
onMouseLeave: this.onMouseLeave,
onMouseEnter: this.onMouseEnter
};
}
var style = (0, _extends3['default'])({}, props.style);
if (props.mode === 'inline') {
style.paddingLeft = props.inlineIndent * props.level;
}
return _react2['default'].createElement(
'li',
(0, _extends3['default'])({
style: style
}, attrs, mouseEvent),
props.children
);
}
});
MenuItem.isMenuItem = 1;
exports['default'] = MenuItem;
module.exports = exports['default'];