UNPKG

react-bootstrap

Version:

Bootstrap 3 components build with React

151 lines (118 loc) 4.13 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 _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, className: _react2['default'].PropTypes.string, children: _react2['default'].PropTypes.node }, 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: _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: _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'];