// Libraries import React, { FC, HTMLAttributes, useEffect } from 'react'; import { getTitleFromNavModel } from 'app/core/selectors/navModel'; // Components import PageHeader from '../PageHeader/PageHeader'; import { Footer } from '../Footer/Footer'; import { PageContents } from './PageContents'; import { CustomScrollbar, useStyles } from '@grafana/ui'; import { GrafanaTheme, NavModel } from '@grafana/data'; import { Branding } from '../Branding/Branding'; import { css } from 'emotion'; interface Props extends HTMLAttributes { children: React.ReactNode; navModel: NavModel; } export interface PageType extends FC { Header: typeof PageHeader; Contents: typeof PageContents; } export const Page: PageType = ({ navModel, children, ...otherProps }) => { const styles = useStyles(getStyles); useEffect(() => { const title = getTitleFromNavModel(navModel); document.title = title ? `${title} - ${Branding.AppTitle}` : Branding.AppTitle; }, [navModel]); return (
{children}
); }; Page.Header = PageHeader; Page.Contents = PageContents; export default Page; const getStyles = (theme: GrafanaTheme) => ({ wrapper: css` position: absolute; top: 0; bottom: 0; width: 100%; background: ${theme.colors.bg1}; `, });