react-menu-aim
Version:
A React mixin version of Amazon's jQuery-menu-aim plugin
78 lines (66 loc) • 1.95 kB
JavaScript
;
var React = require('react');
var ReactMenuAim = require('../../index');
var createReactClass = require('create-react-class');
var Menu = createReactClass({
mixins: [ReactMenuAim],
getDefaultProps: function() {
return {
submenuDirection: 'right'
};
},
getInitialState: function() {
return {
activeMenuIndex: 0
};
},
componentWillMount: function() {
this.initMenuAim({
submenuDirection: this.props.submenuDirection,
menuSelector: '.menu',
delay: 300,
tolerance: 75
});
},
handleSwitchMenuIndex: function(index) {
this.setState({
activeMenuIndex: index
});
},
render: function() {
var self = this;
var containerClassName = 'menu-container ' + this.props.submenuDirection;
var subMenuStyle = {};
if (this.props.submenuDirection === 'below') {
subMenuStyle.left = this.state.activeMenuIndex * 140;
}
return (
<div className={containerClassName}>
<ul className="menu" onMouseLeave={this.handleMouseLeaveMenu}>
{this.props.menuData.map(function(menu, index) {
var className = 'menu-item';
if (index === self.state.activeMenuIndex) {
className += ' active';
}
return (
<li className={className} key={index}
onMouseEnter={function(){
self.handleMouseEnterRow.call(self, index, self.handleSwitchMenuIndex);
}}>
{menu.name}
</li>
);
})}
</ul>
<ul className="sub-menu" style={subMenuStyle}>
{this.props.menuData[this.state.activeMenuIndex].subMenu.map((function(subMenu, index){
return (
<li className="sub-menu-item" key={index}>{subMenu}</li>
);
}))}
</ul>
</div>
);
}
});
module.exports = exports = Menu;