UNPKG

@bigfishtv/cockpit

Version:

134 lines (108 loc) 4.55 kB
'use strict'; exports.__esModule = true; exports.default = undefined; var _class, _temp; var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _Button = require('../Button'); var _Button2 = _interopRequireDefault(_Button); var _Icon = require('../../Icon'); var _Icon2 = _interopRequireDefault(_Icon); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** * Is the core Dropdown component */ var DropdownButton = (_temp = _class = function (_Component) { _inherits(DropdownButton, _Component); function DropdownButton() { _classCallCheck(this, DropdownButton); var _this = _possibleConstructorReturn(this, _Component.call(this)); _this.state = { expanded: false }; _this.toggleOpen = _this.toggleOpen.bind(_this); return _this; } DropdownButton.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) { var wasExpanded = prevState.wasExpanded; var expanded = this.state.expanded; if (expanded != wasExpanded) { if (expanded) { document.addEventListener('mouseup', this.toggleOpen); } else { document.removeEventListener('mouseup', this.toggleOpen); } } }; DropdownButton.prototype.toggleOpen = function toggleOpen() { this.setState({ expanded: !this.state.expanded }); }; DropdownButton.prototype.render = function render() { var _props = this.props, icon = _props.icon, text = _props.text, direction = _props.direction, pullRight = _props.pullRight, style = _props.style, size = _props.size, caret = _props.caret, disabled = _props.disabled, children = _props.children; return _react2.default.createElement( 'div', { className: 'button-group drop' + direction }, _react2.default.createElement( _Button2.default, { style: style, size: size, disabled: disabled, onClick: this.toggleOpen }, icon && _react2.default.createElement( 'span', null, _react2.default.createElement(_Icon2.default, { name: icon, size: 18 }), ' ' ), _react2.default.createElement( 'span', null, text, ' ' ), caret && _react2.default.createElement('span', { className: 'caret caret-right' }) ), _react2.default.createElement( 'ul', { className: (0, _classnames2.default)('dropdown-menu', { open: this.state.expanded, 'dropdown-menu-right': pullRight }) }, children ) ); }; return DropdownButton; }(_react.Component), _class.propTypes = { /** Size string as per turret guidelines i.e. xsmall, small, medium, large, xlarge */ size: _propTypes2.default.string, /** Button's text, by default is just a carat button with no button text */ text: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.node]), /** Outputs custom button class e.g 'primary' = 'button-primary' */ style: _propTypes2.default.string, /** Direction of dropdown menu -- up or down */ direction: _propTypes2.default.oneOf(['up', 'down']), /** whether or not to align dropdown menu to left of button */ pullRight: _propTypes2.default.bool, /** Whether or not to display carat */ caret: _propTypes2.default.bool, /** Icon name to display */ icon: _propTypes2.default.string }, _class.defaultProps = { text: null, size: 'medium', style: 'default', direction: 'down', pullRight: false, caret: true, icon: null }, _temp); exports.default = DropdownButton;