// 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, useStyles2 } from '@grafana/ui';
import { GrafanaTheme2, NavModel } from '@grafana/data';
import { Branding } from '../Branding/Branding';
import { css, cx } from '@emotion/css';
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, className, ...otherProps }) => {
const styles = useStyles2(getStyles);
useEffect(() => {
if (navModel) {
const title = getTitleFromNavModel(navModel);
document.title = title ? `${title} - ${Branding.AppTitle}` : Branding.AppTitle;
} else {
document.title = Branding.AppTitle;
}
}, [navModel]);
return (
{navModel &&
}
{children}
);
};
Page.Header = PageHeader;
Page.Contents = PageContents;
export default Page;
const getStyles = (theme: GrafanaTheme2) => ({
wrapper: css`
bottom: 0;
position: absolute;
top: 0;
width: 100%;
`,
});