UNPKG

generator-bingo-dig-h5

Version:

Bingo-dig-h5 generator by BINGO.DIG

113 lines (94 loc) 3.01 kB
var React = require('react'); var Classable = require('../mixins/classable'); var ClickAwayable = require('../mixins/click-awayable'); var DropDownArrow = require('./svg-icons/drop-down-arrow'); var KeyLine = require('../utils/key-line'); var Paper = require('./paper'); var Menu = require('./menu/menu'); var DropDownMenu = React.createClass({ mixins: [Classable, ClickAwayable], propTypes: { autoWidth: React.PropTypes.bool, onChange: React.PropTypes.func, menuItems: React.PropTypes.array.isRequired, selectedIndex: React.PropTypes.number, underLine: React.PropTypes.bool, zDepth: React.PropTypes.number, isTransparent: React.PropTypes.bool, mini: React.PropTypes.bool }, getDefaultProps: function() { return { autoWidth: true, underLine: false, zDepth: 1, isTransparent: false, mini: false }; }, getInitialState: function() { return { open: false, selectedIndex: this.props.selectedIndex || 0 }; }, componentClickAway: function() { this.setState({ open: false }); }, componentDidMount: function() { if (this.props.autoWidth) { this._setWidth(); }; }, componentWillReceiveProps: function(nextProps) { if (nextProps.hasOwnProperty('selectedIndex')) { this.setState({selectedIndex: nextProps.selectedIndex}); }; }, render: function() { var mianClass = this.props.mini ? 'dig-drop-down-menu-mini' : 'dig-drop-down-menu'; var classes = this.getClasses(mianClass, { 'dig-open': this.state.open }); var underLineElement = this.props.underLine ? ( <div className="dig-menu-control-underline" /> ) : null; var paperClassName = this.props.isTransparent ? "dig-menu-control-bg-tran" : "dig-menu-control-bg"; return ( <div className={classes}> <div className="dig-menu-control" onClick={this._onControlClick}> <Paper className={paperClassName} zDepth={this.props.zDepth} /> <div className="dig-menu-label"> {this.props.menuItems[this.state.selectedIndex].text} </div> <DropDownArrow className="dig-menu-drop-down-icon" /> {underLineElement} </div> <Menu ref="menuItems" autoWidth={this.props.autoWidth} selectedIndex={this.state.selectedIndex} menuItems={this.props.menuItems} hideable={true} visible={this.state.open} onItemClick={this._onMenuItemClick} /> </div> ); }, _setWidth: function() { var el = this.getDOMNode(); var menuItemsDom = this.refs.menuItems.getDOMNode(); el.style.width = menuItemsDom.offsetWidth + 'px'; }, _onControlClick: function(e) { this.setState({ open: !this.state.open }); }, _onMenuItemClick: function(e, key, payload) { if (this.props.onChange && this.state.selectedIndex !== key) this.props.onChange(e, key, payload); this.setState({ selectedIndex: key, open: false }); } }); module.exports = DropDownMenu;