@@ -21,48 +21,58 @@ function convertItemsToNodes(
2121
2222 return ( list || [ ] )
2323 . map ( ( opt , index ) => {
24+ const renderNodeWrapper = node => {
25+ return typeof itemRender === 'function' ? itemRender ( node , opt as any ) : node ;
26+ } ;
2427 if ( opt && typeof opt === 'object' ) {
2528 const { label, children, key, type, extra, ...restProps } = opt as any ;
2629 const mergedKey = key ?? `tmp-${ index } ` ;
2730
28- let originNode : React . ReactNode = null ;
29-
30- // MenuItemGroup & SubMenu
31+ // MenuItemGroup & SubMenuItem
3132 if ( children || type === 'group' ) {
3233 if ( type === 'group' ) {
33- originNode = (
34- < MergedMenuItemGroup key = { mergedKey } { ...restProps } title = { label } >
35- { convertItemsToNodes ( children , components , prefixCls , itemRender ) }
34+ // Group
35+ return (
36+ < MergedMenuItemGroup
37+ key = { mergedKey }
38+ { ...restProps }
39+ itemRender = { renderNodeWrapper }
40+ title = { label }
41+ >
42+ { convertItemsToNodes ( children , components , prefixCls ) }
3643 </ MergedMenuItemGroup >
3744 ) ;
38- } else {
39- originNode = (
40- < MergedSubMenu key = { mergedKey } { ...restProps } title = { label } >
41- { convertItemsToNodes ( children , components , prefixCls , itemRender ) }
42- </ MergedSubMenu >
43- ) ;
4445 }
45- }
46- // Divider
47- else if ( type === 'divider' ) {
48- originNode = < MergedDivider key = { mergedKey } { ...restProps } /> ;
49- }
50- // MenuItem
51- else {
52- originNode = (
53- < MergedMenuItem key = { mergedKey } { ...restProps } extra = { extra } >
54- { label }
55- { ( ! ! extra || extra === 0 ) && (
56- < span className = { `${ prefixCls } -item-extra` } > { extra } </ span >
57- ) }
58- </ MergedMenuItem >
46+
47+ // Sub Menu
48+ return (
49+ < MergedSubMenu
50+ key = { mergedKey }
51+ { ...restProps }
52+ itemRender = { renderNodeWrapper }
53+ title = { label }
54+ >
55+ { convertItemsToNodes ( children , components , prefixCls ) }
56+ </ MergedSubMenu >
5957 ) ;
6058 }
6159
62- if ( typeof itemRender === 'function' ) {
63- return itemRender ( originNode , opt ) ;
60+ // MenuItem & Divider
61+ if ( type === 'divider' ) {
62+ return < MergedDivider key = { mergedKey } { ...restProps } itemRender = { renderNodeWrapper } /> ;
6463 }
65- return originNode ;
64+
65+ return (
66+ < MergedMenuItem
67+ key = { mergedKey }
68+ { ...restProps }
69+ extra = { extra }
70+ itemRender = { renderNodeWrapper }
71+ >
72+ { label }
73+ { ( ! ! extra || extra === 0 ) && < span className = { `${ prefixCls } -item-extra` } > { extra } </ span > }
74+ </ MergedMenuItem >
75+ ) ;
6676 }
6777
6878 return null ;
@@ -92,5 +102,5 @@ export function parseItems(
92102 childNodes = convertItemsToNodes ( items , mergedComponents , prefixCls , itemRender ) ;
93103 }
94104
95- return parseChildren ( childNodes , keyPath , itemRender ) ;
105+ return parseChildren ( childNodes , keyPath ) ;
96106}
0 commit comments