@@ -42,6 +42,9 @@ export default class ListBox extends React.Component {
4242 onFocus : PropTypes . func ,
4343 onBlur : PropTypes . func ,
4444 onKeyDown : PropTypes . func ,
45+ renderMenu : PropTypes . func ,
46+ renderMenuGroup : PropTypes . func ,
47+ renderMenuItem : PropTypes . func ,
4548 renderHeader : PropTypes . func ,
4649 renderFooter : PropTypes . func ,
4750 wrapperComponent : PropTypes . node ,
@@ -310,7 +313,7 @@ export default class ListBox extends React.Component {
310313 }
311314
312315 renderListItems ( items , selectedMap ) {
313- const { labelField, valueField, childrenField, prefixCls, disabled } = this . props ;
316+ const { labelField, valueField, childrenField, prefixCls, disabled, renderMenuItem , renderMenuGroup } = this . props ;
314317 const { itemsMap } = this . state ;
315318
316319 return items . map ( item => {
@@ -356,13 +359,13 @@ export default class ListBox extends React.Component {
356359 onMouseEnter = { onMouseEnter }
357360 onMouseLeave = { onMouseLeave }
358361 >
359- { item [ labelField ] }
362+ { renderMenuItem ? renderMenuItem ( item [ labelField ] , item ) : item [ labelField ] }
360363 </ ListItem >
361364 ) : (
362365 < ListItemGroup
363366 prefixCls = { `${ itemPrefixCls } -group` }
364367 key = { item [ labelField ] }
365- label = { item [ labelField ] }
368+ label = { renderMenuGroup ? renderMenuGroup ( item [ labelField ] , item ) : item [ labelField ] }
366369 >
367370 { this . renderListItems ( item [ childrenField ] || [ ] , selectedMap ) }
368371 </ ListItemGroup >
@@ -483,6 +486,27 @@ export default class ListBox extends React.Component {
483486 return findDOMNode ( this . _listview_footer ) ;
484487 }
485488
489+ renderMenu ( ) {
490+ const {
491+ bodyWrapperComponent : BodyWrapperComponent ,
492+ prefixCls,
493+ bodyStyle = { } ,
494+ renderMenu,
495+ } = this . props ;
496+
497+ const Menu = (
498+ < BodyWrapperComponent
499+ ref = { this . saveListViewBody }
500+ className = { `${ prefixCls } -body` }
501+ style = { bodyStyle }
502+ >
503+ { this . renderList ( ) }
504+ </ BodyWrapperComponent >
505+ ) ;
506+
507+ return renderMenu ? renderMenu ( Menu ) : Menu ;
508+ }
509+
486510 render ( ) {
487511 const {
488512 className,
@@ -498,10 +522,8 @@ export default class ListBox extends React.Component {
498522 onFocus,
499523 onBlur,
500524 style = { } ,
501- bodyStyle = { } ,
502525 wrapperComponent : WrapperComponent ,
503526 headerWrapperComponent : HeaderWrapperComponent ,
504- bodyWrapperComponent : BodyWrapperComponent ,
505527 footerWrapperComponent : FooterWrapperComponent ,
506528 renderHeader,
507529 renderFooter,
@@ -546,14 +568,7 @@ export default class ListBox extends React.Component {
546568 </ HeaderWrapperComponent > :
547569 null
548570 }
549-
550- < BodyWrapperComponent
551- ref = { this . saveListViewBody }
552- className = { `${ prefixCls } -body` }
553- style = { bodyStyle }
554- >
555- { this . renderList ( ) }
556- </ BodyWrapperComponent >
571+ { this . renderMenu ( ) }
557572 {
558573 renderFooter ?
559574 < FooterWrapperComponent
0 commit comments