@ -5,7 +5,7 @@ import { GrafanaTheme2, NavModelItem } from '@grafana/data';
import { MenuTriggerProps } from '@react-types/menu' ;
import { useMenuTriggerState } from '@react-stately/menu' ;
import { useMenuTrigger } from '@react-aria/menu' ;
import { useFocusVisible , useFocus Within , useHover , useKeyboard } from '@react-aria/interactions' ;
import { useFocusWithin , useHover , useKeyboard } from '@react-aria/interactions' ;
import { useButton } from '@react-aria/button' ;
import { DismissButton , useOverlay } from '@react-aria/overlays' ;
import { FocusScope } from '@react-aria/focus' ;
@ -29,12 +29,9 @@ export function NavBarItemMenuTrigger(props: NavBarItemMenuTriggerProps): ReactE
const state = useMenuTriggerState ( { . . . rest } ) ;
// Get props for the menu trigger and menu elements
const ref = React . useRef ( null ) ;
const ref = React . useRef < HTMLButtonElement > ( null ) ;
const { menuTriggerProps , menuProps } = useMenuTrigger ( { } , state , ref ) ;
// style to the focused menu item
let { isFocusVisible } = useFocusVisible ( { isTextInput : false } ) ;
const { hoverProps } = useHover ( {
onHoverChange : ( isHovering ) = > {
if ( isHovering ) {
@ -47,7 +44,7 @@ export function NavBarItemMenuTrigger(props: NavBarItemMenuTriggerProps): ReactE
const { focusWithinProps } = useFocusWithin ( {
onFocusWithinChange : ( isFocused ) = > {
if ( isFocused && isFocusVisible ) {
if ( isFocused ) {
state . open ( ) ;
}
if ( ! isFocused ) {
@ -132,7 +129,6 @@ export function NavBarItemMenuTrigger(props: NavBarItemMenuTriggerProps): ReactE
const { overlayProps } = useOverlay (
{
onClose : ( ) = > state . close ( ) ,
shouldCloseOnBlur : true ,
isOpen : state.isOpen ,
isDismissable : true ,
} ,
@ -143,7 +139,17 @@ export function NavBarItemMenuTrigger(props: NavBarItemMenuTriggerProps): ReactE
< div className = { cx ( styles . element , 'dropdown' ) } { ...focusWithinProps } { ...hoverProps } >
{ element }
{ state . isOpen && (
< NavBarItemMenuContext.Provider value = { { menuProps , menuHasFocus , onClose : ( ) = > state . close ( ) } } >
< NavBarItemMenuContext.Provider
value = { {
menuProps ,
menuHasFocus ,
onClose : ( ) = > state . close ( ) ,
onLeft : ( ) = > {
setMenuHasFocus ( false ) ;
ref . current ? . focus ( ) ;
} ,
} }
>
< FocusScope restoreFocus >
< div { ...overlayProps } ref = { overlayRef } >
< DismissButton onDismiss = { ( ) = > state . close ( ) } / >