Skip to content

Commit 87d1785

Browse files
committed
refactor: detect touch screens for header navigation handling
1 parent 044fbca commit 87d1785

File tree

2 files changed

+9
-13
lines changed

2 files changed

+9
-13
lines changed

web-components/src/components/header/components/HeaderMenuItem/HeaderMenuItem.Hover.tsx

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
import React, { useRef } from 'react';
2-
import {
3-
MenuList,
4-
Paper,
5-
Popover,
6-
useMediaQuery,
7-
useTheme,
8-
} from '@mui/material';
2+
import { MenuList, Paper, Popover, useMediaQuery } from '@mui/material';
93
import cx from 'clsx';
104

115
import DropdownIcon from '../../../icons/DropdownIcon';
@@ -38,8 +32,8 @@ const HeaderMenuItemHover = ({
3832
children,
3933
}: Props): JSX.Element => {
4034
const { classes: styles } = useMenuHoverStyles();
41-
const theme = useTheme();
42-
const isMobile = useMediaQuery(theme.breakpoints.down('sm'));
35+
// eslint-disable-next-line lingui/no-unlocalized-strings
36+
const isTouchScreen = useMediaQuery('(pointer: coarse)');
4337
const popoverAnchor = useRef(null);
4438
const [anchorEl, setAnchorEl] = React.useState<HTMLElement | null>(null);
4539

@@ -63,9 +57,9 @@ const HeaderMenuItemHover = ({
6357
ref={popoverAnchor}
6458
aria-owns={open ? 'mouse-over-popover' : undefined}
6559
aria-haspopup="true"
66-
onMouseEnter={isMobile ? undefined : handlePopoverOpen}
60+
onMouseEnter={isTouchScreen ? undefined : handlePopoverOpen}
6761
onMouseLeave={handlePopoverClose}
68-
onClick={isMobile ? handlePopoverToggle : undefined}
62+
onClick={isTouchScreen ? handlePopoverToggle : undefined}
6963
>
7064
{title && (
7165
<span className={classes?.title}>

web-components/src/components/mobile-menu/index.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { useEffect, useState } from 'react';
2-
import { useTheme } from '@mui/material';
2+
import { useMediaQuery, useTheme } from '@mui/material';
33
import Box from '@mui/material/Box';
44
import Drawer from '@mui/material/Drawer';
55
import MenuItem from '@mui/material/MenuItem';
@@ -34,6 +34,8 @@ const MobileMenu: React.FC<React.PropsWithChildren<Props>> = ({
3434
}) => {
3535
const { classes: styles, cx } = useMobileMenuStyles();
3636
const theme = useTheme();
37+
// eslint-disable-next-line lingui/no-unlocalized-strings
38+
const isTouchScreen = useMediaQuery('(pointer: coarse)');
3739
const [open, setOpen] = useState(false);
3840

3941
const handleToggle = () => {
@@ -53,7 +55,7 @@ const MobileMenu: React.FC<React.PropsWithChildren<Props>> = ({
5355
<HamburgerIcon
5456
className={cx(styles.hamburger, styles.icon)}
5557
onClick={handleToggle}
56-
onMouseLeave={handleClose}
58+
onMouseLeave={isTouchScreen ? handleClose : undefined}
5759
width="29px"
5860
height="22px"
5961
sx={{ ml: { xs: isUserLoggedIn ? 0 : 2, sm: 4 } }}

0 commit comments

Comments
 (0)