diff --git a/public/app/core/components/NavBar/Next/NavBarItemMenu.tsx b/public/app/core/components/NavBar/Next/NavBarItemMenu.tsx index 9b9695a8f97..6b902ea6f03 100644 --- a/public/app/core/components/NavBar/Next/NavBarItemMenu.tsx +++ b/public/app/core/components/NavBar/Next/NavBarItemMenu.tsx @@ -78,14 +78,11 @@ function getStyles(theme: GrafanaTheme2, reverseDirection?: boolean) { menu: css` background-color: ${theme.colors.background.primary}; border: 1px solid ${theme.components.panel.borderColor}; - bottom: ${reverseDirection ? 0 : 'auto'}; box-shadow: ${theme.shadows.z3}; display: flex; flex-direction: column; - left: 100%; list-style: none; min-width: 140px; - top: ${reverseDirection ? 'auto' : 0}; transition: ${theme.transitions.create('opacity')}; z-index: ${theme.zIndex.sidemenu}; `, diff --git a/public/app/core/components/NavBar/Next/NavBarItemMenuTrigger.tsx b/public/app/core/components/NavBar/Next/NavBarItemMenuTrigger.tsx index 1d2e94978e5..30e44e6d463 100644 --- a/public/app/core/components/NavBar/Next/NavBarItemMenuTrigger.tsx +++ b/public/app/core/components/NavBar/Next/NavBarItemMenuTrigger.tsx @@ -1,6 +1,6 @@ import React, { ReactElement, useEffect, useState } from 'react'; import { css, cx } from '@emotion/css'; -import { getPortalContainer, Icon, IconName, Link, useTheme2 } from '@grafana/ui'; +import { Icon, IconName, Link, useTheme2 } from '@grafana/ui'; import { GrafanaTheme2, NavModelItem } from '@grafana/data'; import { MenuTriggerProps } from '@react-types/menu'; import { useMenuTriggerState } from '@react-stately/menu'; @@ -14,6 +14,7 @@ import { FocusScope } from '@react-aria/focus'; import { NavBarItemMenuContext, useNavBarContext } from '../context'; import { NavFeatureHighlight } from '../NavFeatureHighlight'; import { reportExperimentView } from '@grafana/runtime'; +import { getNavMenuPortalContainer } from './NavBarMenuPortalContainer'; export interface NavBarItemMenuTriggerProps extends MenuTriggerProps { children: ReactElement; @@ -185,7 +186,7 @@ export function NavBarItemMenuTrigger(props: NavBarItemMenuTriggerProps): ReactE
{element} {state.isOpen && ( - + document.getElementById(NAV_MENU_PORTAL_CONTAINER_ID) ?? document.body; + +export const NavBarMenuPortalContainer = () => { + const theme = useTheme2(); + const styles = getStyles(theme); + return
; +}; + +NavBarMenuPortalContainer.displayName = 'NavBarMenuPortalContainer'; + +const getStyles = (theme: GrafanaTheme2) => ({ + menuPortalContainer: css({ + left: 0, + position: 'fixed', + right: 0, + top: 0, + zIndex: theme.zIndex.sidemenu, + }), +}); diff --git a/public/app/core/components/NavBar/Next/NavBarNext.tsx b/public/app/core/components/NavBar/Next/NavBarNext.tsx index a2a07fbac5e..0612dc02d13 100644 --- a/public/app/core/components/NavBar/Next/NavBarNext.tsx +++ b/public/app/core/components/NavBar/Next/NavBarNext.tsx @@ -16,6 +16,7 @@ import { NavBarItemWithoutMenu } from './NavBarItemWithoutMenu'; import { FocusScope } from '@react-aria/focus'; import { NavBarContext } from '../context'; import { NavBarToggle } from './NavBarToggle'; +import { NavBarMenuPortalContainer } from './NavBarMenuPortalContainer'; const onOpenSearch = () => { locationService.partial({ search: 'open' }); @@ -85,6 +86,8 @@ export const NavBarNext = React.memo(() => { onClick={() => setMenuOpen(!menuOpen)} /> + +
    ({ border: `1px solid ${theme.colors.border.weak}`, borderRadius: '50%', marginRight: 0, - zIndex: theme.zIndex.sidemenu, + zIndex: theme.zIndex.sidemenu + 1, [theme.breakpoints.down('md')]: { display: 'none', diff --git a/public/app/features/variables/inspect/VariablesUnknownTable.test.tsx b/public/app/features/variables/inspect/VariablesUnknownTable.test.tsx index bb0cad35a6e..231bc03134c 100644 --- a/public/app/features/variables/inspect/VariablesUnknownTable.test.tsx +++ b/public/app/features/variables/inspect/VariablesUnknownTable.test.tsx @@ -115,10 +115,9 @@ describe('VariablesUnknownTable', () => { await userEvent.click(screen.getByRole('heading', { name: /renamed or missing variables/i })); // make sure we report the interaction for slow expansion - await waitFor(() => expect(reportInteractionSpy).toHaveBeenCalledTimes(2)); - expect(reportInteractionSpy.mock.calls[0][0]).toEqual('Unknown variables section expanded'); - expect(reportInteractionSpy.mock.calls[1][0]).toEqual('Slow unknown variables expansion'); - expect(reportInteractionSpy.mock.calls[1][1]).toEqual({ elapsed: 1000 }); + await waitFor(() => + expect(reportInteractionSpy).toHaveBeenCalledWith('Slow unknown variables expansion', { elapsed: 1000 }) + ); }); }); });