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 })
+ );
});
});
});