Skip to content

Commit d09c96f

Browse files
committed
fix(NavItem): close managed sidebar on mobile nav item click
1 parent ceee225 commit d09c96f

1 file changed

Lines changed: 12 additions & 2 deletions

File tree

packages/react-core/src/components/Nav/NavItem.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import dividerStyles from '@patternfly/react-styles/css/components/Divider/divid
1515
import { css } from '@patternfly/react-styles';
1616
import { NavContext, NavSelectClickHandler } from './Nav';
1717
import { PageSidebarContext } from '../Page/PageSidebar';
18+
import { PageContext } from '../Page/PageContext';
1819
import { useOUIAProps, OUIAProps } from '../../helpers';
1920
import { Popper } from '../../helpers/Popper/Popper';
2021
import AngleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-right-icon';
@@ -81,6 +82,7 @@ const NavItemBase: React.FunctionComponent<NavItemProps> = ({
8182
}: NavItemProps) => {
8283
const { flyoutRef, setFlyoutRef, navRef } = useContext(NavContext);
8384
const { isSidebarOpen } = useContext(PageSidebarContext);
85+
const { isManagedSidebar, isMobile, onSidebarToggle } = useContext(PageContext);
8486
const [flyoutTarget, setFlyoutTarget] = useState(null);
8587
const [isHovered, setIsHovered] = useState(false);
8688
const _ref = useRef<HTMLLIElement>(undefined);
@@ -193,13 +195,21 @@ const NavItemBase: React.FunctionComponent<NavItemProps> = ({
193195

194196
const tabIndex = isSidebarOpen ? null : -1;
195197

198+
const handleNavItemClick = (event: any, context: any, preventLinkDefault: boolean) => {
199+
context.onSelect(event, groupId, itemId, to, preventLinkDefault, onClick);
200+
201+
if (isManagedSidebar && isMobile && isSidebarOpen) {
202+
onSidebarToggle();
203+
}
204+
};
205+
196206
const renderDefaultLink = (context: any): React.ReactNode => {
197207
const preventLinkDefault = preventDefault || !to;
198208
return (
199209
<Component
200210
ref={anchorRef}
201211
href={to}
202-
onClick={(e: any) => context.onSelect(e, groupId, itemId, to, preventLinkDefault, onClick)}
212+
onClick={(e: any) => handleNavItemClick(e, context, preventLinkDefault)}
203213
className={css(
204214
styles.navLink,
205215
isActive && styles.modifiers.current,
@@ -220,7 +230,7 @@ const NavItemBase: React.FunctionComponent<NavItemProps> = ({
220230

221231
const renderClonedChild = (context: any, child: React.ReactElement<any>): React.ReactNode =>
222232
cloneElement(child, {
223-
onClick: (e: MouseEvent) => context.onSelect(e, groupId, itemId, to, preventDefault, onClick),
233+
onClick: (e: MouseEvent) => handleNavItemClick(e, context, preventDefault),
224234
'aria-current': isActive ? 'page' : null,
225235
...(styleChildren && {
226236
className: css(styles.navLink, isActive && styles.modifiers.current, child.props && child.props.className)

0 commit comments

Comments
 (0)