mirror of https://github.com/grafana/grafana
Navigation: share logic between `buildBreadcrumbs` and `usePageTitle` (#58819)
* simplify usePageTitle logic a bit * use buildBreadcrumbs logic in usePageTitle * always add home item to navTree, fix some tests * fix remaining unit testspull/59158/head
parent
26a7423151
commit
824a562b03
@ -1,37 +1,23 @@ |
||||
import { useEffect } from 'react'; |
||||
|
||||
import { NavModel, NavModelItem } from '@grafana/data'; |
||||
import { HOME_NAV_ID } from 'app/core/reducers/navModel'; |
||||
import { useSelector } from 'app/types'; |
||||
|
||||
import { Branding } from '../Branding/Branding'; |
||||
import { buildBreadcrumbs } from '../Breadcrumbs/utils'; |
||||
|
||||
export function usePageTitle(navModel?: NavModel, pageNav?: NavModelItem) { |
||||
const homeNav = useSelector((state) => state.navIndex)[HOME_NAV_ID]; |
||||
useEffect(() => { |
||||
const parts: string[] = []; |
||||
if (pageNav) { |
||||
if (pageNav.children) { |
||||
const activePage = pageNav.children.find((x) => x.active); |
||||
if (activePage) { |
||||
addTitleSegment(parts, activePage); |
||||
} |
||||
} |
||||
addTitleSegment(parts, pageNav); |
||||
} |
||||
const sectionNav = (navModel?.node !== navModel?.main ? navModel?.node : navModel?.main) ?? { text: 'Grafana' }; |
||||
const parts: string[] = buildBreadcrumbs(sectionNav, pageNav, homeNav) |
||||
.map((crumb) => crumb.text) |
||||
.reverse(); |
||||
|
||||
if (navModel) { |
||||
if (navModel.node !== navModel.main) { |
||||
addTitleSegment(parts, navModel.node); |
||||
} |
||||
addTitleSegment(parts, navModel.main); |
||||
} |
||||
|
||||
parts.push(Branding.AppTitle); |
||||
// Override `Home` with the custom brand title
|
||||
parts[parts.length - 1] = Branding.AppTitle; |
||||
|
||||
document.title = parts.join(' - '); |
||||
}, [navModel, pageNav]); |
||||
} |
||||
|
||||
function addTitleSegment(parts: string[], node: NavModelItem) { |
||||
if (!node.hideFromBreadcrumbs) { |
||||
parts.push(node.text); |
||||
} |
||||
}, [homeNav, navModel, pageNav]); |
||||
} |
||||
|
||||
Loading…
Reference in new issue