@@ -13,9 +13,10 @@ import CopyrightFooter from './CopyrightFooter';
1313import InstantLogin from './InstantLogin' ;
1414import LeftSidebarDropWrapper from './LeftSidebarDropWrapper' ;
1515import LeftSidebarIconWrapper from './LeftSidebarIconWrapper' ;
16- import LeftSidebarLink from './LeftSidebarLink' ;
1716import NewItemsIndicator from './NewItemsIndicator' ;
17+ import defaultNavLinkRenderer from './defaultNavLinkRenderer' ;
1818
19+ import type { Props as LeftSidebarLinkProps } from './LeftSidebarLink' ;
1920import type { Callout } from './Callout' ;
2021
2122import './styles/LeftSidebar.scss' ;
@@ -39,6 +40,8 @@ type SubMenuItem = {
3940 id : string ,
4041 /** Localized text string to use for individual menu items */
4142 message : string ,
43+ /** Optional left side bar link renderer. Defaults to defaultNavLinkRenderer */
44+ navLinkRenderer ?: ( props : LeftSidebarLinkProps ) => React . Node ,
4245 /** Whether we should show a badge marking new item content */
4346 newItemBadge ?: boolean ,
4447 /** Optional remove link click handler */
@@ -78,6 +81,8 @@ type MenuItem = {
7881 menuItems ?: Array < SubMenuItem > ,
7982 /** Localized text string to use for individual menu items */
8083 message : string ,
84+ /** Optional left side bar link renderer. Defaults to defaultNavLinkRenderer */
85+ navLinkRenderer ?: ( props : LeftSidebarLinkProps ) => React . Node ,
8186 /** Whether we should show a badge marking new item content */
8287 newItemBadge ?: boolean ,
8388 /** Optional remove link click handler */
@@ -282,6 +287,7 @@ class LeftSidebar extends React.Component<Props, State> {
282287 iconElement ,
283288 id ,
284289 message ,
290+ navLinkRenderer ,
285291 newItemBadge ,
286292 onClickRemove ,
287293 removeButtonHtmlAttributes ,
@@ -296,26 +302,24 @@ class LeftSidebar extends React.Component<Props, State> {
296302 'is-selected' : selected ,
297303 } ) ;
298304
299- const builtLink = (
300- < LeftSidebarLink
301- callout = { callout }
302- canReceiveDrop = { canReceiveDrop }
303- className = { linkClassNames }
304- customTheme = { leftSidebarProps . customTheme }
305- onClickRemove = { onClickRemove }
306- htmlAttributes = { htmlAttributes }
307- icon = { this . getIcon ( iconElement , iconComponent , leftSidebarProps . customTheme , selected , scaleIcon ) }
308- isScrolling = { this . state . isScrolling }
309- key = { `link-${ id } ` }
310- message = { message }
311- newItemBadge = { this . getNewItemBadge ( newItemBadge , leftSidebarProps . customTheme ) }
312- removeButtonHtmlAttributes = { removeButtonHtmlAttributes }
313- routerLink = { routerLink }
314- routerProps = { routerProps }
315- selected = { selected }
316- showTooltip = { showTooltip }
317- />
318- ) ;
305+ const linkProps = {
306+ callout,
307+ className : linkClassNames ,
308+ customTheme : leftSidebarProps . customTheme ,
309+ onClickRemove,
310+ htmlAttributes,
311+ icon : this . getIcon ( iconElement , iconComponent , leftSidebarProps . customTheme , selected , scaleIcon ) ,
312+ isScrolling : this . state . isScrolling ,
313+ message,
314+ newItemBadge : this . getNewItemBadge ( newItemBadge , leftSidebarProps . customTheme ) ,
315+ removeButtonHtmlAttributes,
316+ routerLink,
317+ routerProps,
318+ selected,
319+ showTooltip,
320+ } ;
321+
322+ const builtLink = navLinkRenderer ? navLinkRenderer ( linkProps ) : defaultNavLinkRenderer ( linkProps ) ;
319323
320324 // Check for menu items on links so we don't double-highlight groups
321325 return canReceiveDrop && ! props . menuItems ? (
@@ -327,7 +331,7 @@ class LeftSidebar extends React.Component<Props, State> {
327331 { builtLink }
328332 </ LeftSidebarDropWrapper >
329333 ) : (
330- builtLink
334+ < React . Fragment key = { `link- ${ id } ` } > { builtLink } </ React . Fragment >
331335 ) ;
332336 }
333337
0 commit comments