require('./nav.less'); const React = require('react'); const createClass = require('create-react-class'); const _ = require('lodash'); const cx = require('classnames'); const NaturalCritIcon = require('naturalcrit/svg/naturalcrit.svg.jsx'); const Nav = { base : createClass({ displayName : 'Nav.base', render : function(){ return ; } }), logo : function(){ return NaturalCrit ; }, section : createClass({ displayName : 'Nav.section', render : function(){ return
{this.props.children}
; } }), item : createClass({ displayName : 'Nav.item', getDefaultProps : function() { return { icon : null, href : null, newTab : false, onClick : function(){}, color : null }; }, handleClick : function(){ this.props.onClick(); }, render : function(){ const classes = cx('navItem', this.props.color, this.props.className); let icon; if(this.props.icon) icon = ; const props = _.omit(this.props, ['newTab']); if(this.props.href){ return {this.props.children} {icon} ; } else { return
{this.props.children} {icon}
; } } }), dropdown : createClass({ displayName : 'Nav.dropdown', getDefaultProps : function() { return { trigger : 'hover' }; }, getInitialState : function() { return { showDropdown : false }; }, componentDidMount : function() { if(this.props.trigger == 'click') document.addEventListener('click', this.handleClickOutside); }, componentWillUnmount : function() { if(this.props.trigger == 'click') document.removeEventListener('click', this.handleClickOutside); }, handleClickOutside : function(e){ // Close dropdown when clicked outside if(this.refs.dropdown && !this.refs.dropdown.contains(e.target)) { this.handleDropdown(false); } }, handleDropdown : function(show){ this.setState({ showDropdown : show }); }, renderDropdown : function(dropdownChildren){ if(!this.state.showDropdown) return null; return (
{dropdownChildren}
); }, render : function () { const dropdownChildren = React.Children.map(this.props.children, (child, i)=>{ // Ignore the first child if(i < 1) return; return child; }); return (
{this.handleDropdown(true);} : undefined} onClick= {this.props.trigger == 'click' ? ()=>{this.handleDropdown(true);} : undefined} onMouseLeave={this.props.trigger == 'hover' ? ()=>{this.handleDropdown(false);} : undefined}> {this.props.children[0] || this.props.children /*children is not an array when only one child*/} {this.renderDropdown(dropdownChildren)}
); } }) }; module.exports = Nav;