import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties'; import _classCallCheck from 'babel-runtime/helpers/classCallCheck'; import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn'; import _inherits from 'babel-runtime/helpers/inherits'; import React, { PropTypes } from 'react'; import uncontrollable from 'uncontrollable'; var TAB = 'tab'; var PANE = 'pane'; var idPropType = PropTypes.oneOfType([PropTypes.string, PropTypes.number]); var propTypes = { /** * HTML id attribute, required if no `generateChildId` prop * is specified. */ id: function id(props) { var error = null; if (!props.generateChildId) { for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } error = idPropType.apply(undefined, [props].concat(args)); if (!error && !props.id) { error = new Error('In order to properly initialize Tabs in a way that is accessible ' + 'to assistive technologies (such as screen readers) an `id` or a ' + '`generateChildId` prop to TabContainer is required'); } } return error; }, /** * A function that takes an `eventKey` and `type` and returns a unique id for * child tab ``s and ``s. The function _must_ be a pure * function, meaning it should always return the _same_ id for the same set * of inputs. The default value requires that an `id` to be set for the * ``. * * The `type` argument will either be `"tab"` or `"pane"`. * * @defaultValue (eventKey, type) => `${this.props.id}-${type}-${key}` */ generateChildId: PropTypes.func, /** * A callback fired when a tab is selected. * * @controllable activeKey */ onSelect: PropTypes.func, /** * The `eventKey` of the currently active tab. * * @controllable onSelect */ activeKey: PropTypes.any }; var childContextTypes = { $bs_tabContainer: React.PropTypes.shape({ activeKey: PropTypes.any, onSelect: PropTypes.func.isRequired, getTabId: PropTypes.func.isRequired, getPaneId: PropTypes.func.isRequired }) }; var TabContainer = function (_React$Component) { _inherits(TabContainer, _React$Component); function TabContainer() { _classCallCheck(this, TabContainer); return _possibleConstructorReturn(this, _React$Component.apply(this, arguments)); } TabContainer.prototype.getChildContext = function getChildContext() { var _props = this.props, activeKey = _props.activeKey, onSelect = _props.onSelect, generateChildId = _props.generateChildId, id = _props.id; var getId = generateChildId || function (key, type) { return id ? id + '-' + type + '-' + key : null; }; return { $bs_tabContainer: { activeKey: activeKey, onSelect: onSelect, getTabId: function getTabId(key) { return getId(key, TAB); }, getPaneId: function getPaneId(key) { return getId(key, PANE); } } }; }; TabContainer.prototype.render = function render() { var _props2 = this.props, children = _props2.children, props = _objectWithoutProperties(_props2, ['children']); delete props.generateChildId; delete props.onSelect; delete props.activeKey; return React.cloneElement(React.Children.only(children), props); }; return TabContainer; }(React.Component); TabContainer.propTypes = propTypes; TabContainer.childContextTypes = childContextTypes; export default uncontrollable(TabContainer, { activeKey: 'onSelect' });