mirror of https://github.com/grafana/grafana.git
				
				
				
			Breadcrumbs: Only dedupe the lowest child node of `sectionNav` (#78279)
only dedupe sectionNav leaf node
This commit is contained in:
		
							parent
							
								
									4290ed3d86
								
							
						
					
					
						commit
						b5d1c8874b
					
				|  | @ -141,28 +141,5 @@ describe('breadcrumb utils', () => { | |||
|         { text: 'My page', href: '/my-page' }, | ||||
|       ]); | ||||
|     }); | ||||
| 
 | ||||
|     it('does not ignore duplicates with different text', () => { | ||||
|       const pageNav: NavModelItem = { | ||||
|         text: 'My page', | ||||
|         url: '/my-page', | ||||
|         parentItem: { | ||||
|           text: 'Another section', | ||||
|           // same url as section nav, but this one should win/overwrite it
 | ||||
|           url: '/my-section?from=1h&to=now', | ||||
|         }, | ||||
|       }; | ||||
| 
 | ||||
|       const sectionNav: NavModelItem = { | ||||
|         text: 'My section', | ||||
|         url: '/my-section', | ||||
|       }; | ||||
| 
 | ||||
|       expect(buildBreadcrumbs(sectionNav, pageNav, mockHomeNav)).toEqual([ | ||||
|         { text: 'My section', href: '/my-section' }, | ||||
|         { text: 'Another section', href: '/my-section?from=1h&to=now' }, | ||||
|         { text: 'My page', href: '/my-page' }, | ||||
|       ]); | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
|  |  | |||
|  | @ -7,9 +7,8 @@ export function buildBreadcrumbs(sectionNav: NavModelItem, pageNav?: NavModelIte | |||
|   const crumbs: Breadcrumb[] = []; | ||||
|   let foundHome = false; | ||||
|   let lastPath: string | undefined = undefined; | ||||
|   let lastText: string | undefined = undefined; | ||||
| 
 | ||||
|   function addCrumbs(node: NavModelItem) { | ||||
|   function addCrumbs(node: NavModelItem, shouldDedupe = false) { | ||||
|     if (foundHome) { | ||||
|       return; | ||||
|     } | ||||
|  | @ -32,16 +31,14 @@ export function buildBreadcrumbs(sectionNav: NavModelItem, pageNav?: NavModelIte | |||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     // This enabled app plugins to control breadcrumbs of their root pages
 | ||||
|     const isSamePathAsLastBreadcrumb = urlToMatch.length > 0 && lastPath === urlToMatch; | ||||
|     const isSameTextAsLastBreadcrumb = node.text === lastText; | ||||
| 
 | ||||
|     // Remember this path for the next breadcrumb
 | ||||
|     lastPath = urlToMatch; | ||||
|     lastText = node.text; | ||||
| 
 | ||||
|     const shouldMergeBreadcrumb = isSamePathAsLastBreadcrumb && isSameTextAsLastBreadcrumb; | ||||
|     if (!node.hideFromBreadcrumbs && !shouldMergeBreadcrumb) { | ||||
|     const shouldAddCrumb = !node.hideFromBreadcrumbs && !(shouldDedupe && isSamePathAsLastBreadcrumb); | ||||
| 
 | ||||
|     if (shouldAddCrumb) { | ||||
|       crumbs.unshift({ text: node.text, href: node.url ?? '' }); | ||||
|     } | ||||
| 
 | ||||
|  | @ -54,7 +51,8 @@ export function buildBreadcrumbs(sectionNav: NavModelItem, pageNav?: NavModelIte | |||
|     addCrumbs(pageNav); | ||||
|   } | ||||
| 
 | ||||
|   addCrumbs(sectionNav); | ||||
|   // shouldDedupe = true enables app plugins to control breadcrumbs of their root pages
 | ||||
|   addCrumbs(sectionNav, true); | ||||
| 
 | ||||
|   return crumbs; | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue