Next.js template
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. import AdbIcon from '@mui/icons-material/Adb';
  2. import MenuIcon from '@mui/icons-material/Menu';
  3. import AppBar from '@mui/material/AppBar';
  4. import Avatar from '@mui/material/Avatar';
  5. import Box from '@mui/material/Box';
  6. import Button from '@mui/material/Button';
  7. import Container from '@mui/material/Container';
  8. import IconButton from '@mui/material/IconButton';
  9. import Menu from '@mui/material/Menu';
  10. import MenuItem from '@mui/material/MenuItem';
  11. import Toolbar from '@mui/material/Toolbar';
  12. import Tooltip from '@mui/material/Tooltip';
  13. import Typography from '@mui/material/Typography';
  14. import { signOut, useSession } from 'next-auth/react';
  15. import Link from 'next/link';
  16. import { useState } from 'react';
  17. import { LOGIN_PAGE, PROFILE_PAGE } from '../../../constants/pages';
  18. const pages = ['Link 1', 'Link 2', 'Link 3'];
  19. const Navbar = () => {
  20. const { data: session } = useSession();
  21. const [anchorElNav, setAnchorElNav] = useState(null);
  22. const [anchorElUser, setAnchorElUser] = useState(null);
  23. const handleOpenNavMenu = (event) => {
  24. setAnchorElNav(event.currentTarget);
  25. };
  26. const handleOpenUserMenu = (event) => {
  27. setAnchorElUser(event.currentTarget);
  28. };
  29. const handleCloseNavMenu = () => {
  30. setAnchorElNav(null);
  31. };
  32. const handleCloseUserMenu = () => {
  33. setAnchorElUser(null);
  34. };
  35. function logoutHandler() {
  36. signOut();
  37. }
  38. console.log(session);
  39. return (
  40. <AppBar position="static">
  41. <Container maxWidth="xl">
  42. <Toolbar disableGutters>
  43. <AdbIcon sx={{ display: { xs: 'none', md: 'flex' }, mr: 1 }} />
  44. <Typography
  45. variant="h6"
  46. noWrap
  47. sx={{
  48. mr: 2,
  49. display: { xs: 'none', md: 'flex' },
  50. fontFamily: 'monospace',
  51. fontWeight: 700,
  52. letterSpacing: '.3rem',
  53. color: 'inherit',
  54. textDecoration: 'none',
  55. }}
  56. >
  57. LOGO
  58. </Typography>
  59. <Box sx={{ flexGrow: 1, display: { xs: 'flex', md: 'none' } }}>
  60. <IconButton
  61. size="large"
  62. aria-label="account of current user"
  63. aria-controls="menu-appbar"
  64. aria-haspopup="true"
  65. onClick={handleOpenNavMenu}
  66. color="inherit"
  67. >
  68. <MenuIcon />
  69. </IconButton>
  70. <Menu
  71. id="menu-appbar"
  72. anchorEl={anchorElNav}
  73. anchorOrigin={{
  74. vertical: 'bottom',
  75. horizontal: 'left',
  76. }}
  77. keepMounted
  78. transformOrigin={{
  79. vertical: 'top',
  80. horizontal: 'left',
  81. }}
  82. open={Boolean(anchorElNav)}
  83. onClose={handleCloseNavMenu}
  84. sx={{
  85. display: { xs: 'block', md: 'none' },
  86. }}
  87. >
  88. {pages.map((page) => (
  89. <MenuItem key={page} onClick={handleCloseNavMenu}>
  90. <Typography textAlign="center">{page}</Typography>
  91. </MenuItem>
  92. ))}
  93. </Menu>
  94. </Box>
  95. <AdbIcon sx={{ display: { xs: 'flex', md: 'none' }, mr: 1 }} />
  96. <Typography
  97. variant="h5"
  98. noWrap
  99. component="a"
  100. href=""
  101. sx={{
  102. mr: 2,
  103. display: { xs: 'flex', md: 'none' },
  104. flexGrow: 1,
  105. fontFamily: 'monospace',
  106. fontWeight: 700,
  107. letterSpacing: '.3rem',
  108. color: 'inherit',
  109. textDecoration: 'none',
  110. }}
  111. >
  112. LOGO
  113. </Typography>
  114. <Box sx={{ flexGrow: 1, display: { xs: 'none', md: 'flex' } }}>
  115. {pages.map((page) => (
  116. <Button
  117. key={page}
  118. onClick={handleCloseNavMenu}
  119. sx={{ my: 2, color: 'white', display: 'block' }}
  120. >
  121. {page}
  122. </Button>
  123. ))}
  124. </Box>
  125. <Box sx={{ flexGrow: 0 }}>
  126. {session ? (
  127. <>
  128. <Tooltip title="Open settings">
  129. <IconButton onClick={handleOpenUserMenu} sx={{ p: 0 }}>
  130. <Avatar
  131. alt="Profile picture"
  132. src="https://www.business2community.com/wp-content/uploads/2017/08/blank-profile-picture-973460_640.png"
  133. />
  134. </IconButton>
  135. </Tooltip>
  136. <Menu
  137. sx={{ mt: '45px' }}
  138. id="menu-appbar"
  139. anchorEl={anchorElUser}
  140. anchorOrigin={{
  141. vertical: 'top',
  142. horizontal: 'right',
  143. }}
  144. keepMounted
  145. transformOrigin={{
  146. vertical: 'top',
  147. horizontal: 'right',
  148. }}
  149. open={Boolean(anchorElUser)}
  150. onClose={handleCloseUserMenu}
  151. >
  152. <MenuItem onClick={handleCloseUserMenu}>
  153. <Link href={PROFILE_PAGE}>
  154. <a
  155. style={{
  156. textDecoration: 'none',
  157. color: 'inherit',
  158. fontSize: 15,
  159. marginLeft: 6,
  160. }}
  161. >
  162. PROFILE
  163. </a>
  164. </Link>
  165. </MenuItem>
  166. <MenuItem onClick={handleCloseUserMenu}>
  167. <Button color="inherit" onClick={logoutHandler}>
  168. Logout
  169. </Button>
  170. </MenuItem>
  171. </Menu>
  172. </>
  173. ) : (
  174. <Button color="inherit">
  175. <Link href={LOGIN_PAGE}>
  176. <a
  177. style={{
  178. textDecoration: 'none',
  179. color: 'inherit',
  180. fontSize: 17,
  181. }}
  182. >
  183. Login
  184. </a>
  185. </Link>
  186. </Button>
  187. )}
  188. </Box>
  189. </Toolbar>
  190. </Container>
  191. </AppBar>
  192. );
  193. };
  194. export default Navbar;