| 
									
										
										
										
											2022-07-06 23:00:56 +08:00
										 |  |  | import { createSelector } from 'reselect'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import { NavModel } from '@grafana/data'; | 
					
						
							|  |  |  | import { getNavModel } from 'app/core/selectors/navModel'; | 
					
						
							|  |  |  | import { store } from 'app/store/store'; | 
					
						
							| 
									
										
										
										
											2022-09-19 17:49:35 +08:00
										 |  |  | import { StoreState, useSelector } from 'app/types'; | 
					
						
							| 
									
										
										
										
											2022-07-06 23:00:56 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export function usePageNav(navId?: string, oldProp?: NavModel): NavModel | undefined { | 
					
						
							|  |  |  |   if (oldProp) { | 
					
						
							|  |  |  |     return oldProp; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!navId) { | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Page component is used in so many tests, this simplifies not having to initialize a full redux store
 | 
					
						
							|  |  |  |   if (!store) { | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // eslint-disable-next-line react-hooks/rules-of-hooks
 | 
					
						
							|  |  |  |   return useSelector(createSelector(getNavIndex, (navIndex) => getNavModel(navIndex, navId ?? 'home'))); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function getNavIndex(store: StoreState) { | 
					
						
							|  |  |  |   return store.navIndex; | 
					
						
							|  |  |  | } |