@ -1,10 +1,11 @@
import { css } from '@emotion/css' ;
import React from 'react' ;
import React , { useState } from 'react' ;
import { GrafanaTheme2 , NavModelItem } from '@grafana/data' ;
import { Components } from '@grafana/e2e-selectors' ;
import { Icon , IconButton , ToolbarButton , useStyles2 } from '@grafana/ui' ;
import { Icon , IconButton , ToolbarButton , useStyles2 , useTheme2 } from '@grafana/ui' ;
import { useGrafana } from 'app/core/context/GrafanaContext' ;
import { useMediaQueryChange } from 'app/core/hooks/useMediaQueryChange' ;
import { t } from 'app/core/internationalization' ;
import { HOME_NAV_ID } from 'app/core/reducers/navModel' ;
import { useSelector } from 'app/types' ;
@ -39,9 +40,22 @@ export function NavToolbar({
const { chrome } = useGrafana ( ) ;
const state = chrome . useState ( ) ;
const homeNav = useSelector ( ( state ) = > state . navIndex ) [ HOME_NAV_ID ] ;
const theme = useTheme2 ( ) ;
const styles = useStyles2 ( getStyles ) ;
const breadcrumbs = buildBreadcrumbs ( sectionNav , pageNav , homeNav ) ;
const dockMenuBreakpoint = theme . breakpoints . values . xl ;
const [ isTooSmallForDockedMenu , setIsTooSmallForDockedMenu ] = useState (
! window . matchMedia ( ` (min-width: ${ dockMenuBreakpoint } px) ` ) . matches
) ;
useMediaQueryChange ( {
breakpoint : dockMenuBreakpoint ,
onChange : ( e ) = > {
setIsTooSmallForDockedMenu ( ! e . matches ) ;
} ,
} ) ;
return (
< div data - testid = { Components . NavToolbar . container } className = { styles . pageToolbar } >
< div className = { styles . menuButton } >
@ -49,7 +63,7 @@ export function NavToolbar({
id = { TOGGLE_BUTTON_ID }
name = "bars"
tooltip = {
state . megaMenu === 'closed'
state . megaMenu === 'closed' || ( state . megaMenu === 'docked' && isTooSmallForDockedMenu )
? t ( 'navigation.toolbar.open-menu' , 'Open menu' )
: t ( 'navigation.toolbar.close-menu' , 'Close menu' )
}