import { css } from '@emotion/css'; import React from 'react'; import { GrafanaTheme2, PageLayoutType } from '@grafana/data'; import { locationService } from '@grafana/runtime'; import { SceneComponentProps } from '@grafana/scenes'; import { Button, CustomScrollbar, useStyles2 } from '@grafana/ui'; import { AppChromeUpdate } from 'app/core/components/AppChrome/AppChromeUpdate'; import { NavToolbarSeparator } from 'app/core/components/AppChrome/NavToolbar/NavToolbarSeparator'; import { Page } from 'app/core/components/Page/Page'; import { DashNavButton } from 'app/features/dashboard/components/DashNav/DashNavButton'; import { DashboardScene } from './DashboardScene'; export function DashboardSceneRenderer({ model }: SceneComponentProps) { const { title, body, actions = [], controls, isEditing, isDirty, uid } = model.useState(); const styles = useStyles2(getStyles); const toolbarActions = (actions ?? []).map((action) => ); if (uid) { toolbarActions.push( locationService.push(`/d/${uid}`)} /> ); } toolbarActions.push(); if (!isEditing) { // TODO check permissions toolbarActions.push( ); } else { // TODO check permissions toolbarActions.push( ); toolbarActions.push( ); toolbarActions.push( ); } return (
{controls && (
{controls.map((control) => ( ))}
)}
); } 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({ flexGrow: 1, display: 'flex', gap: '8px', }), controls: css({ display: 'flex', flexWrap: 'wrap', alignItems: 'center', gap: theme.spacing(1), position: 'sticky', top: 0, background: theme.colors.background.canvas, zIndex: 1, padding: theme.spacing(2, 0), }), }; }