@@ -21,48 +21,58 @@ function convertItemsToNodes(
21
21
22
22
return ( list || [ ] )
23
23
. map ( ( opt , index ) => {
24
+ const renderNodeWrapper = node => {
25
+ return typeof itemRender === 'function' ? itemRender ( node , opt as any ) : node ;
26
+ } ;
24
27
if ( opt && typeof opt === 'object' ) {
25
28
const { label, children, key, type, extra, ...restProps } = opt as any ;
26
29
const mergedKey = key ?? `tmp-${ index } ` ;
27
30
28
- let originNode : React . ReactNode = null ;
29
-
30
- // MenuItemGroup & SubMenu
31
+ // MenuItemGroup & SubMenuItem
31
32
if ( children || type === 'group' ) {
32
33
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 ) }
36
43
</ MergedMenuItemGroup >
37
44
) ;
38
- } else {
39
- originNode = (
40
- < MergedSubMenu key = { mergedKey } { ...restProps } title = { label } >
41
- { convertItemsToNodes ( children , components , prefixCls , itemRender ) }
42
- </ MergedSubMenu >
43
- ) ;
44
45
}
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 >
59
57
) ;
60
58
}
61
59
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 } /> ;
64
63
}
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
+ ) ;
66
76
}
67
77
68
78
return null ;
@@ -92,5 +102,5 @@ export function parseItems(
92
102
childNodes = convertItemsToNodes ( items , mergedComponents , prefixCls , itemRender ) ;
93
103
}
94
104
95
- return parseChildren ( childNodes , keyPath , itemRender ) ;
105
+ return parseChildren ( childNodes , keyPath ) ;
96
106
}
0 commit comments