UNPKG

react-bootstrap

Version:

Bootstrap 3 components build with React

81 lines (65 loc) 1.73 kB
/** @jsx React.DOM */ import React from './react-es6'; import classSet from './react-es6/lib/cx'; import BootstrapMixin from './BootstrapMixin'; import utils from './utils'; var PanelGroup = React.createClass({ mixins: [BootstrapMixin], propTypes: { onSelect: React.PropTypes.func }, getDefaultProps: function () { return { bsClass: 'panel-group' }; }, getInitialState: function () { var defaultActiveKey = this.props.defaultActiveKey; return { activeKey: defaultActiveKey }; }, render: function () { return this.transferPropsTo( <div className={classSet(this.getBsClassSet())}> {utils.modifyChildren(this.props.children, this.renderPanel)} </div> ); }, renderPanel: function (child) { var activeKey = this.props.activeKey != null ? this.props.activeKey : this.state.activeKey; var props = { bsStyle: this.props.bsStyle, key: child.props.key, ref: child.props.ref }; if (this.props.isAccordion) { props.isCollapsable = true; props.isOpen = (child.props.key === activeKey); props.onSelect = this.handleSelect; } return utils.cloneWithProps( child, props ); }, shouldComponentUpdate: function() { // Defer any updates to this component during the `onSelect` handler. return !this._isChanging; }, handleSelect: function (key) { if (this.props.onSelect) { this._isChanging = true; this.props.onSelect(key); this._isChanging = false; } if (this.state.activeKey === key) { key = null; } this.setState({ activeKey: key }); } }); export default = PanelGroup;