UNPKG

2.65 kBJavaScriptView Raw
1import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';
2import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
3import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
4import _inherits from 'babel-runtime/helpers/inherits';
5import PropTypes from 'prop-types';
6import React from 'react';
7import classNames from 'classnames';
8import elementType from 'react-prop-types/lib/elementType';
9import SafeAnchor from './SafeAnchor';
10import createChainedFunction from './utils/createChainedFunction';
11
12var propTypes = {
13 /**
14 * only here to satisfy linting, just the html onClick handler.
15 *
16 * @private
17 */
18 onClick: PropTypes.func,
19 /**
20 * You can use a custom element for this component
21 */
22 componentClass: elementType
23};
24
25var defaultProps = {
26 componentClass: SafeAnchor
27};
28
29var contextTypes = {
30 $bs_panel: PropTypes.shape({
31 bodyId: PropTypes.string,
32 onToggle: PropTypes.func,
33 expanded: PropTypes.bool
34 })
35};
36
37var PanelToggle = function (_React$Component) {
38 _inherits(PanelToggle, _React$Component);
39
40 function PanelToggle() {
41 _classCallCheck(this, PanelToggle);
42
43 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
44 args[_key] = arguments[_key];
45 }
46
47 var _this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args)));
48
49 _this.handleToggle = _this.handleToggle.bind(_this);
50 return _this;
51 }
52
53 PanelToggle.prototype.handleToggle = function handleToggle(event) {
54 var _ref = this.context.$bs_panel || {},
55 onToggle = _ref.onToggle;
56
57 if (onToggle) {
58 onToggle(event);
59 }
60 };
61
62 PanelToggle.prototype.render = function render() {
63 var _props = this.props,
64 onClick = _props.onClick,
65 className = _props.className,
66 componentClass = _props.componentClass,
67 props = _objectWithoutProperties(_props, ['onClick', 'className', 'componentClass']);
68
69 var _ref2 = this.context.$bs_panel || {},
70 expanded = _ref2.expanded,
71 bodyId = _ref2.bodyId;
72
73 var Component = componentClass;
74
75 props.onClick = createChainedFunction(onClick, this.handleToggle);
76
77 props['aria-expanded'] = expanded;
78 props.className = classNames(className, !expanded && 'collapsed');
79
80 if (bodyId) {
81 props['aria-controls'] = bodyId;
82 }
83
84 return React.createElement(Component, props);
85 };
86
87 return PanelToggle;
88}(React.Component);
89
90PanelToggle.propTypes = propTypes;
91PanelToggle.defaultProps = defaultProps;
92PanelToggle.contextTypes = contextTypes;
93
94export default PanelToggle;
\No newline at end of file