react-bootstrap
Version:
Bootstrap 3 components build with React
108 lines (87 loc) • 2.71 kB
JavaScript
'use strict';
var _extends = require('babel-runtime/helpers/extends')['default'];
var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default'];
exports.__esModule = true;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _utilsTransitionEvents = require('./utils/TransitionEvents');
var _utilsTransitionEvents2 = _interopRequireDefault(_utilsTransitionEvents);
var TabPane = _react2['default'].createClass({
displayName: 'TabPane',
propTypes: {
active: _react2['default'].PropTypes.bool,
animation: _react2['default'].PropTypes.bool,
onAnimateOutEnd: _react2['default'].PropTypes.func,
disabled: _react2['default'].PropTypes.bool
},
getDefaultProps: function getDefaultProps() {
return {
animation: true
};
},
getInitialState: function getInitialState() {
return {
animateIn: false,
animateOut: false
};
},
componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
if (this.props.animation) {
if (!this.state.animateIn && nextProps.active && !this.props.active) {
this.setState({
animateIn: true
});
} else if (!this.state.animateOut && !nextProps.active && this.props.active) {
this.setState({
animateOut: true
});
}
}
},
componentDidUpdate: function componentDidUpdate() {
if (this.state.animateIn) {
setTimeout(this.startAnimateIn, 0);
}
if (this.state.animateOut) {
_utilsTransitionEvents2['default'].addEndEventListener(_react2['default'].findDOMNode(this), this.stopAnimateOut);
}
},
startAnimateIn: function startAnimateIn() {
if (this.isMounted()) {
this.setState({
animateIn: false
});
}
},
stopAnimateOut: function stopAnimateOut() {
if (this.isMounted()) {
this.setState({
animateOut: false
});
if (this.props.onAnimateOutEnd) {
this.props.onAnimateOutEnd();
}
}
},
render: function render() {
var classes = {
'tab-pane': true,
'fade': true,
'active': this.props.active || this.state.animateOut,
'in': this.props.active && !this.state.animateIn
};
return _react2['default'].createElement(
'div',
_extends({}, this.props, {
role: 'tabpanel',
'aria-hidden': !this.props.active,
className: _classnames2['default'](this.props.className, classes)
}),
this.props.children
);
}
});
exports['default'] = TabPane;
module.exports = exports['default'];