UNPKG

4.32 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.getBreadcrumbProps = exports.getBreadcrumbFromProps = exports.getBreadcrumb = exports.genBreadcrumbProps = void 0;
9
10var _react = _interopRequireDefault(require("react"));
11
12var _pathToRegexp = _interopRequireDefault(require("path-to-regexp"));
13
14var _pathTools = require("./pathTools");
15
16// 渲染Breadcrumb 子节点
17// Render the Breadcrumb child node
18var defaultItemRender = function defaultItemRender(_ref) {
19 var breadcrumbName = _ref.breadcrumbName,
20 path = _ref.path;
21 return /*#__PURE__*/_react.default.createElement("a", {
22 href: path
23 }, breadcrumbName);
24};
25
26var renderItemLocal = function renderItemLocal(item, props) {
27 var formatMessage = props.formatMessage,
28 menu = props.menu;
29
30 if (item.locale && formatMessage && (menu === null || menu === void 0 ? void 0 : menu.locale) !== false) {
31 return formatMessage({
32 id: item.locale,
33 defaultMessage: item.name
34 });
35 }
36
37 return item.name;
38};
39
40var getBreadcrumb = function getBreadcrumb(breadcrumbMap, url) {
41 var breadcrumbItem = breadcrumbMap.get(url);
42
43 if (!breadcrumbItem) {
44 // Find the first matching path in the order defined by route config
45 // 按照 route config 定义的顺序找到第一个匹配的路径
46 var keys = Array.from(breadcrumbMap.keys()) || [];
47 var targetPath = keys.find(function (path) {
48 return (// remove ? ,不然会重复
49 (0, _pathToRegexp.default)(path.replace('?', '')).test(url)
50 );
51 });
52 if (targetPath) breadcrumbItem = breadcrumbMap.get(targetPath);
53 }
54
55 return breadcrumbItem || {
56 path: ''
57 };
58};
59
60exports.getBreadcrumb = getBreadcrumb;
61
62var getBreadcrumbFromProps = function getBreadcrumbFromProps(props) {
63 var location = props.location,
64 breadcrumbMap = props.breadcrumbMap;
65 return {
66 location: location,
67 breadcrumbMap: breadcrumbMap
68 };
69};
70
71exports.getBreadcrumbFromProps = getBreadcrumbFromProps;
72
73var conversionFromLocation = function conversionFromLocation(routerLocation, breadcrumbMap, props) {
74 // Convertor the url to an array
75 var pathSnippets = (0, _pathTools.urlToList)(routerLocation === null || routerLocation === void 0 ? void 0 : routerLocation.pathname); // Loop data mosaic routing
76
77 var extraBreadcrumbItems = pathSnippets.map(function (url) {
78 var currentBreadcrumb = getBreadcrumb(breadcrumbMap, url);
79 var name = renderItemLocal(currentBreadcrumb, props);
80 var hideInBreadcrumb = currentBreadcrumb.hideInBreadcrumb;
81 return name && !hideInBreadcrumb ? {
82 path: url,
83 breadcrumbName: name,
84 component: currentBreadcrumb.component
85 } : {
86 path: '',
87 breadcrumbName: ''
88 };
89 }).filter(function (item) {
90 return item && item.path;
91 });
92 return extraBreadcrumbItems;
93};
94/** 将参数转化为面包屑 Convert parameters into breadcrumbs */
95
96
97var genBreadcrumbProps = function genBreadcrumbProps(props) {
98 var _getBreadcrumbFromPro = getBreadcrumbFromProps(props),
99 location = _getBreadcrumbFromPro.location,
100 breadcrumbMap = _getBreadcrumbFromPro.breadcrumbMap; // 根据 location 生成 面包屑
101 // Generate breadcrumbs based on location
102
103
104 if (location && location.pathname && breadcrumbMap) {
105 return conversionFromLocation(location, breadcrumbMap, props);
106 }
107
108 return [];
109}; // use breadcrumbRender to change routes
110
111
112exports.genBreadcrumbProps = genBreadcrumbProps;
113
114var getBreadcrumbProps = function getBreadcrumbProps(props, layoutPros) {
115 var breadcrumbRender = props.breadcrumbRender,
116 propsItemRender = props.itemRender;
117
118 var _ref2 = layoutPros.breadcrumbProps || {},
119 _ref2$minLength = _ref2.minLength,
120 minLength = _ref2$minLength === void 0 ? 2 : _ref2$minLength;
121
122 var routesArray = genBreadcrumbProps(props);
123 var itemRender = propsItemRender || defaultItemRender;
124 var routes = routesArray; // if routes.length =1, don't show it
125
126 if (breadcrumbRender) {
127 routes = breadcrumbRender(routes) || [];
128 }
129
130 if (routes && routes.length < minLength || breadcrumbRender === false) {
131 routes = undefined;
132 }
133
134 return {
135 routes: routes,
136 itemRender: itemRender
137 };
138};
139
140exports.getBreadcrumbProps = getBreadcrumbProps;
\No newline at end of file