|
|
|
@@ -0,0 +1,203 @@ |
|
|
|
import AdbIcon from '@mui/icons-material/Adb'; |
|
|
|
import MenuIcon from '@mui/icons-material/Menu'; |
|
|
|
import AppBar from '@mui/material/AppBar'; |
|
|
|
import Avatar from '@mui/material/Avatar'; |
|
|
|
import Box from '@mui/material/Box'; |
|
|
|
import Button from '@mui/material/Button'; |
|
|
|
import Container from '@mui/material/Container'; |
|
|
|
import IconButton from '@mui/material/IconButton'; |
|
|
|
import Menu from '@mui/material/Menu'; |
|
|
|
import MenuItem from '@mui/material/MenuItem'; |
|
|
|
import Toolbar from '@mui/material/Toolbar'; |
|
|
|
import Tooltip from '@mui/material/Tooltip'; |
|
|
|
import Typography from '@mui/material/Typography'; |
|
|
|
import { signOut, useSession } from 'next-auth/react'; |
|
|
|
import Link from 'next/link'; |
|
|
|
import { useState } from 'react'; |
|
|
|
import { LOGIN_PAGE, PROFILE_PAGE } from '../../../constants/pages'; |
|
|
|
|
|
|
|
const pages = ['Link 1', 'Link 2', 'Link 3']; |
|
|
|
|
|
|
|
const Navbar = () => { |
|
|
|
const { data: session } = useSession(); |
|
|
|
const [anchorElNav, setAnchorElNav] = useState(null); |
|
|
|
const [anchorElUser, setAnchorElUser] = useState(null); |
|
|
|
|
|
|
|
const handleOpenNavMenu = (event) => { |
|
|
|
setAnchorElNav(event.currentTarget); |
|
|
|
}; |
|
|
|
const handleOpenUserMenu = (event) => { |
|
|
|
setAnchorElUser(event.currentTarget); |
|
|
|
}; |
|
|
|
|
|
|
|
const handleCloseNavMenu = () => { |
|
|
|
setAnchorElNav(null); |
|
|
|
}; |
|
|
|
|
|
|
|
const handleCloseUserMenu = () => { |
|
|
|
setAnchorElUser(null); |
|
|
|
}; |
|
|
|
|
|
|
|
function logoutHandler() { |
|
|
|
signOut(); |
|
|
|
} |
|
|
|
|
|
|
|
console.log(session); |
|
|
|
return ( |
|
|
|
<AppBar position="static"> |
|
|
|
<Container maxWidth="xl"> |
|
|
|
<Toolbar disableGutters> |
|
|
|
<AdbIcon sx={{ display: { xs: 'none', md: 'flex' }, mr: 1 }} /> |
|
|
|
<Typography |
|
|
|
variant="h6" |
|
|
|
noWrap |
|
|
|
sx={{ |
|
|
|
mr: 2, |
|
|
|
display: { xs: 'none', md: 'flex' }, |
|
|
|
fontFamily: 'monospace', |
|
|
|
fontWeight: 700, |
|
|
|
letterSpacing: '.3rem', |
|
|
|
color: 'inherit', |
|
|
|
textDecoration: 'none', |
|
|
|
}} |
|
|
|
> |
|
|
|
LOGO |
|
|
|
</Typography> |
|
|
|
|
|
|
|
<Box sx={{ flexGrow: 1, display: { xs: 'flex', md: 'none' } }}> |
|
|
|
<IconButton |
|
|
|
size="large" |
|
|
|
aria-label="account of current user" |
|
|
|
aria-controls="menu-appbar" |
|
|
|
aria-haspopup="true" |
|
|
|
onClick={handleOpenNavMenu} |
|
|
|
color="inherit" |
|
|
|
> |
|
|
|
<MenuIcon /> |
|
|
|
</IconButton> |
|
|
|
<Menu |
|
|
|
id="menu-appbar" |
|
|
|
anchorEl={anchorElNav} |
|
|
|
anchorOrigin={{ |
|
|
|
vertical: 'bottom', |
|
|
|
horizontal: 'left', |
|
|
|
}} |
|
|
|
keepMounted |
|
|
|
transformOrigin={{ |
|
|
|
vertical: 'top', |
|
|
|
horizontal: 'left', |
|
|
|
}} |
|
|
|
open={Boolean(anchorElNav)} |
|
|
|
onClose={handleCloseNavMenu} |
|
|
|
sx={{ |
|
|
|
display: { xs: 'block', md: 'none' }, |
|
|
|
}} |
|
|
|
> |
|
|
|
{pages.map((page) => ( |
|
|
|
<MenuItem key={page} onClick={handleCloseNavMenu}> |
|
|
|
<Typography textAlign="center">{page}</Typography> |
|
|
|
</MenuItem> |
|
|
|
))} |
|
|
|
</Menu> |
|
|
|
</Box> |
|
|
|
<AdbIcon sx={{ display: { xs: 'flex', md: 'none' }, mr: 1 }} /> |
|
|
|
<Typography |
|
|
|
variant="h5" |
|
|
|
noWrap |
|
|
|
component="a" |
|
|
|
href="" |
|
|
|
sx={{ |
|
|
|
mr: 2, |
|
|
|
display: { xs: 'flex', md: 'none' }, |
|
|
|
flexGrow: 1, |
|
|
|
fontFamily: 'monospace', |
|
|
|
fontWeight: 700, |
|
|
|
letterSpacing: '.3rem', |
|
|
|
color: 'inherit', |
|
|
|
textDecoration: 'none', |
|
|
|
}} |
|
|
|
> |
|
|
|
LOGO |
|
|
|
</Typography> |
|
|
|
<Box sx={{ flexGrow: 1, display: { xs: 'none', md: 'flex' } }}> |
|
|
|
{pages.map((page) => ( |
|
|
|
<Button |
|
|
|
key={page} |
|
|
|
onClick={handleCloseNavMenu} |
|
|
|
sx={{ my: 2, color: 'white', display: 'block' }} |
|
|
|
> |
|
|
|
{page} |
|
|
|
</Button> |
|
|
|
))} |
|
|
|
</Box> |
|
|
|
|
|
|
|
<Box sx={{ flexGrow: 0 }}> |
|
|
|
{session ? ( |
|
|
|
<> |
|
|
|
<Tooltip title="Open settings"> |
|
|
|
<IconButton onClick={handleOpenUserMenu} sx={{ p: 0 }}> |
|
|
|
<Avatar |
|
|
|
alt="Profile picture" |
|
|
|
src="https://www.business2community.com/wp-content/uploads/2017/08/blank-profile-picture-973460_640.png" |
|
|
|
/> |
|
|
|
</IconButton> |
|
|
|
</Tooltip> |
|
|
|
<Menu |
|
|
|
sx={{ mt: '45px' }} |
|
|
|
id="menu-appbar" |
|
|
|
anchorEl={anchorElUser} |
|
|
|
anchorOrigin={{ |
|
|
|
vertical: 'top', |
|
|
|
horizontal: 'right', |
|
|
|
}} |
|
|
|
keepMounted |
|
|
|
transformOrigin={{ |
|
|
|
vertical: 'top', |
|
|
|
horizontal: 'right', |
|
|
|
}} |
|
|
|
open={Boolean(anchorElUser)} |
|
|
|
onClose={handleCloseUserMenu} |
|
|
|
> |
|
|
|
<MenuItem onClick={handleCloseUserMenu}> |
|
|
|
<Link href={PROFILE_PAGE}> |
|
|
|
<a |
|
|
|
style={{ |
|
|
|
textDecoration: 'none', |
|
|
|
color: 'inherit', |
|
|
|
fontSize: 15, |
|
|
|
marginLeft: 6, |
|
|
|
}} |
|
|
|
> |
|
|
|
PROFILE |
|
|
|
</a> |
|
|
|
</Link> |
|
|
|
</MenuItem> |
|
|
|
<MenuItem onClick={handleCloseUserMenu}> |
|
|
|
<Button color="inherit" onClick={logoutHandler}> |
|
|
|
Logout |
|
|
|
</Button> |
|
|
|
</MenuItem> |
|
|
|
</Menu> |
|
|
|
</> |
|
|
|
) : ( |
|
|
|
<Button color="inherit"> |
|
|
|
<Link href={LOGIN_PAGE}> |
|
|
|
<a |
|
|
|
style={{ |
|
|
|
textDecoration: 'none', |
|
|
|
color: 'inherit', |
|
|
|
fontSize: 17, |
|
|
|
}} |
|
|
|
> |
|
|
|
Login |
|
|
|
</a> |
|
|
|
</Link> |
|
|
|
</Button> |
|
|
|
)} |
|
|
|
</Box> |
|
|
|
</Toolbar> |
|
|
|
</Container> |
|
|
|
</AppBar> |
|
|
|
); |
|
|
|
}; |
|
|
|
export default Navbar; |