UNPKG

@antdp/layout-tabs

Version:

用于主框架选项卡组件。

166 lines (165 loc) 6.1 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"]; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _max = require("@umijs/max"); var _antd = require("antd"); var _reactRouterDom = require("react-router-dom"); var _Iframe = _interopRequireDefault(require("./Iframe")); var _RenderContent = _interopRequireDefault(require("./RenderContent")); var _jsxRuntime = require("react/jsx-runtime"); // @ts-ignore var _default = exports["default"] = function _default(props) { var _props$dataSource = props.dataSource, dataSource = _props$dataSource === void 0 ? [] : _props$dataSource, _props$bodyPadding = props.bodyPadding, bodyPadding = _props$bodyPadding === void 0 ? '' : _props$bodyPadding; var location = (0, _reactRouterDom.useLocation)(); var _useState = (0, _react.useState)([]), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), tabAll = _useState2[0], setTabAll = _useState2[1]; var match = (0, _reactRouterDom.matchPath)(location.pathname, location.pathname); (0, _react.useEffect)(function () { var urlData = null; dataSource.forEach(function (item) { var match = (0, _reactRouterDom.matchPath)(item.path, location.pathname); if (match) { urlData = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, item), {}, { path: location.pathname, match: match }); } }); if (location.search && urlData) { urlData.location = location; } var findActiveTab = tabAll.find(function (item) { return item.path === location.pathname; }); if (tabAll.length === 0 || !findActiveTab) { if (urlData) { setTabAll([].concat((0, _toConsumableArray2["default"])(tabAll), [urlData])); } } else if (findActiveTab && findActiveTab.location && findActiveTab.location.search !== location.search) { var updataTabs = (0, _toConsumableArray2["default"])(tabAll).map(function (item) { if (item.path === location.pathname) { item.location = location; } return item; }); setTabAll((0, _toConsumableArray2["default"])(updataTabs)); } }, [location.pathname]); (0, _react.useMemo)(function () { var tabData = (0, _toConsumableArray2["default"])(tabAll).map(function (item) { var match = (0, _reactRouterDom.matchPath)(location.pathname, item); if (match) { item.location = location; } return item; }); setTabAll((0, _toConsumableArray2["default"])(tabData)); }, [location.search]); var renderOutlet = function renderOutlet() { if (ANTD_IS_IFRAME_RENDER) { var _ref = tabAll.find(function (item) { return item.path === location.pathname; }) || {}, element = _ref.element; var Comp = element || /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Result, { status: "404", title: "404", subTitle: "\u62B1\u6B49\uFF0C\u4F60\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728" }); return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Iframe["default"], { bodyPadding: bodyPadding, isShowView: !!match, match: match, child: Comp }, location.pathname); } if (ANTD_IS_TABS) { return /*#__PURE__*/(0, _jsxRuntime.jsx)(_RenderContent["default"], { bodyPadding: bodyPadding, isShowView: !!match }); } if (!!match) { return /*#__PURE__*/(0, _jsxRuntime.jsx)(_RenderContent["default"], { bodyPadding: bodyPadding, isShowView: true }); } return null; }; return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_react.Fragment, { children: [ANTD_IS_TABS && /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Tabs, { type: "editable-card", className: "antdps-global-tabs", hideAdd: true, activeKey: location.pathname, onTabClick: function onTabClick(targetKey) { var opts = { pathname: targetKey, query: null, state: '' }; var tab = tabAll.find(function (item) { return item.path === targetKey; }); if (tab && tab.location) { opts.query = tab.location.query; opts.state = tab.location.state; } else if (targetKey === location.pathname) { opts.query = location.query; opts.state = location.state; } _max.history.push(opts); }, onEdit: function onEdit(targetKey, action) { var index = 0; var dataKeys = tabAll.filter(function (item, idx) { if (item.path === targetKey) { index = idx; } return item.path !== targetKey; }); if (location.pathname === targetKey) { var opts = { exact: true, pathname: null, query: null, state: null }; if (dataKeys && dataKeys.length > 0) { var tab = dataKeys[index === 0 ? 0 : index - 1]; opts.pathname = tab.path; if (tab && tab.location) { opts.query = tab.location.query; opts.state = tab.location.state; } _max.history.push(opts); } } setTabAll((0, _toConsumableArray2["default"])(dataKeys)); }, items: tabAll.map(function (pane) { return { label: pane.name, tab: pane.name, key: pane.path, closable: tabAll.length !== 1 }; }) }), renderOutlet()] }); }; module.exports = exports.default;