grafana/public/app/core/components/Breadcrumbs/utils.ts
Torkel Ödegaard c9ce1a28c3
Breadcrumbs: Don't add breadcrumb for the current tab (#68230)
Breadcrumbs: Don't add breadcrumbs for the current tab
2023-05-11 15:16:42 +02:00

40 lines
1.1 KiB
TypeScript

import { NavModelItem } from '@grafana/data';
import { Breadcrumb } from './types';
export function buildBreadcrumbs(sectionNav: NavModelItem, pageNav?: NavModelItem, homeNav?: NavModelItem) {
const crumbs: Breadcrumb[] = [];
let foundHome = false;
function addCrumbs(node: NavModelItem) {
// construct the URL to match
// we want to ignore query params except for the editview query param
const urlSearchParams = new URLSearchParams(node.url?.split('?')[1]);
let urlToMatch = `${node.url?.split('?')[0]}`;
if (urlSearchParams.has('editview')) {
urlToMatch += `?editview=${urlSearchParams.get('editview')}`;
}
if (!foundHome && !node.hideFromBreadcrumbs) {
if (homeNav && urlToMatch === homeNav.url) {
crumbs.unshift({ text: homeNav.text, href: node.url ?? '' });
foundHome = true;
} else {
crumbs.unshift({ text: node.text, href: node.url ?? '' });
}
}
if (node.parentItem) {
addCrumbs(node.parentItem);
}
}
if (pageNav) {
addCrumbs(pageNav);
}
addCrumbs(sectionNav);
return crumbs;
}