UNPKG

8.58 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4var _typeof3 = require("@babel/runtime/helpers/typeof");
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.default = void 0;
9var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
12var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
14var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15var _classnames = _interopRequireDefault(require("classnames"));
16var _useMergedState5 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
17var _isMobile = _interopRequireDefault(require("rc-util/lib/isMobile"));
18var _react = _interopRequireWildcard(require("react"));
19var React = _react;
20var _TabContext = _interopRequireDefault(require("./TabContext"));
21var _Wrapper = _interopRequireDefault(require("./TabNavList/Wrapper"));
22var _TabPanelList = _interopRequireDefault(require("./TabPanelList"));
23var _useAnimateConfig = _interopRequireDefault(require("./hooks/useAnimateConfig"));
24var _excluded = ["id", "prefixCls", "className", "items", "direction", "activeKey", "defaultActiveKey", "editable", "animated", "tabPosition", "tabBarGutter", "tabBarStyle", "tabBarExtraContent", "locale", "more", "destroyInactiveTabPane", "renderTabBar", "onChange", "onTabClick", "onTabScroll", "getPopupContainer", "popupClassName", "indicator"]; // Accessibility https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/Tab_Role
25function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
26function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
27/**
28 * Should added antd:
29 * - type
30 *
31 * Removed:
32 * - onNextClick
33 * - onPrevClick
34 * - keyboard
35 */
36
37// Used for accessibility
38var uuid = 0;
39var Tabs = /*#__PURE__*/React.forwardRef(function (props, ref) {
40 var id = props.id,
41 _props$prefixCls = props.prefixCls,
42 prefixCls = _props$prefixCls === void 0 ? 'rc-tabs' : _props$prefixCls,
43 className = props.className,
44 items = props.items,
45 direction = props.direction,
46 activeKey = props.activeKey,
47 defaultActiveKey = props.defaultActiveKey,
48 editable = props.editable,
49 animated = props.animated,
50 _props$tabPosition = props.tabPosition,
51 tabPosition = _props$tabPosition === void 0 ? 'top' : _props$tabPosition,
52 tabBarGutter = props.tabBarGutter,
53 tabBarStyle = props.tabBarStyle,
54 tabBarExtraContent = props.tabBarExtraContent,
55 locale = props.locale,
56 more = props.more,
57 destroyInactiveTabPane = props.destroyInactiveTabPane,
58 renderTabBar = props.renderTabBar,
59 onChange = props.onChange,
60 onTabClick = props.onTabClick,
61 onTabScroll = props.onTabScroll,
62 getPopupContainer = props.getPopupContainer,
63 popupClassName = props.popupClassName,
64 indicator = props.indicator,
65 restProps = (0, _objectWithoutProperties2.default)(props, _excluded);
66 var tabs = React.useMemo(function () {
67 return (items || []).filter(function (item) {
68 return item && (0, _typeof2.default)(item) === 'object' && 'key' in item;
69 });
70 }, [items]);
71 var rtl = direction === 'rtl';
72 var mergedAnimated = (0, _useAnimateConfig.default)(animated);
73
74 // ======================== Mobile ========================
75 var _useState = (0, _react.useState)(false),
76 _useState2 = (0, _slicedToArray2.default)(_useState, 2),
77 mobile = _useState2[0],
78 setMobile = _useState2[1];
79 (0, _react.useEffect)(function () {
80 // Only update on the client side
81 setMobile((0, _isMobile.default)());
82 }, []);
83
84 // ====================== Active Key ======================
85 var _useMergedState = (0, _useMergedState5.default)(function () {
86 var _tabs$;
87 return (_tabs$ = tabs[0]) === null || _tabs$ === void 0 ? void 0 : _tabs$.key;
88 }, {
89 value: activeKey,
90 defaultValue: defaultActiveKey
91 }),
92 _useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
93 mergedActiveKey = _useMergedState2[0],
94 setMergedActiveKey = _useMergedState2[1];
95 var _useState3 = (0, _react.useState)(function () {
96 return tabs.findIndex(function (tab) {
97 return tab.key === mergedActiveKey;
98 });
99 }),
100 _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
101 activeIndex = _useState4[0],
102 setActiveIndex = _useState4[1];
103
104 // Reset active key if not exist anymore
105 (0, _react.useEffect)(function () {
106 var newActiveIndex = tabs.findIndex(function (tab) {
107 return tab.key === mergedActiveKey;
108 });
109 if (newActiveIndex === -1) {
110 var _tabs$newActiveIndex;
111 newActiveIndex = Math.max(0, Math.min(activeIndex, tabs.length - 1));
112 setMergedActiveKey((_tabs$newActiveIndex = tabs[newActiveIndex]) === null || _tabs$newActiveIndex === void 0 ? void 0 : _tabs$newActiveIndex.key);
113 }
114 setActiveIndex(newActiveIndex);
115 }, [tabs.map(function (tab) {
116 return tab.key;
117 }).join('_'), mergedActiveKey, activeIndex]);
118
119 // ===================== Accessibility ====================
120 var _useMergedState3 = (0, _useMergedState5.default)(null, {
121 value: id
122 }),
123 _useMergedState4 = (0, _slicedToArray2.default)(_useMergedState3, 2),
124 mergedId = _useMergedState4[0],
125 setMergedId = _useMergedState4[1];
126
127 // Async generate id to avoid ssr mapping failed
128 (0, _react.useEffect)(function () {
129 if (!id) {
130 setMergedId("rc-tabs-".concat(process.env.NODE_ENV === 'test' ? 'test' : uuid));
131 uuid += 1;
132 }
133 }, []);
134
135 // ======================== Events ========================
136 function onInternalTabClick(key, e) {
137 onTabClick === null || onTabClick === void 0 || onTabClick(key, e);
138 var isActiveChanged = key !== mergedActiveKey;
139 setMergedActiveKey(key);
140 if (isActiveChanged) {
141 onChange === null || onChange === void 0 || onChange(key);
142 }
143 }
144
145 // ======================== Render ========================
146 var sharedProps = {
147 id: mergedId,
148 activeKey: mergedActiveKey,
149 animated: mergedAnimated,
150 tabPosition: tabPosition,
151 rtl: rtl,
152 mobile: mobile
153 };
154 var tabNavBarProps = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, sharedProps), {}, {
155 editable: editable,
156 locale: locale,
157 more: more,
158 tabBarGutter: tabBarGutter,
159 onTabClick: onInternalTabClick,
160 onTabScroll: onTabScroll,
161 extra: tabBarExtraContent,
162 style: tabBarStyle,
163 panes: null,
164 getPopupContainer: getPopupContainer,
165 popupClassName: popupClassName,
166 indicator: indicator
167 });
168 return /*#__PURE__*/React.createElement(_TabContext.default.Provider, {
169 value: {
170 tabs: tabs,
171 prefixCls: prefixCls
172 }
173 }, /*#__PURE__*/React.createElement("div", (0, _extends2.default)({
174 ref: ref,
175 id: id,
176 className: (0, _classnames.default)(prefixCls, "".concat(prefixCls, "-").concat(tabPosition), (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, "".concat(prefixCls, "-mobile"), mobile), "".concat(prefixCls, "-editable"), editable), "".concat(prefixCls, "-rtl"), rtl), className)
177 }, restProps), /*#__PURE__*/React.createElement(_Wrapper.default, (0, _extends2.default)({}, tabNavBarProps, {
178 renderTabBar: renderTabBar
179 })), /*#__PURE__*/React.createElement(_TabPanelList.default, (0, _extends2.default)({
180 destroyInactiveTabPane: destroyInactiveTabPane
181 }, sharedProps, {
182 animated: mergedAnimated
183 }))));
184});
185if (process.env.NODE_ENV !== 'production') {
186 Tabs.displayName = 'Tabs';
187}
188var _default = exports.default = Tabs;
\No newline at end of file