UNPKG

material-ui

Version:

Material Design UI components built with React

94 lines (78 loc) 2.57 kB
var React = require('react'), Classable = require('./mixins/classable.js'), ClickAwayable = require('./mixins/click-awayable'), KeyLine = require('./utils/key-line.js'), Paper = require('./paper.jsx'), Icon = require('./icon.jsx'), Menu = require('./menu.jsx'); var DropDownMenu = React.createClass({ mixins: [Classable, ClickAwayable], propTypes: { autoWidth: React.PropTypes.bool, onChange: React.PropTypes.func, menuItems: React.PropTypes.array.isRequired }, getDefaultProps: function() { return { autoWidth: true }; }, 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 classes = this.getClasses('mui-drop-down-menu', { 'mui-open': this.state.open }); return ( <div className={classes}> <div className="mui-menu-control" onClick={this._onControlClick}> <Paper className="mui-menu-control-bg" zDepth={0} /> <div className="mui-menu-label"> {this.props.menuItems[this.state.selectedIndex].text} </div> <Icon className="mui-menu-drop-down-icon" icon="navigation-arrow-drop-down" /> <div className="mui-menu-control-underline" /> </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(), 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;