import { css, cx } from '@emotion/css'; import { useLayoutEffect } from 'react'; import { GrafanaTheme2, PageLayoutType } from '@grafana/data'; import { useStyles2 } from '@grafana/ui'; import { useGrafana } from 'app/core/context/GrafanaContext'; import NativeScrollbar from '../NativeScrollbar'; import { PageContents } from './PageContents'; import { PageHeader } from './PageHeader'; import { PageTabs } from './PageTabs'; import { PageType } from './types'; import { usePageNav } from './usePageNav'; import { usePageTitle } from './usePageTitle'; export const Page: PageType = ({ navId, navModel: oldNavProp, pageNav, renderTitle, onEditTitle, actions, subTitle, children, className, info, layout = PageLayoutType.Standard, onSetScrollRef, ...otherProps }) => { const styles = useStyles2(getStyles); const navModel = usePageNav(navId, oldNavProp); const { chrome } = useGrafana(); usePageTitle(navModel, pageNav); const pageHeaderNav = pageNav ?? navModel?.node; // We use useLayoutEffect here to make sure that the chrome is updated before the page is rendered // This prevents flickering sectionNav when going from dashboard to settings for example useLayoutEffect(() => { if (navModel) { chrome.update({ sectionNav: navModel, pageNav: pageNav, layout: layout, }); } }, [navModel, pageNav, chrome, layout]); return (