diff --git a/src/components/DropdownMenu/DropdownMenuItem.tsx b/src/components/DropdownMenu/DropdownMenuItem.tsx index 758498e332..98198de156 100644 --- a/src/components/DropdownMenu/DropdownMenuItem.tsx +++ b/src/components/DropdownMenu/DropdownMenuItem.tsx @@ -62,15 +62,42 @@ export const DropdownMenuItem = ({ }, [closeMenu, closeSubmenu, hasSubmenu, toggle]); const handleMenuItemClick = React.useCallback( - (event: React.MouseEvent) => { + ( + event: React.MouseEvent & + React.MouseEvent, + ) => { + event.preventDefault(); + + props.extraProps?.onClick?.( + event as React.MouseEvent & + React.MouseEvent, + ); + if (hasSubmenu) { + event.stopPropagation(); + + if (isSubmenuOpen) { + closeSubmenu(); + } else { + openSubmenu(); + } + return; } action?.(event, data as unknown as T); handleCloseMenu(); }, - [action, data, handleCloseMenu, hasSubmenu], + [ + action, + data, + handleCloseMenu, + hasSubmenu, + isSubmenuOpen, + openSubmenu, + closeSubmenu, + props.extraProps, + ], ); const extraProps = React.useMemo(() => { diff --git a/src/components/DropdownMenu/DropdownMenuPopup.tsx b/src/components/DropdownMenu/DropdownMenuPopup.tsx index 31cdfa6904..8387188c31 100644 --- a/src/components/DropdownMenu/DropdownMenuPopup.tsx +++ b/src/components/DropdownMenu/DropdownMenuPopup.tsx @@ -4,10 +4,10 @@ import * as React from 'react'; import {KeyCode} from '../../constants'; import {useListNavigation} from '../../hooks'; -import {Menu} from '../Menu'; import type {MenuProps} from '../Menu'; -import {Popup} from '../Popup'; +import {Menu} from '../Menu'; import type {PopupProps} from '../Popup'; +import {Popup} from '../Popup'; import {cnDropdownMenu} from './DropdownMenu.classname'; import {DropdownMenuContext} from './DropdownMenuContext'; @@ -161,6 +161,7 @@ export const DropdownMenuPopup = ({ const extraProps = { ...item.extraProps, + onClick: activate, onMouseEnter: activate, };