diff --git a/packages/react-core/src/components/Nav/NavItem.tsx b/packages/react-core/src/components/Nav/NavItem.tsx index c3f097e577a..dd49fc7ee8c 100644 --- a/packages/react-core/src/components/Nav/NavItem.tsx +++ b/packages/react-core/src/components/Nav/NavItem.tsx @@ -13,8 +13,9 @@ import styles from '@patternfly/react-styles/css/components/Nav/nav'; import menuStyles from '@patternfly/react-styles/css/components/Menu/menu'; import dividerStyles from '@patternfly/react-styles/css/components/Divider/divider'; import { css } from '@patternfly/react-styles'; -import { NavContext, NavSelectClickHandler } from './Nav'; +import { NavContext, NavContextProps, NavSelectClickHandler } from './Nav'; import { PageSidebarContext } from '../Page/PageSidebar'; +import { PageContext } from '../Page/PageContext'; import { useOUIAProps, OUIAProps } from '../../helpers'; import { Popper } from '../../helpers/Popper/Popper'; import AngleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-right-icon'; @@ -81,6 +82,7 @@ const NavItemBase: React.FunctionComponent = ({ }: NavItemProps) => { const { flyoutRef, setFlyoutRef, navRef } = useContext(NavContext); const { isSidebarOpen } = useContext(PageSidebarContext); + const { isManagedSidebar, isMobile, onSidebarToggle } = useContext(PageContext); const [flyoutTarget, setFlyoutTarget] = useState(null); const [isHovered, setIsHovered] = useState(false); const _ref = useRef(undefined); @@ -193,13 +195,21 @@ const NavItemBase: React.FunctionComponent = ({ const tabIndex = isSidebarOpen ? null : -1; - const renderDefaultLink = (context: any): React.ReactNode => { + const handleNavItemClick = (event: any, context: NavContextProps, preventLinkDefault: boolean) => { + context.onSelect?.(event, groupId, itemId, to, preventLinkDefault, onClick); + + if (isManagedSidebar && isMobile && isSidebarOpen && !hasFlyout) { + onSidebarToggle(); + } + }; + + const renderDefaultLink = (context: NavContextProps): React.ReactNode => { const preventLinkDefault = preventDefault || !to; return ( context.onSelect(e, groupId, itemId, to, preventLinkDefault, onClick)} + onClick={(e: any) => handleNavItemClick(e, context, preventLinkDefault)} className={css( styles.navLink, isActive && styles.modifiers.current, @@ -218,9 +228,9 @@ const NavItemBase: React.FunctionComponent = ({ ); }; - const renderClonedChild = (context: any, child: React.ReactElement): React.ReactNode => + const renderClonedChild = (context: NavContextProps, child: React.ReactElement): React.ReactNode => cloneElement(child, { - onClick: (e: MouseEvent) => context.onSelect(e, groupId, itemId, to, preventDefault, onClick), + onClick: (e: MouseEvent) => handleNavItemClick(e, context, preventDefault), 'aria-current': isActive ? 'page' : null, ...(styleChildren && { className: css(styles.navLink, isActive && styles.modifiers.current, child.props && child.props.className)