UNPKG

@ant-design/pro-layout

Version:
161 lines (158 loc) 6.88 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.getVersion = exports.getBreadcrumbProps = exports.getBreadcrumbFromProps = exports.getBreadcrumb = exports.genBreadcrumbProps = void 0; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _proUtils = require("@ant-design/pro-utils"); var _antd = require("antd"); var _pathToRegexp = require("path-to-regexp"); var _pathTools = require("./pathTools"); var _jsxRuntime = require("react/jsx-runtime"); var getVersion = exports.getVersion = function getVersion() { var _process; if (typeof process === 'undefined') return _antd.version; return ((_process = process) === null || _process === void 0 || (_process = _process.env) === null || _process === void 0 ? void 0 : _process.ANTD_VERSION) || _antd.version; }; // 渲染 Breadcrumb 子节点 // Render the Breadcrumb child node var defaultItemRender = function defaultItemRender(route, _, routes) { var _ref = route, breadcrumbName = _ref.breadcrumbName, title = _ref.title, path = _ref.path; var last = routes.findIndex(function (i) { return ( // @ts-ignore i.linkPath === route.path ); }) === routes.length - 1; return last ? /*#__PURE__*/(0, _jsxRuntime.jsx)("span", { children: title || breadcrumbName }) : /*#__PURE__*/(0, _jsxRuntime.jsx)("span", { onClick: path ? function () { return location.href = path; } : undefined, children: title || breadcrumbName }); }; var renderItemLocal = function renderItemLocal(item, props) { var formatMessage = props.formatMessage, menu = props.menu; if (item.locale && formatMessage && (menu === null || menu === void 0 ? void 0 : menu.locale) !== false) { return formatMessage({ id: item.locale, defaultMessage: item.name }); } return item.name; }; var getBreadcrumb = exports.getBreadcrumb = function getBreadcrumb(breadcrumbMap, url) { var breadcrumbItem = breadcrumbMap.get(url); if (!breadcrumbItem) { // Find the first matching path in the order defined by route config // 按照 route config 定义的顺序找到第一个匹配的路径 var keys = Array.from(breadcrumbMap.keys()) || []; var targetPath = keys.find(function (path) { try { if (path !== null && path !== void 0 && path.startsWith('http')) return false; return (0, _pathToRegexp.match)(path.replace('?', ''))(url); } catch (error) { console.log('path', path, error); return false; } } // remove ? ,不然会重复 ); if (targetPath) breadcrumbItem = breadcrumbMap.get(targetPath); } return breadcrumbItem || { path: '' }; }; var getBreadcrumbFromProps = exports.getBreadcrumbFromProps = function getBreadcrumbFromProps(props) { var location = props.location, breadcrumbMap = props.breadcrumbMap; return { location: location, breadcrumbMap: breadcrumbMap }; }; var conversionFromLocation = function conversionFromLocation(routerLocation, breadcrumbMap, props) { // Convertor the url to an array var pathSnippets = (0, _pathTools.urlToList)(routerLocation === null || routerLocation === void 0 ? void 0 : routerLocation.pathname); // Loop data mosaic routing var extraBreadcrumbItems = pathSnippets.map(function (url) { var currentBreadcrumb = getBreadcrumb(breadcrumbMap, url); var name = renderItemLocal(currentBreadcrumb, props); var hideInBreadcrumb = currentBreadcrumb.hideInBreadcrumb; return name && !hideInBreadcrumb ? { linkPath: url, breadcrumbName: name, title: name, component: currentBreadcrumb.component } : { linkPath: '', breadcrumbName: '', title: '' }; }).filter(function (item) { return item && item.linkPath; }); return extraBreadcrumbItems; }; /** 将参数转化为面包屑 Convert parameters into breadcrumbs */ var genBreadcrumbProps = exports.genBreadcrumbProps = function genBreadcrumbProps(props) { var _getBreadcrumbFromPro = getBreadcrumbFromProps(props), location = _getBreadcrumbFromPro.location, breadcrumbMap = _getBreadcrumbFromPro.breadcrumbMap; // 根据 location 生成 面包屑 // Generate breadcrumbs based on location if (location && location.pathname && breadcrumbMap) { return conversionFromLocation(location, breadcrumbMap, props); } return []; }; // 声明一个导出函数,接收两个参数:BreadcrumbProps和ProLayoutProps,返回一个BreadcrumbListReturn类型的对象 var getBreadcrumbProps = exports.getBreadcrumbProps = function getBreadcrumbProps(props, layoutPros // ProLayoutProps类型的layoutPros ) { // 解构赋值获取props中的breadcrumbRender和props中的itemRender,如果props中没有itemRender则使用默认的defaultItemRender函数 var breadcrumbRender = props.breadcrumbRender, propsItemRender = props.itemRender; // 解构赋值获取layoutPros.breadcrumbProps.minLenght的值,如果没有设置,则默认为2 var _ref2 = layoutPros.breadcrumbProps || {}, _ref2$minLength = _ref2.minLength, minLength = _ref2$minLength === void 0 ? 2 : _ref2$minLength; // 生成面包屑的路由数组,该数组中包含菜单项和面包屑项 var routesArray = genBreadcrumbProps(props); // 如果props中有itemRender,则使用props中的itemRender,否则使用默认函数defaultItemRender var itemRender = function itemRender(item) { var renderFunction = propsItemRender || defaultItemRender; for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { rest[_key - 1] = arguments[_key]; } return renderFunction === null || renderFunction === void 0 ? void 0 : renderFunction.apply(void 0, [(0, _objectSpread2.default)((0, _objectSpread2.default)({}, item), {}, { // 如果item.linkPath存在,则使用item.linkPath,否则使用item.path // @ts-ignore path: item.linkPath || item.path })].concat(rest)); }; var items = routesArray; // 如果面包屑渲染函数breadcrumbRender存在,则使用其渲染数组items if (breadcrumbRender) { items = breadcrumbRender(items || []) || undefined; } // 如果items(渲染后的数组)的长度小于minLength或者breadcrumbRender为false,则items为undefined if (items && items.length < minLength || breadcrumbRender === false) { items = undefined; } // 如果当前 ant design 包的版本大于等于5.3.0,则返回一个对象{items,itemRender},否则返回一个对象{routes:item,itemRender} return (0, _proUtils.compareVersions)(getVersion(), '5.3.0') > -1 ? { items: items, itemRender: itemRender } : { routes: items, itemRender: itemRender }; };