react-bootstrap
Version:
Bootstrap 3 components build with React
113 lines (88 loc) • 3.37 kB
JavaScript
'use strict';
var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default'];
exports.__esModule = true;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _BootstrapMixin = require('./BootstrapMixin');
var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
var _Collapse = require('./Collapse');
var _Collapse2 = _interopRequireDefault(_Collapse);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _utilsValidComponentChildren = require('./utils/ValidComponentChildren');
var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren);
var _utilsCreateChainedFunction = require('./utils/createChainedFunction');
var _utilsCreateChainedFunction2 = _interopRequireDefault(_utilsCreateChainedFunction);
var CollapsibleNav = _react2['default'].createClass({
displayName: 'CollapsibleNav',
mixins: [_BootstrapMixin2['default']],
propTypes: {
onSelect: _react2['default'].PropTypes.func,
activeHref: _react2['default'].PropTypes.string,
activeKey: _react2['default'].PropTypes.any,
collapsible: _react2['default'].PropTypes.bool,
expanded: _react2['default'].PropTypes.bool,
eventKey: _react2['default'].PropTypes.any
},
render: function render() {
/*
* this.props.collapsible is set in NavBar when an eventKey is supplied.
*/
var classes = this.props.collapsible ? 'navbar-collapse' : null;
var renderChildren = this.props.collapsible ? this.renderCollapsibleNavChildren : this.renderChildren;
var nav = _react2['default'].createElement(
'div',
{ eventKey: this.props.eventKey, className: _classnames2['default'](this.props.className, classes) },
_utilsValidComponentChildren2['default'].map(this.props.children, renderChildren)
);
if (this.props.collapsible) {
return _react2['default'].createElement(
_Collapse2['default'],
{ 'in': this.props.expanded },
nav
);
} else {
return nav;
}
},
getChildActiveProp: function getChildActiveProp(child) {
if (child.props.active) {
return true;
}
if (this.props.activeKey != null) {
if (child.props.eventKey === this.props.activeKey) {
return true;
}
}
if (this.props.activeHref != null) {
if (child.props.href === this.props.activeHref) {
return true;
}
}
return child.props.active;
},
renderChildren: function renderChildren(child, index) {
var key = child.key ? child.key : index;
return _react.cloneElement(child, {
activeKey: this.props.activeKey,
activeHref: this.props.activeHref,
ref: 'nocollapse_' + key,
key: key,
navItem: true
});
},
renderCollapsibleNavChildren: function renderCollapsibleNavChildren(child, index) {
var key = child.key ? child.key : index;
return _react.cloneElement(child, {
active: this.getChildActiveProp(child),
activeKey: this.props.activeKey,
activeHref: this.props.activeHref,
onSelect: _utilsCreateChainedFunction2['default'](child.props.onSelect, this.props.onSelect),
ref: 'collapsible_' + key,
key: key,
navItem: true
});
}
});
exports['default'] = CollapsibleNav;
module.exports = exports['default'];