@antdp/layout-tabs
Version:
用于主框架选项卡组件。
166 lines (165 loc) • 6.1 kB
JavaScript
;
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;