|
|
@@ -6,23 +6,23 @@ import styles from './index.less';
|
|
|
|
|
|
const { TabPane } = Tabs;
|
|
|
|
|
|
-function getBreadcrumbName(breadcrumbNameMap, url) {
|
|
|
- if (breadcrumbNameMap[url] && breadcrumbNameMap[url].name) {
|
|
|
- return breadcrumbNameMap[url].name;
|
|
|
+function getBreadcrumb(breadcrumbNameMap, url) {
|
|
|
+ if (breadcrumbNameMap[url]) {
|
|
|
+ return breadcrumbNameMap[url];
|
|
|
}
|
|
|
const urlWithoutSplash = url.replace(/\/$/, '');
|
|
|
- if (breadcrumbNameMap[urlWithoutSplash] && breadcrumbNameMap[urlWithoutSplash].name) {
|
|
|
- return breadcrumbNameMap[urlWithoutSplash].name;
|
|
|
+ if (breadcrumbNameMap[urlWithoutSplash]) {
|
|
|
+ return breadcrumbNameMap[urlWithoutSplash];
|
|
|
}
|
|
|
- let breadcrumbName = '';
|
|
|
+ let breadcrumb = '';
|
|
|
Object.keys(breadcrumbNameMap).forEach((item) => {
|
|
|
const itemRegExpStr = `^${item.replace(/:[\w-]+/g, '[\\w-]+')}$`;
|
|
|
const itemRegExp = new RegExp(itemRegExpStr);
|
|
|
if (itemRegExp.test(url)) {
|
|
|
- breadcrumbName = breadcrumbNameMap[item].name;
|
|
|
+ breadcrumb = breadcrumbNameMap[item];
|
|
|
}
|
|
|
});
|
|
|
- return breadcrumbName || url;
|
|
|
+ return breadcrumb;
|
|
|
}
|
|
|
|
|
|
export default class PageHeader extends PureComponent {
|
|
|
@@ -76,12 +76,14 @@ export default class PageHeader extends PureComponent {
|
|
|
const pathSnippets = location.pathname.split('/').filter(i => i);
|
|
|
const extraBreadcrumbItems = pathSnippets.map((_, index) => {
|
|
|
const url = `/${pathSnippets.slice(0, index + 1).join('/')}`;
|
|
|
+ const currentBreadcrumb = getBreadcrumb(breadcrumbNameMap, url);
|
|
|
+ const isLinkable = (index !== pathSnippets.length - 1) && currentBreadcrumb.component;
|
|
|
return (
|
|
|
<Breadcrumb.Item key={url}>
|
|
|
{createElement(
|
|
|
- (index === pathSnippets.length - 1) ? 'span' : linkElement,
|
|
|
+ isLinkable ? linkElement : 'span',
|
|
|
{ [linkElement === 'a' ? 'href' : 'to']: url },
|
|
|
- getBreadcrumbName(breadcrumbNameMap, url),
|
|
|
+ currentBreadcrumb.name || url,
|
|
|
)}
|
|
|
</Breadcrumb.Item>
|
|
|
);
|