react-bootstrap
Version:
Bootstrap 3 components build with React
129 lines (99 loc) • 4.05 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _BootstrapMixin = require('./BootstrapMixin');
var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin);
var _CollapsibleMixin = require('./CollapsibleMixin');
var _CollapsibleMixin2 = _interopRequireDefault(_CollapsibleMixin);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _utilsDomUtils = require('./utils/domUtils');
var _utilsDomUtils2 = _interopRequireDefault(_utilsDomUtils);
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'], _CollapsibleMixin2['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
},
getCollapsibleDOMNode: function getCollapsibleDOMNode() {
return _react2['default'].findDOMNode(this);
},
getCollapsibleDimensionValue: function getCollapsibleDimensionValue() {
var height = 0;
var nodes = this.refs;
for (var key in nodes) {
if (nodes.hasOwnProperty(key)) {
var n = _react2['default'].findDOMNode(nodes[key]),
h = n.offsetHeight,
computedStyles = _utilsDomUtils2['default'].getComputedStyles(n);
height += h + parseInt(computedStyles.marginTop, 10) + parseInt(computedStyles.marginBottom, 10);
}
}
return height;
},
render: function render() {
/*
* this.props.collapsible is set in NavBar when an eventKey is supplied.
*/
var classes = this.props.collapsible ? this.getCollapsibleClassSet('navbar-collapse') : null;
var renderChildren = this.props.collapsible ? this.renderCollapsibleNavChildren : this.renderChildren;
return _react2['default'].createElement(
'div',
{ eventKey: this.props.eventKey, className: (0, _classnames2['default'])(this.props.className, classes) },
_utilsValidComponentChildren2['default'].map(this.props.children, renderChildren)
);
},
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 (0, _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 (0, _react.cloneElement)(child, {
active: this.getChildActiveProp(child),
activeKey: this.props.activeKey,
activeHref: this.props.activeHref,
onSelect: (0, _utilsCreateChainedFunction2['default'])(child.props.onSelect, this.props.onSelect),
ref: 'collapsible_' + key,
key: key,
navItem: true
});
}
});
exports['default'] = CollapsibleNav;
module.exports = exports['default'];