You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

238 lines
8.6 KiB

"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var React = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _toArray = _interopRequireDefault(require("rc-util/lib/Children/toArray"));
var _useMergedState5 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
var _TabNavList = _interopRequireDefault(require("./TabNavList"));
var _TabPanelList = _interopRequireDefault(require("./TabPanelList"));
var _TabPane = _interopRequireDefault(require("./TabPanelList/TabPane"));
var _TabContext = _interopRequireDefault(require("./TabContext"));
var _useTouchMove = require("./hooks/useTouchMove");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
/**
* Should added antd:
* - type
*
* Removed:
* - onNextClick
* - onPrevClick
* - keyboard
*/
// Used for accessibility
var uuid = 0;
function parseTabList(children) {
return (0, _toArray.default)(children).map(function (node) {
if (React.isValidElement(node)) {
var key = node.key !== undefined ? String(node.key) : undefined;
return _objectSpread(_objectSpread({
key: key
}, node.props), {}, {
node: node
});
}
return null;
}).filter(function (tab) {
return tab;
});
}
function Tabs(_ref, ref) {
var _classNames;
var id = _ref.id,
_ref$prefixCls = _ref.prefixCls,
prefixCls = _ref$prefixCls === void 0 ? 'rc-tabs' : _ref$prefixCls,
className = _ref.className,
children = _ref.children,
direction = _ref.direction,
activeKey = _ref.activeKey,
defaultActiveKey = _ref.defaultActiveKey,
editable = _ref.editable,
animated = _ref.animated,
_ref$tabPosition = _ref.tabPosition,
tabPosition = _ref$tabPosition === void 0 ? 'top' : _ref$tabPosition,
tabBarGutter = _ref.tabBarGutter,
tabBarStyle = _ref.tabBarStyle,
tabBarExtraContent = _ref.tabBarExtraContent,
locale = _ref.locale,
moreIcon = _ref.moreIcon,
moreTransitionName = _ref.moreTransitionName,
destroyInactiveTabPane = _ref.destroyInactiveTabPane,
renderTabBar = _ref.renderTabBar,
onChange = _ref.onChange,
onTabClick = _ref.onTabClick,
onTabScroll = _ref.onTabScroll,
restProps = (0, _objectWithoutProperties2.default)(_ref, ["id", "prefixCls", "className", "children", "direction", "activeKey", "defaultActiveKey", "editable", "animated", "tabPosition", "tabBarGutter", "tabBarStyle", "tabBarExtraContent", "locale", "moreIcon", "moreTransitionName", "destroyInactiveTabPane", "renderTabBar", "onChange", "onTabClick", "onTabScroll"]);
var tabs = parseTabList(children);
var rtl = direction === 'rtl';
var mergedAnimated;
if (animated === false) {
mergedAnimated = {
inkBar: false,
tabPane: false
};
} else {
mergedAnimated = _objectSpread({
inkBar: true,
tabPane: false
}, animated !== true ? animated : null);
} // ======================== Mobile ========================
var _useState = (0, React.useState)(false),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
mobile = _useState2[0],
setMobile = _useState2[1];
(0, React.useEffect)(function () {
// Only update on the client side
setMobile((0, _useTouchMove.isMobile)());
}, []); // ====================== Active Key ======================
var _useMergedState = (0, _useMergedState5.default)(function () {
var _tabs$;
return (_tabs$ = tabs[0]) === null || _tabs$ === void 0 ? void 0 : _tabs$.key;
}, {
value: activeKey,
defaultValue: defaultActiveKey
}),
_useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
mergedActiveKey = _useMergedState2[0],
setMergedActiveKey = _useMergedState2[1];
var _useState3 = (0, React.useState)(function () {
return tabs.findIndex(function (tab) {
return tab.key === mergedActiveKey;
});
}),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
activeIndex = _useState4[0],
setActiveIndex = _useState4[1]; // Reset active key if not exist anymore
(0, React.useEffect)(function () {
var newActiveIndex = tabs.findIndex(function (tab) {
return tab.key === mergedActiveKey;
});
if (newActiveIndex === -1) {
var _tabs$newActiveIndex;
newActiveIndex = Math.max(0, Math.min(activeIndex, tabs.length - 1));
setMergedActiveKey((_tabs$newActiveIndex = tabs[newActiveIndex]) === null || _tabs$newActiveIndex === void 0 ? void 0 : _tabs$newActiveIndex.key);
}
setActiveIndex(newActiveIndex);
}, [tabs.map(function (tab) {
return tab.key;
}).join('_'), mergedActiveKey, activeIndex]); // ===================== Accessibility ====================
var _useMergedState3 = (0, _useMergedState5.default)(null, {
value: id
}),
_useMergedState4 = (0, _slicedToArray2.default)(_useMergedState3, 2),
mergedId = _useMergedState4[0],
setMergedId = _useMergedState4[1];
var mergedTabPosition = tabPosition;
if (mobile && !['left', 'right'].includes(tabPosition)) {
mergedTabPosition = 'top';
} // Async generate id to avoid ssr mapping failed
(0, React.useEffect)(function () {
if (!id) {
setMergedId("rc-tabs-".concat(process.env.NODE_ENV === 'test' ? 'test' : uuid));
uuid += 1;
}
}, []); // ======================== Events ========================
function onInternalTabClick(key, e) {
onTabClick === null || onTabClick === void 0 ? void 0 : onTabClick(key, e);
setMergedActiveKey(key);
onChange === null || onChange === void 0 ? void 0 : onChange(key);
} // ======================== Render ========================
var sharedProps = {
id: mergedId,
activeKey: mergedActiveKey,
animated: mergedAnimated,
tabPosition: mergedTabPosition,
rtl: rtl,
mobile: mobile
};
var tabNavBar;
var tabNavBarProps = _objectSpread(_objectSpread({}, sharedProps), {}, {
editable: editable,
locale: locale,
moreIcon: moreIcon,
moreTransitionName: moreTransitionName,
tabBarGutter: tabBarGutter,
onTabClick: onInternalTabClick,
onTabScroll: onTabScroll,
extra: tabBarExtraContent,
style: tabBarStyle,
panes: children
});
if (renderTabBar) {
tabNavBar = renderTabBar(tabNavBarProps, _TabNavList.default);
} else {
tabNavBar = React.createElement(_TabNavList.default, Object.assign({}, tabNavBarProps));
}
return React.createElement(_TabContext.default.Provider, {
value: {
tabs: tabs,
prefixCls: prefixCls
}
}, React.createElement("div", Object.assign({
ref: ref,
id: id,
className: (0, _classnames.default)(prefixCls, "".concat(prefixCls, "-").concat(mergedTabPosition), (_classNames = {}, (0, _defineProperty2.default)(_classNames, "".concat(prefixCls, "-mobile"), mobile), (0, _defineProperty2.default)(_classNames, "".concat(prefixCls, "-editable"), editable), (0, _defineProperty2.default)(_classNames, "".concat(prefixCls, "-rtl"), rtl), _classNames), className)
}, restProps), tabNavBar, React.createElement(_TabPanelList.default, Object.assign({
destroyInactiveTabPane: destroyInactiveTabPane
}, sharedProps, {
animated: mergedAnimated
}))));
}
var ForwardTabs = React.forwardRef(Tabs);
ForwardTabs.TabPane = _TabPane.default;
var _default = ForwardTabs;
exports.default = _default;