UNPKG

react-bootstrap

Version:

Bootstrap 3 components build with React

157 lines (118 loc) 4.95 kB
/* eslint react/prop-types: [2, {ignore: "bsSize"}] */ /* BootstrapMixin contains `bsSize` type validation */ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; exports.__esModule = true; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _utilsCreateChainedFunction = require('./utils/createChainedFunction'); var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction); var _BootstrapMixin = require('./BootstrapMixin'); var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin); var _DropdownStateMixin = require('./DropdownStateMixin'); var _DropdownStateMixin2 = _interopRequireDefault(_DropdownStateMixin); var _Button = require('./Button'); var _Button2 = _interopRequireDefault(_Button); var _ButtonGroup = require('./ButtonGroup'); var _ButtonGroup2 = _interopRequireDefault(_ButtonGroup); var _DropdownMenu = require('./DropdownMenu'); var _DropdownMenu2 = _interopRequireDefault(_DropdownMenu); var _utilsValidComponentChildren = require('./utils/ValidComponentChildren'); var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren); var DropdownButton = _react2['default'].createClass({ displayName: 'DropdownButton', mixins: [_BootstrapMixin2['default'], _DropdownStateMixin2['default']], propTypes: { pullRight: _react2['default'].PropTypes.bool, dropup: _react2['default'].PropTypes.bool, title: _react2['default'].PropTypes.node, href: _react2['default'].PropTypes.string, id: _react2['default'].PropTypes.string, onClick: _react2['default'].PropTypes.func, onSelect: _react2['default'].PropTypes.func, navItem: _react2['default'].PropTypes.bool, noCaret: _react2['default'].PropTypes.bool, buttonClassName: _react2['default'].PropTypes.string, className: _react2['default'].PropTypes.string, children: _react2['default'].PropTypes.node }, render: function render() { var renderMethod = this.props.navItem ? 'renderNavItem' : 'renderButtonGroup'; var caret = this.props.noCaret ? null : _react2['default'].createElement('span', { className: "caret" }); return this[renderMethod]([_react2['default'].createElement( _Button2['default'], _extends({}, this.props, { ref: "dropdownButton", className: _classnames2['default']('dropdown-toggle', this.props.buttonClassName), onClick: _utilsCreateChainedFunction2['default'](this.props.onClick, this.handleDropdownClick), key: 0, navDropdown: this.props.navItem, navItem: null, title: null, pullRight: null, dropup: null }), this.props.title, ' ', caret ), _react2['default'].createElement( _DropdownMenu2['default'], { ref: "menu", 'aria-labelledby': this.props.id, pullRight: this.props.pullRight, key: 1 }, _utilsValidComponentChildren2['default'].map(this.props.children, this.renderMenuItem) )]); }, renderButtonGroup: function renderButtonGroup(children) { var groupClasses = { 'open': this.state.open, 'dropup': this.props.dropup }; return _react2['default'].createElement( _ButtonGroup2['default'], { bsSize: this.props.bsSize, className: _classnames2['default'](this.props.className, groupClasses) }, children ); }, renderNavItem: function renderNavItem(children) { var classes = { 'dropdown': true, 'open': this.state.open, 'dropup': this.props.dropup }; return _react2['default'].createElement( 'li', { className: _classnames2['default'](this.props.className, classes) }, children ); }, renderMenuItem: function renderMenuItem(child, index) { // Only handle the option selection if an onSelect prop has been set on the // component or it's child, this allows a user not to pass an onSelect // handler and have the browser preform the default action. var handleOptionSelect = this.props.onSelect || child.props.onSelect ? this.handleOptionSelect : null; return _react.cloneElement(child, { // Capture onSelect events onSelect: _utilsCreateChainedFunction2['default'](child.props.onSelect, handleOptionSelect), key: child.key ? child.key : index }); }, handleDropdownClick: function handleDropdownClick(e) { e.preventDefault(); this.setDropdownState(!this.state.open); }, handleOptionSelect: function handleOptionSelect(key) { if (this.props.onSelect) { this.props.onSelect(key); } this.setDropdownState(false); } }); exports['default'] = DropdownButton; module.exports = exports['default'];