@@ -26,6 +26,7 @@ import {
2626 useMeasure ,
2727} from '../context/PathContext' ;
2828import { useMenuId } from '../context/IdContext' ;
29+ import PrivateContext from '../context/PrivateContext' ;
2930
3031export interface SubMenuProps {
3132 style ?: React . CSSProperties ;
@@ -127,6 +128,8 @@ const InternalSubMenu = (props: SubMenuProps) => {
127128 onActive,
128129 } = React . useContext ( MenuContext ) ;
129130
131+ const { _internalRenderSubMenuItem } = React . useContext ( PrivateContext ) ;
132+
130133 const { isSubPathKey } = React . useContext ( PathUserContext ) ;
131134 const connectedPath = useFullPath ( ) ;
132135
@@ -168,25 +171,27 @@ const InternalSubMenu = (props: SubMenuProps) => {
168171 }
169172 } ;
170173
171- const onInternalMouseEnter : React . MouseEventHandler < HTMLLIElement > =
172- domEvent => {
173- triggerChildrenActive ( true ) ;
174+ const onInternalMouseEnter : React . MouseEventHandler <
175+ HTMLLIElement
176+ > = domEvent => {
177+ triggerChildrenActive ( true ) ;
174178
175- onMouseEnter ?.( {
176- key : eventKey ,
177- domEvent,
178- } ) ;
179- } ;
179+ onMouseEnter ?.( {
180+ key : eventKey ,
181+ domEvent,
182+ } ) ;
183+ } ;
180184
181- const onInternalMouseLeave : React . MouseEventHandler < HTMLLIElement > =
182- domEvent => {
183- triggerChildrenActive ( false ) ;
185+ const onInternalMouseLeave : React . MouseEventHandler <
186+ HTMLLIElement
187+ > = domEvent => {
188+ triggerChildrenActive ( false ) ;
184189
185- onMouseLeave ?.( {
186- key : eventKey ,
187- domEvent,
188- } ) ;
189- } ;
190+ onMouseLeave ?.( {
191+ key : eventKey ,
192+ domEvent,
193+ } ) ;
194+ } ;
190195
191196 const mergedActive = React . useMemo ( ( ) => {
192197 if ( active ) {
@@ -317,6 +322,42 @@ const InternalSubMenu = (props: SubMenuProps) => {
317322 ) ;
318323 }
319324
325+ // >>>>> List node
326+ let listNode = (
327+ < Overflow . Item
328+ role = "none"
329+ { ...restProps }
330+ component = "li"
331+ style = { style }
332+ className = { classNames (
333+ subMenuPrefixCls ,
334+ `${ subMenuPrefixCls } -${ mode } ` ,
335+ className ,
336+ {
337+ [ `${ subMenuPrefixCls } -open` ] : open ,
338+ [ `${ subMenuPrefixCls } -active` ] : mergedActive ,
339+ [ `${ subMenuPrefixCls } -selected` ] : childrenSelected ,
340+ [ `${ subMenuPrefixCls } -disabled` ] : mergedDisabled ,
341+ } ,
342+ ) }
343+ onMouseEnter = { onInternalMouseEnter }
344+ onMouseLeave = { onInternalMouseLeave }
345+ >
346+ { titleNode }
347+
348+ { /* Inline mode */ }
349+ { ! overflowDisabled && (
350+ < InlineSubMenuList id = { popupId } open = { open } keyPath = { connectedPath } >
351+ { children }
352+ </ InlineSubMenuList >
353+ ) }
354+ </ Overflow . Item >
355+ ) ;
356+
357+ if ( _internalRenderSubMenuItem ) {
358+ listNode = _internalRenderSubMenuItem ( listNode , props ) ;
359+ }
360+
320361 // >>>>> Render
321362 return (
322363 < MenuContextProvider
@@ -325,34 +366,7 @@ const InternalSubMenu = (props: SubMenuProps) => {
325366 itemIcon = { mergedItemIcon }
326367 expandIcon = { mergedExpandIcon }
327368 >
328- < Overflow . Item
329- role = "none"
330- { ...restProps }
331- component = "li"
332- style = { style }
333- className = { classNames (
334- subMenuPrefixCls ,
335- `${ subMenuPrefixCls } -${ mode } ` ,
336- className ,
337- {
338- [ `${ subMenuPrefixCls } -open` ] : open ,
339- [ `${ subMenuPrefixCls } -active` ] : mergedActive ,
340- [ `${ subMenuPrefixCls } -selected` ] : childrenSelected ,
341- [ `${ subMenuPrefixCls } -disabled` ] : mergedDisabled ,
342- } ,
343- ) }
344- onMouseEnter = { onInternalMouseEnter }
345- onMouseLeave = { onInternalMouseLeave }
346- >
347- { titleNode }
348-
349- { /* Inline mode */ }
350- { ! overflowDisabled && (
351- < InlineSubMenuList id = { popupId } open = { open } keyPath = { connectedPath } >
352- { children }
353- </ InlineSubMenuList >
354- ) }
355- </ Overflow . Item >
369+ { listNode }
356370 </ MenuContextProvider >
357371 ) ;
358372} ;
0 commit comments