1
1
import * as React from 'react' ;
2
+ import { useState } from 'react' ;
2
3
import AppBar from '@mui/material/AppBar' ;
3
4
import Box from '@mui/material/Box' ;
4
5
import Toolbar from '@mui/material/Toolbar' ;
@@ -19,6 +20,7 @@ import LoginDialog from './LoginDialog';
19
20
function ResponsiveAppBar ( { appState, handleLogin, handleLogout, clearError, onChangeTheme} ) {
20
21
const [ anchorElNav , setAnchorElNav ] = React . useState ( null ) ;
21
22
const [ anchorElUser , setAnchorElUser ] = React . useState ( null ) ;
23
+ const [ showLoginDialog , setShowLoginDialog ] = useState ( false ) ;
22
24
23
25
const handleOpenNavMenu = ( event ) => {
24
26
setAnchorElNav ( event . currentTarget ) ;
@@ -35,135 +37,151 @@ function ResponsiveAppBar({appState, handleLogin, handleLogout, clearError, onCh
35
37
setAnchorElUser ( null ) ;
36
38
} ;
37
39
38
- return (
39
- < AppBar position = "static" >
40
- < Container maxWidth = "xl" >
41
- < Toolbar disableGutters >
42
- { /* Desktop title */ }
43
- < StorageTwoToneIcon sx = { { display : { xs : 'none' , md : 'flex' } , mr : 1 } } />
44
- < Typography
45
- variant = "h6"
46
- noWrap
47
- component = "a"
48
- href = "/"
49
- sx = { {
50
- mr : 2 ,
51
- display : { xs : 'none' , md : 'flex' } ,
52
- fontFamily : 'monospace' ,
53
- fontWeight : 700 ,
54
- letterSpacing : '.3rem' ,
55
- color : 'inherit' ,
56
- textDecoration : 'none' ,
57
- } }
58
- >
59
- Leads App
60
- </ Typography >
40
+ const onLogin = ( ) => {
41
+ setAnchorElUser ( null ) ;
42
+ setShowLoginDialog ( true ) ;
43
+ }
61
44
62
- < Box sx = { { flexGrow : 1 , display : { xs : 'flex' , md : 'none' } } } >
63
- { /* Hamburger button */ }
64
- < IconButton
65
- size = "large"
66
- aria-label = "account of current user"
67
- aria-controls = "menu-appbar"
68
- aria-haspopup = "true"
69
- onClick = { handleOpenNavMenu }
70
- color = "inherit"
71
- >
72
- < MenuIcon />
73
- </ IconButton >
45
+ const onLogout = ( ) => {
46
+ setAnchorElUser ( null ) ;
47
+ handleLogout ( ) ;
48
+ } ;
74
49
75
- { /* Mobile menu */ }
76
- < Menu
77
- id = "menu-appbar"
78
- anchorEl = { anchorElNav }
79
- anchorOrigin = { {
80
- vertical : 'bottom' ,
81
- horizontal : 'left' ,
82
- } }
83
- keepMounted
84
- transformOrigin = { {
85
- vertical : 'top' ,
86
- horizontal : 'left' ,
87
- } }
88
- open = { Boolean ( anchorElNav ) }
89
- onClose = { handleCloseNavMenu }
50
+ return (
51
+ < >
52
+ < AppBar position = "static" >
53
+ < Container maxWidth = "xl" >
54
+ < Toolbar disableGutters >
55
+ { /* Desktop title */ }
56
+ < StorageTwoToneIcon sx = { { display : { xs : 'none' , md : 'flex' } , mr : 1 } } />
57
+ < Typography
58
+ variant = "h6"
59
+ noWrap
60
+ component = "a"
61
+ href = "/"
90
62
sx = { {
91
- display : { xs : 'block' , md : 'none' } ,
63
+ mr : 2 ,
64
+ display : { xs : 'none' , md : 'flex' } ,
65
+ fontFamily : 'monospace' ,
66
+ fontWeight : 700 ,
67
+ letterSpacing : '.3rem' ,
68
+ color : 'inherit' ,
69
+ textDecoration : 'none' ,
92
70
} }
93
71
>
94
- < MenuItem key = "home" onClick = { handleCloseNavMenu } >
95
- < Typography textAlign = "center" > Home</ Typography >
96
- </ MenuItem >
97
- </ Menu >
98
- </ Box >
72
+ Leads App
73
+ </ Typography >
99
74
100
- { /* Mobile title */ }
101
- < StorageTwoToneIcon sx = { { display : { xs : 'flex' , md : 'none' } , mr : 1 } } />
102
- < Typography
103
- variant = "h5"
104
- noWrap
105
- component = "a"
106
- href = ""
107
- sx = { {
108
- mr : 2 ,
109
- display : { xs : 'flex' , md : 'none' } ,
110
- flexGrow : 1 ,
111
- fontFamily : 'monospace' ,
112
- fontWeight : 700 ,
113
- letterSpacing : '.3rem' ,
114
- color : 'inherit' ,
115
- textDecoration : 'none' ,
116
- } }
117
- >
118
- Leads App
119
- </ Typography >
75
+ < Box sx = { { flexGrow : 1 , display : { xs : 'flex' , md : 'none' } } } >
76
+ { /* Hamburger button */ }
77
+ < IconButton
78
+ size = "large"
79
+ aria-label = "account of current user"
80
+ aria-controls = "menu-appbar"
81
+ aria-haspopup = "true"
82
+ onClick = { handleOpenNavMenu }
83
+ color = "inherit"
84
+ >
85
+ < MenuIcon />
86
+ </ IconButton >
120
87
121
- { /* Desktop menu */ }
122
- < Box sx = { { flexGrow : 1 , display : { xs : 'none' , md : 'flex' } } } >
123
- < Button
124
- key = "home"
125
- onClick = { handleCloseNavMenu }
126
- sx = { { my : 2 , color : 'white' , display : 'block' } }
127
- >
128
- Home
129
- </ Button >
130
- </ Box >
88
+ { /* Mobile menu */ }
89
+ < Menu
90
+ id = "menu-appbar"
91
+ anchorEl = { anchorElNav }
92
+ anchorOrigin = { {
93
+ vertical : 'bottom' ,
94
+ horizontal : 'left' ,
95
+ } }
96
+ keepMounted
97
+ transformOrigin = { {
98
+ vertical : 'top' ,
99
+ horizontal : 'left' ,
100
+ } }
101
+ open = { Boolean ( anchorElNav ) }
102
+ onClose = { handleCloseNavMenu }
103
+ sx = { {
104
+ display : { xs : 'block' , md : 'none' } ,
105
+ } }
106
+ >
107
+ < MenuItem key = "home" onClick = { handleCloseNavMenu } >
108
+ < Typography textAlign = "center" > Home</ Typography >
109
+ </ MenuItem >
110
+ </ Menu >
111
+ </ Box >
131
112
132
- { /* User icon & menu */ }
133
- < Box sx = { { flexGrow : 0 } } >
134
- < Tooltip title = "User Options" >
135
- < IconButton onClick = { handleOpenUserMenu } sx = { { p : 0 } } >
136
- < Avatar { ...appState . avatarProps } />
137
- </ IconButton >
138
- </ Tooltip >
139
- < Menu
140
- sx = { { mt : '45px' } }
141
- id = "menu-appbar"
142
- anchorEl = { anchorElUser }
143
- anchorOrigin = { {
144
- vertical : 'top' ,
145
- horizontal : 'right' ,
146
- } }
147
- keepMounted
148
- transformOrigin = { {
149
- vertical : 'top' ,
150
- horizontal : 'right' ,
113
+ { /* Mobile title */ }
114
+ < StorageTwoToneIcon sx = { { display : { xs : 'flex' , md : 'none' } , mr : 1 } } />
115
+ < Typography
116
+ variant = "h5"
117
+ noWrap
118
+ component = "a"
119
+ href = ""
120
+ sx = { {
121
+ mr : 2 ,
122
+ display : { xs : 'flex' , md : 'none' } ,
123
+ flexGrow : 1 ,
124
+ fontFamily : 'monospace' ,
125
+ fontWeight : 700 ,
126
+ letterSpacing : '.3rem' ,
127
+ color : 'inherit' ,
128
+ textDecoration : 'none' ,
151
129
} }
152
- open = { Boolean ( anchorElUser ) }
153
- onClose = { handleCloseUserMenu }
154
130
>
155
- { /* Login/Logout */ }
156
- < LoginDialog appState = { appState } handleLogin = { handleLogin } handleLogout = { handleLogout } clearError = { clearError } setAnchorElUser = { setAnchorElUser } />
157
- </ Menu >
131
+ Leads App
132
+ </ Typography >
133
+
134
+ { /* Desktop menu */ }
135
+ < Box sx = { { flexGrow : 1 , display : { xs : 'none' , md : 'flex' } } } >
136
+ < Button
137
+ key = "home"
138
+ onClick = { handleCloseNavMenu }
139
+ sx = { { my : 2 , color : 'white' , display : 'block' } }
140
+ >
141
+ Home
142
+ </ Button >
143
+ </ Box >
158
144
159
- { /* Darkmode toggler */ }
160
- < IconButton sx = { { ml : 1 } } onClick = { onChangeTheme } >
161
- { appState . darkMode ? < Brightness7Icon /> : < Brightness4Icon /> }
162
- </ IconButton >
163
- </ Box >
164
- </ Toolbar >
165
- </ Container >
166
- </ AppBar >
145
+ { /* User icon & menu */ }
146
+ < Box sx = { { flexGrow : 0 } } >
147
+ < Tooltip title = "User Options" >
148
+ < IconButton onClick = { handleOpenUserMenu } sx = { { p : 0 } } >
149
+ < Avatar { ...appState . avatarProps } />
150
+ </ IconButton >
151
+ </ Tooltip >
152
+ < Menu
153
+ sx = { { mt : '45px' } }
154
+ id = "menu-appbar"
155
+ anchorEl = { anchorElUser }
156
+ anchorOrigin = { {
157
+ vertical : 'top' ,
158
+ horizontal : 'right' ,
159
+ } }
160
+ keepMounted
161
+ transformOrigin = { {
162
+ vertical : 'top' ,
163
+ horizontal : 'right' ,
164
+ } }
165
+ open = { Boolean ( anchorElUser ) }
166
+ onClose = { handleCloseUserMenu }
167
+ >
168
+ { /* Login/Logout */ }
169
+ < MenuItem disabled = { appState . isAuthenticated } aria-label = 'login' onClick = { onLogin } > Login</ MenuItem >
170
+ < MenuItem disabled = { ! appState . isAuthenticated } aria-label = 'logout' onClick = { onLogout } > Logout</ MenuItem >
171
+ </ Menu >
172
+
173
+ { /* Darkmode toggler */ }
174
+ < IconButton sx = { { ml : 1 } } onClick = { onChangeTheme } >
175
+ { appState . darkMode ? < Brightness7Icon /> : < Brightness4Icon /> }
176
+ </ IconButton >
177
+ </ Box >
178
+ </ Toolbar >
179
+ </ Container >
180
+ </ AppBar >
181
+ { showLoginDialog && (
182
+ < LoginDialog appState = { appState } open = { showLoginDialog } handleLogin = { handleLogin } clearError = { clearError }
183
+ setAnchorElUser = { setAnchorElUser } setShowLoginDialog = { ( ) => setShowLoginDialog ( false ) } /> ) }
184
+ </ >
167
185
) ;
168
186
}
169
187
0 commit comments