acud
Version:
acg react 组件库
218 lines (216 loc) • 9.26 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof3 = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _react = _interopRequireWildcard(require("react"));
var React = _react;
var _classnames = _interopRequireDefault(require("classnames"));
var _toArray = _interopRequireDefault(require("rc-util/lib/Children/toArray"));
var _isMobile = _interopRequireDefault(require("rc-util/lib/isMobile"));
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"));
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
var __rest = void 0 && (void 0).__rest || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
}
return t;
};
// Accessibility https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/Tab_Role
/**
* 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 (/*#__PURE__*/React.isValidElement(node)) {
var key = node.key !== undefined ? String(node.key) : undefined;
return (0, _extends2["default"])((0, _extends2["default"])({
key: key
}, node.props), {
node: node
});
}
return null;
}).filter(function (tab) {
return tab;
});
}
function Tabs(_a, ref) {
var id = _a.id,
_a$prefixCls = _a.prefixCls,
prefixCls = _a$prefixCls === void 0 ? 'rc-tabs' : _a$prefixCls,
className = _a.className,
children = _a.children,
direction = _a.direction,
activeKey = _a.activeKey,
defaultActiveKey = _a.defaultActiveKey,
editable = _a.editable,
_a$animated = _a.animated,
animated = _a$animated === void 0 ? {
inkBar: true,
tabPane: false
} : _a$animated,
_a$tabPosition = _a.tabPosition,
tabPosition = _a$tabPosition === void 0 ? 'top' : _a$tabPosition,
tabBarGutter = _a.tabBarGutter,
tabBarStyle = _a.tabBarStyle,
tabBarExtraContent = _a.tabBarExtraContent,
locale = _a.locale,
moreTransitionName = _a.moreTransitionName,
destroyInactiveTabPane = _a.destroyInactiveTabPane,
renderTabBar = _a.renderTabBar,
onChange = _a.onChange,
onTabClick = _a.onTabClick,
onTabScroll = _a.onTabScroll,
onEditTabNav = _a.onEditTabNav,
restProps = __rest(_a, ["id", "prefixCls", "className", "children", "direction", "activeKey", "defaultActiveKey", "editable", "animated", "tabPosition", "tabBarGutter", "tabBarStyle", "tabBarExtraContent", "locale", "moreTransitionName", "destroyInactiveTabPane", "renderTabBar", "onChange", "onTabClick", "onTabScroll", "onEditTabNav"]);
var tabs = parseTabList(children);
var rtl = direction === 'rtl';
var mergedAnimated;
if (animated === false) {
mergedAnimated = {
inkBar: false,
tabPane: false
};
} else if (animated === true) {
mergedAnimated = {
inkBar: true,
tabPane: true
};
} else {
mergedAnimated = (0, _extends2["default"])({
inkBar: true,
tabPane: false
}, (0, _typeof2["default"])(animated) === 'object' ? animated : {});
}
// ======================== 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, _isMobile["default"])());
}, []);
// ====================== Active Key ======================
var _useMergedState = (0, _useMergedState5["default"])(function () {
var _a;
return (_a = tabs[0]) === null || _a === void 0 ? void 0 : _a.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 _a;
var newActiveIndex = tabs.findIndex(function (tab) {
return tab.key === mergedActiveKey;
});
if (newActiveIndex === -1) {
newActiveIndex = Math.max(0, Math.min(activeIndex, tabs.length - 1));
setMergedActiveKey((_a = tabs[newActiveIndex]) === null || _a === void 0 ? void 0 : _a.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 = (0, _extends2["default"])((0, _extends2["default"])({}, sharedProps), {
editable: editable,
locale: locale,
moreTransitionName: moreTransitionName,
tabBarGutter: tabBarGutter,
onTabClick: onInternalTabClick,
onTabScroll: onTabScroll,
onEditTabNav: onEditTabNav,
extra: tabBarExtraContent,
style: tabBarStyle,
panes: children
});
if (renderTabBar) {
tabNavBar = renderTabBar(tabNavBarProps, _TabNavList["default"]);
} else {
tabNavBar = /*#__PURE__*/React.createElement(_TabNavList["default"], tabNavBarProps);
}
return /*#__PURE__*/React.createElement(_TabContext["default"].Provider, {
value: {
tabs: tabs,
prefixCls: prefixCls
}
}, /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({
ref: ref,
id: id,
className: (0, _classnames["default"])(prefixCls, "".concat(prefixCls, "-").concat(mergedTabPosition), (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, "".concat(prefixCls, "-mobile"), mobile), "".concat(prefixCls, "-editable"), editable), "".concat(prefixCls, "-rtl"), rtl), className)
}, restProps), tabNavBar, /*#__PURE__*/React.createElement(_TabPanelList["default"], (0, _extends2["default"])({
destroyInactiveTabPane: destroyInactiveTabPane
}, sharedProps, {
animated: mergedAnimated
}))));
}
var ForwardTabs = /*#__PURE__*/React.forwardRef(Tabs);
ForwardTabs.TabPane = _TabPane["default"];
var _default = exports["default"] = ForwardTabs;