UNPKG

acud

Version:

acg react 组件库

218 lines (216 loc) • 9.26 kB
"use strict"; 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;