@@ -19,49 +19,79 @@ class DesktopHeader extends React.Component {
1919 super ( props ) ;
2020 }
2121
22- userMenuWithUsername ( ) {
23- const {
24- userMenu,
25- avatar,
26- username,
27- intl,
28- } = this . props ;
22+ renderMainMenu ( ) {
23+ const { mainMenu } = this . props ;
2924
25+ // Nodes are accepted as a prop
26+ if ( ! Array . isArray ( mainMenu ) ) {
27+ return mainMenu ;
28+ }
29+
30+ return mainMenu . map ( ( menuItem ) => {
31+ const {
32+ type,
33+ href,
34+ content,
35+ submenuContent,
36+ } = menuItem ;
37+
38+ if ( type === 'item' ) {
39+ return (
40+ < a key = { `${ type } -${ content } ` } className = "nav-link" href = { href } > { content } </ a >
41+ ) ;
42+ }
43+
44+ return (
45+ < Menu key = { `${ type } -${ content } ` } tag = "div" className = "nav-item" respondToPointerEvents >
46+ < MenuTrigger tag = "a" className = "nav-link d-inline-flex align-items-center" href = { href } >
47+ { content } < CaretIcon role = "img" aria-hidden focusable = "false" />
48+ </ MenuTrigger >
49+ < MenuContent className = "pin-left pin-right shadow py-2" >
50+ { submenuContent }
51+ </ MenuContent >
52+ </ Menu >
53+ ) ;
54+ } ) ;
55+ }
56+
57+ // Renders an optional App Menu for
58+ renderAppMenu ( ) {
59+ const { appMenu } = this . props ;
60+ const { content : appMenuContent , menuItems } = appMenu ;
3061 return (
3162 < Menu transitionClassName = "menu-dropdown" transitionTimeout = { 250 } >
32- < MenuTrigger
33- tag = "button"
34- aria-label = { intl . formatMessage ( messages [ 'header.label.account.menu.with.username' ] , { username } ) }
35- className = "btn btn-outline-primary d-inline-flex align-items-center pl-2 pr-3"
36- >
37- < Avatar size = "1.5em" src = { avatar } alt = "" className = "mr-2" />
38- { username } < CaretIcon role = "img" aria-hidden focusable = "false" />
63+ < MenuTrigger tag = "a" className = "nav-link d-inline-flex align-items-center" >
64+ { appMenuContent } < CaretIcon role = "img" aria-hidden focusable = "false" />
3965 </ MenuTrigger >
4066 < MenuContent className = "mb-0 dropdown-menu show dropdown-menu-right pin-right shadow py-2" >
41- { userMenu . map ( ( { type, href, content } ) => (
67+ { menuItems . map ( ( { type, href, content } ) => (
4268 < a className = { `dropdown-${ type } ` } key = { `${ type } -${ content } ` } href = { href } > { content } </ a >
4369 ) ) }
4470 </ MenuContent >
4571 </ Menu >
4672 ) ;
4773 }
4874
49- userMenuWithoutUsername ( ) {
75+ renderUserMenu ( ) {
5076 const {
77+ intl,
5178 userMenu,
5279 avatar,
5380 name,
54- intl ,
81+ username ,
5582 } = this . props ;
83+ const hideUsername = getConfig ( ) . HIDE_USERNAME_IN_HEADER ;
84+ const usernameOrName = hideUsername ? name : username ;
5685
5786 return (
5887 < Menu transitionClassName = "menu-dropdown" transitionTimeout = { 250 } >
5988 < MenuTrigger
6089 tag = "button"
61- aria-label = { intl . formatMessage ( messages [ 'header.label.account.menu.without. username' ] , { name } ) }
90+ aria-label = { intl . formatMessage ( messages [ 'header.label.account.menu.using.name.or. username' ] , { usernameOrName } ) }
6291 className = "btn btn-outline-primary d-inline-flex align-items-center pl-2 pr-3"
6392 >
6493 < Avatar size = "1.5em" src = { avatar } alt = "" className = "mr-2" />
94+ { hideUsername ? null : username }
6595 < CaretIcon role = "img" aria-hidden focusable = "false" />
6696 </ MenuTrigger >
6797 < MenuContent className = "mb-0 dropdown-menu show dropdown-menu-right pin-right shadow py-2" >
@@ -73,63 +103,6 @@ class DesktopHeader extends React.Component {
73103 ) ;
74104 }
75105
76- renderUserMenu ( ) {
77- return ( getConfig ( ) . ENABLE_HEADER_WITHOUT_USERNAME ? this . userMenuWithoutUsername ( ) : this . userMenuWithUsername ( ) ) ;
78- }
79-
80- // Renders an optional App Menu for
81- renderAppMenu ( ) {
82- const { appMenu } = this . props ;
83- const { content : appMenuContent , menuItems } = appMenu ;
84- return (
85- < Menu transitionClassName = "menu-dropdown" transitionTimeout = { 250 } >
86- < MenuTrigger tag = "a" className = "nav-link d-inline-flex align-items-center" >
87- { appMenuContent } < CaretIcon role = "img" aria-hidden focusable = "false" />
88- </ MenuTrigger >
89- < MenuContent className = "mb-0 dropdown-menu show dropdown-menu-right pin-right shadow py-2" >
90- { menuItems . map ( ( { type, href, content } ) => (
91- < a className = { `dropdown-${ type } ` } key = { `${ type } -${ content } ` } href = { href } > { content } </ a >
92- ) ) }
93- </ MenuContent >
94- </ Menu >
95- ) ;
96- }
97-
98- renderMainMenu ( ) {
99- const { mainMenu } = this . props ;
100-
101- // Nodes are accepted as a prop
102- if ( ! Array . isArray ( mainMenu ) ) {
103- return mainMenu ;
104- }
105-
106- return mainMenu . map ( ( menuItem ) => {
107- const {
108- type,
109- href,
110- content,
111- submenuContent,
112- } = menuItem ;
113-
114- if ( type === 'item' ) {
115- return (
116- < a key = { `${ type } -${ content } ` } className = "nav-link" href = { href } > { content } </ a >
117- ) ;
118- }
119-
120- return (
121- < Menu key = { `${ type } -${ content } ` } tag = "div" className = "nav-item" respondToPointerEvents >
122- < MenuTrigger tag = "a" className = "nav-link d-inline-flex align-items-center" href = { href } >
123- { content } < CaretIcon role = "img" aria-hidden focusable = "false" />
124- </ MenuTrigger >
125- < MenuContent className = "pin-left pin-right shadow py-2" >
126- { submenuContent }
127- </ MenuContent >
128- </ Menu >
129- ) ;
130- } ) ;
131- }
132-
133106 renderLoggedOutItems ( ) {
134107 const { loggedOutItems } = this . props ;
135108
0 commit comments