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}
{children.map((navItem: NavModelItem) => {
if (navItem.hideFromTabs) {
// TODO: Rename hideFromTabs => hideFromNav
return null;
}
return (
);
})}
);
};
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 &&
}
{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;