@@ -13,47 +13,105 @@ import { useUserDispatch, useUserState, logout } from "../contexts";
1313import { routes } from "../constants" ;
1414import logo from "../static/logo.png" ;
1515import GuidedTour from "./GuidedTour" ;
16+ import { AllInbox , Face , GitHub , HelpOutline , People , SettingsPower } from "@material-ui/icons" ;
1617
1718const Header : FunctionComponent = ( ) => {
18- const [ menuRef , setMenuRef ] = React . useState < null | HTMLElement > ( null ) ;
19+ const [ avatarMenuRef , setAvatarMenuRef ] = React . useState < null | HTMLElement > ( null ) ;
20+ const [ helpMenuRef , setHelpMenuRef ] = React . useState < null | HTMLElement > ( null ) ;
1921 const { loggedIn, user } = useUserState ( ) ;
2022 const authDispatch = useUserDispatch ( ) ;
2123
24+ const styleMenuItem = {
25+ display : "flex" ,
26+ alignItems : "center" ,
27+ } ;
28+
2229 const handleMenuClose = ( ) => {
23- setMenuRef ( null ) ;
30+ setAvatarMenuRef ( null ) ;
31+ setHelpMenuRef ( null ) ;
2432 } ;
2533
26- const renderMenu = (
34+ const closeMenuAndOpenLink = ( ) => {
35+ handleMenuClose ( ) ;
36+ window . open ( "https://github.com/Visual-Regression-Tracker/Visual-Regression-Tracker/issues/new" , "_blank" ) ;
37+ } ;
38+
39+ const getVRTVersion = ( ) : string => {
40+ //For cypress tests, window._env_ variable may be undefined, so return a dummy value.
41+ return window . _env_ ? window . _env_ . VRT_VERSION : "5.0.0" ;
42+ } ;
43+
44+ const renderHelpMenu = (
45+ < Menu
46+ anchorEl = { helpMenuRef }
47+ anchorOrigin = { { vertical : "top" , horizontal : "right" } }
48+ id = "headerHelpMenu"
49+ keepMounted
50+ transformOrigin = { { vertical : "top" , horizontal : "right" } }
51+ open = { ! ! helpMenuRef }
52+ onClose = { handleMenuClose }
53+ >
54+ < MenuItem onClick = { handleMenuClose } >
55+ < GuidedTour />
56+ </ MenuItem >
57+ < MenuItem onClick = { closeMenuAndOpenLink } style = { styleMenuItem } >
58+ < IconButton size = "small" >
59+ < GitHub />
60+ </ IconButton >
61+ Open an issue in GitHub
62+ </ MenuItem >
63+ < hr />
64+ < MenuItem style = { {
65+ justifyContent : "center"
66+ } } >
67+ VRT Version : { getVRTVersion ( ) }
68+ </ MenuItem >
69+ </ Menu >
70+ ) ;
71+
72+ const renderAvatarMenu = (
2773 < Menu
28- anchorEl = { menuRef }
74+ anchorEl = { avatarMenuRef }
2975 anchorOrigin = { { vertical : "top" , horizontal : "right" } }
30- id = "headerMenu "
76+ id = "headerAvatarMenu "
3177 keepMounted
3278 transformOrigin = { { vertical : "top" , horizontal : "right" } }
33- open = { ! ! menuRef }
79+ open = { ! ! avatarMenuRef }
3480 onClose = { handleMenuClose }
3581 >
3682 { user ?. role === "admin" && (
3783 < MenuItem
3884 component = { Link }
3985 to = { routes . USER_LIST_PAGE }
4086 onClick = { handleMenuClose }
87+ style = { styleMenuItem }
4188 >
89+ < IconButton size = "small" >
90+ < People />
91+ </ IconButton >
4292 Users
4393 </ MenuItem >
4494 ) }
4595 < MenuItem
4696 component = { Link }
4797 to = { routes . PROJECT_LIST_PAGE }
4898 onClick = { handleMenuClose }
99+ style = { styleMenuItem }
49100 >
101+ < IconButton size = "small" >
102+ < AllInbox />
103+ </ IconButton >
50104 Projects
51105 </ MenuItem >
52106 < MenuItem
53107 component = { Link }
54108 to = { routes . PROFILE_PAGE }
55109 onClick = { handleMenuClose }
110+ style = { styleMenuItem }
56111 >
112+ < IconButton size = "small" >
113+ < Face />
114+ </ IconButton >
57115 Profile
58116 </ MenuItem >
59117 < MenuItem
@@ -63,6 +121,9 @@ const Header: FunctionComponent = () => {
63121 } }
64122 data-testid = "logoutBtn"
65123 >
124+ < IconButton size = "small" >
125+ < SettingsPower />
126+ </ IconButton >
66127 Logout
67128 </ MenuItem >
68129 </ Menu >
@@ -84,11 +145,17 @@ const Header: FunctionComponent = () => {
84145 justifyContent = "space-between"
85146 alignItems = "center"
86147 >
87- < GuidedTour />
148+ < IconButton onClick = { ( event : React . MouseEvent < HTMLElement > ) =>
149+ setHelpMenuRef ( event . currentTarget )
150+ } >
151+ < Avatar >
152+ < HelpOutline />
153+ </ Avatar >
154+ </ IconButton >
88155 { loggedIn && (
89156 < IconButton
90157 onClick = { ( event : React . MouseEvent < HTMLElement > ) =>
91- setMenuRef ( event . currentTarget )
158+ setAvatarMenuRef ( event . currentTarget )
92159 }
93160 >
94161 < Avatar > { `${ user ?. firstName [ 0 ] } ${ user ?. lastName [ 0 ] } ` } </ Avatar >
@@ -99,7 +166,8 @@ const Header: FunctionComponent = () => {
99166 </ Grid >
100167 </ Toolbar >
101168 </ AppBar >
102- { renderMenu }
169+ { renderAvatarMenu }
170+ { renderHelpMenu }
103171 </ React . Fragment >
104172 ) ;
105173} ;
0 commit comments