UNPKG

2.35 kBJavaScriptView Raw
1import _extends from 'babel-runtime/helpers/extends';
2import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';
3import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
4import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
5import _inherits from 'babel-runtime/helpers/inherits';
6import React from 'react';
7import PropTypes from 'prop-types';
8import classNames from 'classnames';
9import Button from './Button';
10import SafeAnchor from './SafeAnchor';
11
12import { bsClass as setBsClass } from './utils/bootstrapUtils';
13
14var propTypes = {
15 noCaret: PropTypes.bool,
16 open: PropTypes.bool,
17 title: PropTypes.string,
18 useAnchor: PropTypes.bool
19};
20
21var defaultProps = {
22 open: false,
23 useAnchor: false,
24 bsRole: 'toggle'
25};
26
27var DropdownToggle = function (_React$Component) {
28 _inherits(DropdownToggle, _React$Component);
29
30 function DropdownToggle() {
31 _classCallCheck(this, DropdownToggle);
32
33 return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));
34 }
35
36 DropdownToggle.prototype.render = function render() {
37 var _props = this.props,
38 noCaret = _props.noCaret,
39 open = _props.open,
40 useAnchor = _props.useAnchor,
41 bsClass = _props.bsClass,
42 className = _props.className,
43 children = _props.children,
44 props = _objectWithoutProperties(_props, ['noCaret', 'open', 'useAnchor', 'bsClass', 'className', 'children']);
45
46 delete props.bsRole;
47
48 var Component = useAnchor ? SafeAnchor : Button;
49 var useCaret = !noCaret;
50
51 // This intentionally forwards bsSize and bsStyle (if set) to the
52 // underlying component, to allow it to render size and style variants.
53
54 // FIXME: Should this really fall back to `title` as children?
55
56 return React.createElement(
57 Component,
58 _extends({}, props, {
59 role: 'button',
60 className: classNames(className, bsClass),
61 'aria-haspopup': true,
62 'aria-expanded': open
63 }),
64 children || props.title,
65 useCaret && ' ',
66 useCaret && React.createElement('span', { className: 'caret' })
67 );
68 };
69
70 return DropdownToggle;
71}(React.Component);
72
73DropdownToggle.propTypes = propTypes;
74DropdownToggle.defaultProps = defaultProps;
75
76export default setBsClass('dropdown-toggle', DropdownToggle);
\No newline at end of file