Files
copilot-toolbox-sdfdsfds/node_modules/@ant-design/pro-layout/lib/utils/getBreadcrumbProps.js
2026-01-16 01:51:36 +00:00

161 lines
6.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"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
};
};