From 8185b6fdf7b2f9bcef1f62dade4bb4087e23eba0 Mon Sep 17 00:00:00 2001 From: Ashley Harrison Date: Tue, 9 Aug 2022 11:46:27 +0100 Subject: [PATCH] refactor component to be more dumb, use LinkButton for icons and fix alignment (#53383) --- .../core/components/AppChrome/Breadcrumbs.tsx | 58 +++++++++++-------- .../core/components/AppChrome/NavToolbar.tsx | 6 +- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/public/app/core/components/AppChrome/Breadcrumbs.tsx b/public/app/core/components/AppChrome/Breadcrumbs.tsx index f77d3640ba0..7f64568c98f 100644 --- a/public/app/core/components/AppChrome/Breadcrumbs.tsx +++ b/public/app/core/components/AppChrome/Breadcrumbs.tsx @@ -2,11 +2,10 @@ import { css } from '@emotion/css'; import React from 'react'; import { GrafanaTheme2, NavModelItem } from '@grafana/data'; -import { useStyles2, Icon, IconName } from '@grafana/ui'; +import { useStyles2, Icon, IconName, LinkButton } from '@grafana/ui'; export interface Props { - sectionNav: NavModelItem; - pageNav?: NavModelItem; + breadcrumbs: Breadcrumb[]; } export interface Breadcrumb { @@ -15,8 +14,34 @@ export interface Breadcrumb { href?: string; } -export function Breadcrumbs({ sectionNav, pageNav }: Props) { +export function Breadcrumbs({ breadcrumbs }: Props) { const styles = useStyles2(getStyles); + + return ( + + ); +} + +export function buildBreadcrumbs(sectionNav: NavModelItem, pageNav?: NavModelItem) { const crumbs: Breadcrumb[] = [{ icon: 'home-alt', href: '/' }]; function addCrumbs(node: NavModelItem) { @@ -33,26 +58,7 @@ export function Breadcrumbs({ sectionNav, pageNav }: Props) { addCrumbs(pageNav); } - return ( - - ); + return crumbs; } const getStyles = (theme: GrafanaTheme2) => { @@ -69,10 +75,12 @@ const getStyles = (theme: GrafanaTheme2) => { }), separator: css({ color: theme.colors.text.secondary, - padding: theme.spacing(0, 0.5), }), breadcrumbLink: css({ + alignItems: 'center', color: theme.colors.text.primary, + display: 'flex', + padding: theme.spacing(0, 0.5), whiteSpace: 'nowrap', '&:hover': { textDecoration: 'underline', diff --git a/public/app/core/components/AppChrome/NavToolbar.tsx b/public/app/core/components/AppChrome/NavToolbar.tsx index 4ac72ae4a89..424a62fe92d 100644 --- a/public/app/core/components/AppChrome/NavToolbar.tsx +++ b/public/app/core/components/AppChrome/NavToolbar.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { GrafanaTheme2, NavModelItem } from '@grafana/data'; import { Icon, IconButton, ToolbarButton, useStyles2 } from '@grafana/ui'; -import { Breadcrumbs } from './Breadcrumbs'; +import { Breadcrumbs, buildBreadcrumbs } from './Breadcrumbs'; import { NavToolbarSeparator } from './NavToolbarSeparator'; import { TOP_BAR_LEVEL_HEIGHT } from './types'; @@ -26,13 +26,14 @@ export function NavToolbar({ onToggleSearchBar, }: Props) { const styles = useStyles2(getStyles); + const breadcrumbs = buildBreadcrumbs(sectionNav, pageNav); return (
- +
{actions} {actions && } @@ -56,7 +57,6 @@ const getStyles = (theme: GrafanaTheme2) => { menuButton: css({ display: 'flex', alignItems: 'center', - paddingRight: theme.spacing(1), }), actions: css({ display: 'flex',