import { css, cx } from '@emotion/css'; import React from 'react'; import { useLocation } from 'react-router-dom'; import { GrafanaTheme2, PageLayoutType } from '@grafana/data'; import { SceneComponentProps, SceneDebugger } from '@grafana/scenes'; import { CustomScrollbar, useStyles2 } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; import { getNavModel } from 'app/core/selectors/navModel'; import { useSelector } from 'app/types'; import { DashboardScene } from './DashboardScene'; import { NavToolbarActions } from './NavToolbarActions'; export function DashboardSceneRenderer({ model }: SceneComponentProps) { const { controls, viewPanelKey, overlay, editview } = model.useState(); const styles = useStyles2(getStyles); const location = useLocation(); const navIndex = useSelector((state) => state.navIndex); const pageNav = model.getPageNav(location, navIndex); const bodyToRender = model.getBodyToRender(viewPanelKey); const navModel = getNavModel(navIndex, 'dashboards/browse'); if (editview) { return ; } return (
{controls && (
{controls.map((control) => ( ))}
)}
{overlay && }
); } function getStyles(theme: GrafanaTheme2) { return { canvasContent: css({ label: 'canvas-content', display: 'flex', flexDirection: 'column', padding: theme.spacing(0, 2), flexBasis: '100%', flexGrow: 1, }), body: css({ label: 'body', flexGrow: 1, display: 'flex', gap: '8px', marginBottom: theme.spacing(2), }), controls: css({ display: 'flex', flexWrap: 'wrap', alignItems: 'center', gap: theme.spacing(1), position: 'sticky', top: 0, background: theme.colors.background.canvas, zIndex: theme.zIndex.navbarFixed, padding: theme.spacing(2, 0), }), }; }