grafana/public/app/core/components/Page/usePageNav.ts
Torkel Ödegaard 1e85a6f4fd
TopNav: New page layouts (#51510)
* First stab at new page layouts behind feature toggle

* Simplifying PageHeader

* Progress on a new model that can more easily support new and old page layouts

* Progress

* rename folder

* Progress

* Minor change

* fixes

* Fixing tests

* Make breadcrumbs work

* Add tests for old Page component

* Adding tests for new Page component and behavior

* fixing page header test

* Fixed test

* AppChrome outside route

* Renaming folder

* Minor fix

* Updated

* Fixing StoragePage

* Fix for banners

Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
2022-07-06 17:00:56 +02:00

30 lines
805 B
TypeScript

import { useSelector } from 'react-redux';
import { createSelector } from 'reselect';
import { NavModel } from '@grafana/data';
import { getNavModel } from 'app/core/selectors/navModel';
import { store } from 'app/store/store';
import { StoreState } from 'app/types';
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;
}