diff --git a/src/Menu.tsx b/src/Menu.tsx index aa50e63b..23080e95 100644 --- a/src/Menu.tsx +++ b/src/Menu.tsx @@ -7,6 +7,8 @@ import warning from 'rc-util/lib/warning'; import * as React from 'react'; import { useImperativeHandle } from 'react'; import { flushSync } from 'react-dom'; +import MenuItem from './MenuItem'; +import SubMenu from './SubMenu'; import { IdContext } from './context/IdContext'; import MenuContextProvider from './context/MenuContext'; import { PathRegisterContext, PathUserContext } from './context/PathContext'; @@ -31,8 +33,6 @@ import type { SelectInfo, TriggerSubMenuAction, } from './interface'; -import MenuItem from './MenuItem'; -import SubMenu from './SubMenu'; import { parseItems } from './utils/nodeUtil'; import { warnItemProp } from './utils/warnUtil'; @@ -274,9 +274,8 @@ const Menu = React.forwardRef((props, ref) => { }; // >>>>> Cache & Reset open keys when inlineCollapsed changed - const [inlineCacheOpenKeys, setInlineCacheOpenKeys] = React.useState( - mergedOpenKeys, - ); + const [inlineCacheOpenKeys, setInlineCacheOpenKeys] = + React.useState(mergedOpenKeys); const mountRef = React.useRef(false); @@ -352,9 +351,10 @@ const Menu = React.forwardRef((props, ref) => { [registerPath, unregisterPath], ); - const pathUserContext = React.useMemo(() => ({ isSubPathKey }), [ - isSubPathKey, - ]); + const pathUserContext = React.useMemo( + () => ({ isSubPathKey }), + [isSubPathKey], + ); React.useEffect(() => { refreshOverflowKeys( @@ -645,6 +645,7 @@ const Menu = React.forwardRef((props, ref) => { // Events onItemClick={onInternalClick} onOpenChange={onInternalOpenChange} + onKeyDown={onInternalKeyDown} > {container} diff --git a/src/SubMenu/SubMenuList.tsx b/src/SubMenu/SubMenuList.tsx index 732fa097..4cd278e7 100644 --- a/src/SubMenu/SubMenuList.tsx +++ b/src/SubMenu/SubMenuList.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; import classNames from 'classnames'; +import * as React from 'react'; import { MenuContext } from '../context/MenuContext'; export interface SubMenuListProps @@ -11,7 +11,7 @@ const InternalSubMenuList = ( { className, children, ...restProps }: SubMenuListProps, ref: React.Ref, ) => { - const { prefixCls, mode, rtl } = React.useContext(MenuContext); + const { prefixCls, mode, rtl, onKeyDown } = React.useContext(MenuContext); return (
    {children}
diff --git a/src/context/MenuContext.tsx b/src/context/MenuContext.tsx index c34c4bdf..60ed4175 100644 --- a/src/context/MenuContext.tsx +++ b/src/context/MenuContext.tsx @@ -1,7 +1,7 @@ -import * as React from 'react'; import type { CSSMotionProps } from 'rc-motion'; import useMemo from 'rc-util/lib/hooks/useMemo'; import isEqual from 'rc-util/lib/isEqual'; +import * as React from 'react'; import type { BuiltinPlacements, MenuClickEventHandler, @@ -52,6 +52,7 @@ export interface MenuContextProps { // Function onItemClick: MenuClickEventHandler; + onKeyDown?: React.KeyboardEventHandler; onOpenChange: (key: string, open: boolean) => void; getPopupContainer: (node: HTMLElement) => HTMLElement; }