import { useEffect, useMemo } from 'react'; import { useLocation, useParams } from 'react-router-dom-v5-compat'; import { PageLayoutType } from '@grafana/data'; import { SceneComponentProps } from '@grafana/scenes'; import { Page } from 'app/core/components/Page/Page'; import { getNavModel } from 'app/core/selectors/navModel'; import { useSelector } from 'app/types'; import { DashboardEditPaneSplitter } from '../edit-pane/DashboardEditPaneSplitter'; import { DashboardScene } from './DashboardScene'; import { PanelSearchLayout } from './PanelSearchLayout'; import { DashboardAngularDeprecationBanner } from './angular/DashboardAngularDeprecationBanner'; export function DashboardSceneRenderer({ model }: SceneComponentProps) { const { controls, overlay, editview, editPanel, viewPanelScene, panelSearch, panelsPerRow, isEditing } = model.useState(); const { type } = useParams(); const location = useLocation(); const navIndex = useSelector((state) => state.navIndex); const pageNav = model.getPageNav(location, navIndex); const bodyToRender = model.getBodyToRender(); const navModel = getNavModel(navIndex, `dashboards/${type === 'snapshot' ? 'snapshots' : 'browse'}`); const isSettingsOpen = editview !== undefined; // Remember scroll pos when going into view panel, edit panel or settings useMemo(() => { if (viewPanelScene || isSettingsOpen || editPanel) { model.rememberScrollPos(); } }, [isSettingsOpen, editPanel, viewPanelScene, model]); // Restore scroll pos when coming back useEffect(() => { if (!viewPanelScene && !isSettingsOpen && !editPanel) { model.restoreScrollPos(); } }, [isSettingsOpen, editPanel, viewPanelScene, model]); if (editview) { return ( <> {overlay && } ); } function renderBody() { if (panelSearch || panelsPerRow) { return ; } return ( <> ); } return ( {editPanel && } {!editPanel && ( } body={renderBody()} /> )} {overlay && } ); }