UNPKG

5.78 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4
5var _extends2 = require('babel-runtime/helpers/extends');
6
7var _extends3 = _interopRequireDefault(_extends2);
8
9var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
10
11var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
12
13var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
14
15var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
16
17var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
18
19var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
20
21var _inherits2 = require('babel-runtime/helpers/inherits');
22
23var _inherits3 = _interopRequireDefault(_inherits2);
24
25var _react = require('react');
26
27var _react2 = _interopRequireDefault(_react);
28
29var _propTypes = require('prop-types');
30
31var _propTypes2 = _interopRequireDefault(_propTypes);
32
33var _isRequiredForA11y = require('prop-types-extra/lib/isRequiredForA11y');
34
35var _isRequiredForA11y2 = _interopRequireDefault(_isRequiredForA11y);
36
37var _uncontrollable = require('uncontrollable');
38
39var _uncontrollable2 = _interopRequireDefault(_uncontrollable);
40
41var _Nav = require('./Nav');
42
43var _Nav2 = _interopRequireDefault(_Nav);
44
45var _NavItem = require('./NavItem');
46
47var _NavItem2 = _interopRequireDefault(_NavItem);
48
49var _TabContainer = require('./TabContainer');
50
51var _TabContainer2 = _interopRequireDefault(_TabContainer);
52
53var _TabContent = require('./TabContent');
54
55var _TabContent2 = _interopRequireDefault(_TabContent);
56
57var _bootstrapUtils = require('./utils/bootstrapUtils');
58
59var _ValidComponentChildren = require('./utils/ValidComponentChildren');
60
61var _ValidComponentChildren2 = _interopRequireDefault(_ValidComponentChildren);
62
63function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
64
65var TabContainer = _TabContainer2.default.ControlledComponent;
66
67var propTypes = {
68 /**
69 * Mark the Tab with a matching `eventKey` as active.
70 *
71 * @controllable onSelect
72 */
73 activeKey: _propTypes2.default.any,
74
75 /**
76 * Navigation style
77 */
78 bsStyle: _propTypes2.default.oneOf(['tabs', 'pills']),
79
80 animation: _propTypes2.default.bool,
81
82 id: (0, _isRequiredForA11y2.default)(_propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number])),
83
84 /**
85 * Callback fired when a Tab is selected.
86 *
87 * ```js
88 * function (
89 * Any eventKey,
90 * SyntheticEvent event?
91 * )
92 * ```
93 *
94 * @controllable activeKey
95 */
96 onSelect: _propTypes2.default.func,
97
98 /**
99 * Wait until the first "enter" transition to mount tabs (add them to the DOM)
100 */
101 mountOnEnter: _propTypes2.default.bool,
102
103 /**
104 * Unmount tabs (remove it from the DOM) when it is no longer visible
105 */
106 unmountOnExit: _propTypes2.default.bool
107};
108
109var defaultProps = {
110 bsStyle: 'tabs',
111 animation: true,
112 mountOnEnter: false,
113 unmountOnExit: false
114};
115
116function getDefaultActiveKey(children) {
117 var defaultActiveKey = void 0;
118 _ValidComponentChildren2.default.forEach(children, function (child) {
119 if (defaultActiveKey == null) {
120 defaultActiveKey = child.props.eventKey;
121 }
122 });
123
124 return defaultActiveKey;
125}
126
127var Tabs = function (_React$Component) {
128 (0, _inherits3.default)(Tabs, _React$Component);
129
130 function Tabs() {
131 (0, _classCallCheck3.default)(this, Tabs);
132 return (0, _possibleConstructorReturn3.default)(this, _React$Component.apply(this, arguments));
133 }
134
135 Tabs.prototype.renderTab = function renderTab(child) {
136 var _child$props = child.props,
137 title = _child$props.title,
138 eventKey = _child$props.eventKey,
139 disabled = _child$props.disabled,
140 tabClassName = _child$props.tabClassName;
141
142 if (title == null) {
143 return null;
144 }
145
146 return _react2.default.createElement(
147 _NavItem2.default,
148 { eventKey: eventKey, disabled: disabled, className: tabClassName },
149 title
150 );
151 };
152
153 Tabs.prototype.render = function render() {
154 var _props = this.props,
155 id = _props.id,
156 onSelect = _props.onSelect,
157 animation = _props.animation,
158 mountOnEnter = _props.mountOnEnter,
159 unmountOnExit = _props.unmountOnExit,
160 bsClass = _props.bsClass,
161 className = _props.className,
162 style = _props.style,
163 children = _props.children,
164 _props$activeKey = _props.activeKey,
165 activeKey = _props$activeKey === undefined ? getDefaultActiveKey(children) : _props$activeKey,
166 props = (0, _objectWithoutProperties3.default)(_props, ['id', 'onSelect', 'animation', 'mountOnEnter', 'unmountOnExit', 'bsClass', 'className', 'style', 'children', 'activeKey']);
167
168
169 return _react2.default.createElement(
170 TabContainer,
171 {
172 id: id,
173 activeKey: activeKey,
174 onSelect: onSelect,
175 className: className,
176 style: style
177 },
178 _react2.default.createElement(
179 'div',
180 null,
181 _react2.default.createElement(
182 _Nav2.default,
183 (0, _extends3.default)({}, props, { role: 'tablist' }),
184 _ValidComponentChildren2.default.map(children, this.renderTab)
185 ),
186 _react2.default.createElement(
187 _TabContent2.default,
188 {
189 bsClass: bsClass,
190 animation: animation,
191 mountOnEnter: mountOnEnter,
192 unmountOnExit: unmountOnExit
193 },
194 children
195 )
196 )
197 );
198 };
199
200 return Tabs;
201}(_react2.default.Component);
202
203Tabs.propTypes = propTypes;
204Tabs.defaultProps = defaultProps;
205
206(0, _bootstrapUtils.bsClass)('tab', Tabs);
207
208exports.default = (0, _uncontrollable2.default)(Tabs, { activeKey: 'onSelect' });
209module.exports = exports['default'];
\No newline at end of file