UNPKG

react-bootstrap

Version:

Bootstrap 3 components build with React

150 lines (118 loc) 4.3 kB
/* eslint react/prop-types: [1, {ignore: ["children", "className", "bsSize"]}]*/ /* BootstrapMixin contains `bsSize` type validation */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); 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 SplitButton = _react2['default'].createClass({ displayName: 'SplitButton', mixins: [_BootstrapMixin2['default'], _DropdownStateMixin2['default']], propTypes: { pullRight: _react2['default'].PropTypes.bool, title: _react2['default'].PropTypes.node, href: _react2['default'].PropTypes.string, id: _react2['default'].PropTypes.string, target: _react2['default'].PropTypes.string, dropdownTitle: _react2['default'].PropTypes.node, dropup: _react2['default'].PropTypes.bool, onClick: _react2['default'].PropTypes.func, onSelect: _react2['default'].PropTypes.func, disabled: _react2['default'].PropTypes.bool }, getDefaultProps: function getDefaultProps() { return { dropdownTitle: 'Toggle dropdown' }; }, render: function render() { var groupClasses = { 'open': this.state.open, 'dropup': this.props.dropup }; var button = _react2['default'].createElement( _Button2['default'], _extends({}, this.props, { ref: 'button', onClick: this.handleButtonClick, title: null, id: null }), this.props.title ); var dropdownButton = _react2['default'].createElement( _Button2['default'], _extends({}, this.props, { ref: 'dropdownButton', className: (0, _classnames2['default'])(this.props.className, 'dropdown-toggle'), onClick: this.handleDropdownClick, title: null, href: null, target: null, id: null }), _react2['default'].createElement( 'span', { className: 'sr-only' }, this.props.dropdownTitle ), _react2['default'].createElement('span', { className: 'caret' }), _react2['default'].createElement( 'span', { style: { letterSpacing: '-.3em' } }, ' ' ) ); return _react2['default'].createElement( _ButtonGroup2['default'], { bsSize: this.props.bsSize, className: (0, _classnames2['default'])(groupClasses), id: this.props.id }, button, dropdownButton, _react2['default'].createElement( _DropdownMenu2['default'], { ref: 'menu', onSelect: this.handleOptionSelect, 'aria-labelledby': this.props.id, pullRight: this.props.pullRight }, this.props.children ) ); }, handleButtonClick: function handleButtonClick(e) { if (this.state.open) { this.setDropdownState(false); } if (this.props.onClick) { this.props.onClick(e, this.props.href, this.props.target); } }, 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'] = SplitButton; module.exports = exports['default'];