import React, { FC } from 'react'; import { css } from 'emotion'; import { Tab, TabsBar, Icon, IconName, useStyles } from '@grafana/ui'; import { NavModel, NavModelItem, NavModelBreadcrumb, GrafanaTheme } from '@grafana/data'; import { PanelHeaderMenuItem } from 'app/features/dashboard/dashgrid/PanelHeader/PanelHeaderMenuItem'; export interface Props { model: NavModel; } const SelectNav = ({ children, customCss }: { children: NavModelItem[]; customCss: string }) => { if (!children || children.length === 0) { return null; } const defaultSelectedItem = children.find((navItem) => { return navItem.active === true; }); return (
{defaultSelectedItem?.text}
); }; const Navigation = ({ children }: { children: NavModelItem[] }) => { if (!children || children.length === 0) { return null; } return ( ); }; export const PageHeader: FC = ({ model }) => { const styles = useStyles(getStyles); if (!model) { return null; } const main = model.main; const children = main.children; return (
{renderHeaderTitle(main)} {children && children.length && {children}}
); }; function renderHeaderTitle(main: NavModelItem) { const marginTop = main.icon === 'grafana' ? 12 : 14; return (
{main.icon && } {main.img && {`logo}
{renderTitle(main.text, main.breadcrumbs ?? [])} {main.subTitle &&
{main.subTitle}
}
); } function renderTitle(title: string, breadcrumbs: NavModelBreadcrumb[]) { if (!title && (!breadcrumbs || breadcrumbs.length === 0)) { return null; } if (!breadcrumbs || breadcrumbs.length === 0) { return

{title}

; } const breadcrumbsResult = []; for (const bc of breadcrumbs) { if (bc.url) { breadcrumbsResult.push( {bc.title} ); } else { breadcrumbsResult.push( / {bc.title}); } } breadcrumbsResult.push( / {title}); return

{breadcrumbsResult}

; } const getStyles = (theme: GrafanaTheme) => ({ headerCanvas: css` background: ${theme.colors.bg2}; border-bottom: 1px solid ${theme.colors.border1}; `, }); export default PageHeader;