UNPKG

4.6 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4
5var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
6
7var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
8
9var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
10
11var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
12
13var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
14
15var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
16
17var _inherits2 = require('babel-runtime/helpers/inherits');
18
19var _inherits3 = _interopRequireDefault(_inherits2);
20
21var _extends2 = require('babel-runtime/helpers/extends');
22
23var _extends3 = _interopRequireDefault(_extends2);
24
25var _classnames = require('classnames');
26
27var _classnames2 = _interopRequireDefault(_classnames);
28
29var _react = require('react');
30
31var _react2 = _interopRequireDefault(_react);
32
33var _propTypes = require('prop-types');
34
35var _propTypes2 = _interopRequireDefault(_propTypes);
36
37var _Dropdown = require('./Dropdown');
38
39var _Dropdown2 = _interopRequireDefault(_Dropdown);
40
41var _splitComponentProps2 = require('./utils/splitComponentProps');
42
43var _splitComponentProps3 = _interopRequireDefault(_splitComponentProps2);
44
45var _ValidComponentChildren = require('./utils/ValidComponentChildren');
46
47var _ValidComponentChildren2 = _interopRequireDefault(_ValidComponentChildren);
48
49function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
50
51var propTypes = (0, _extends3.default)({}, _Dropdown2.default.propTypes, {
52
53 // Toggle props.
54 title: _propTypes2.default.node.isRequired,
55 noCaret: _propTypes2.default.bool,
56 active: _propTypes2.default.bool,
57 activeKey: _propTypes2.default.any,
58 activeHref: _propTypes2.default.string,
59
60 // Override generated docs from <Dropdown>.
61 /**
62 * @private
63 */
64 children: _propTypes2.default.node
65});
66
67var NavDropdown = function (_React$Component) {
68 (0, _inherits3.default)(NavDropdown, _React$Component);
69
70 function NavDropdown() {
71 (0, _classCallCheck3.default)(this, NavDropdown);
72 return (0, _possibleConstructorReturn3.default)(this, _React$Component.apply(this, arguments));
73 }
74
75 NavDropdown.prototype.isActive = function isActive(_ref, activeKey, activeHref) {
76 var props = _ref.props;
77
78 var _this2 = this;
79
80 if (props.active || activeKey != null && props.eventKey === activeKey || activeHref && props.href === activeHref) {
81 return true;
82 }
83
84 if (_ValidComponentChildren2.default.some(props.children, function (child) {
85 return _this2.isActive(child, activeKey, activeHref);
86 })) {
87 return true;
88 }
89
90 return props.active;
91 };
92
93 NavDropdown.prototype.render = function render() {
94 var _this3 = this;
95
96 var _props = this.props,
97 title = _props.title,
98 activeKey = _props.activeKey,
99 activeHref = _props.activeHref,
100 className = _props.className,
101 style = _props.style,
102 children = _props.children,
103 props = (0, _objectWithoutProperties3.default)(_props, ['title', 'activeKey', 'activeHref', 'className', 'style', 'children']);
104
105
106 var active = this.isActive(this, activeKey, activeHref);
107 delete props.active; // Accessed via this.isActive().
108 delete props.eventKey; // Accessed via this.isActive().
109
110 var _splitComponentProps = (0, _splitComponentProps3.default)(props, _Dropdown2.default.ControlledComponent),
111 dropdownProps = _splitComponentProps[0],
112 toggleProps = _splitComponentProps[1];
113
114 // Unlike for the other dropdowns, styling needs to go to the `<Dropdown>`
115 // rather than the `<Dropdown.Toggle>`.
116
117 return _react2.default.createElement(
118 _Dropdown2.default,
119 (0, _extends3.default)({}, dropdownProps, {
120 componentClass: 'li',
121 className: (0, _classnames2.default)(className, { active: active }),
122 style: style
123 }),
124 _react2.default.createElement(
125 _Dropdown2.default.Toggle,
126 (0, _extends3.default)({}, toggleProps, { useAnchor: true }),
127 title
128 ),
129 _react2.default.createElement(
130 _Dropdown2.default.Menu,
131 null,
132 _ValidComponentChildren2.default.map(children, function (child) {
133 return _react2.default.cloneElement(child, {
134 active: _this3.isActive(child, activeKey, activeHref)
135 });
136 })
137 )
138 );
139 };
140
141 return NavDropdown;
142}(_react2.default.Component);
143
144NavDropdown.propTypes = propTypes;
145
146exports.default = NavDropdown;
147module.exports = exports['default'];
\No newline at end of file