UNPKG

react-menu-aim

Version:

A React mixin version of Amazon's jQuery-menu-aim plugin

78 lines (66 loc) 1.95 kB
'use strict'; 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;