You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
4.1 KiB
151 lines
4.1 KiB
import {
|
|
Box,
|
|
Flex,
|
|
Avatar,
|
|
Button,
|
|
Menu,
|
|
MenuButton,
|
|
MenuList,
|
|
MenuItem,
|
|
MenuDivider,
|
|
useColorModeValue,
|
|
Stack,
|
|
useColorMode,
|
|
SimpleGrid,
|
|
} from '@chakra-ui/react'
|
|
import Link from 'next/link'
|
|
import { MoonIcon, SunIcon } from '@chakra-ui/icons'
|
|
import Router from 'next/router'
|
|
import { useDispatch, useSelector } from 'react-redux'
|
|
import { logout, selectAuthUser } from '../store/authSlice'
|
|
import Image from 'next/image'
|
|
import { useEffect } from 'react'
|
|
import { authService } from '../services/authService'
|
|
|
|
export default function Navbar() {
|
|
const dispatch = useDispatch()
|
|
const { colorMode, toggleColorMode } = useColorMode()
|
|
const authUser = useSelector(selectAuthUser)
|
|
|
|
useEffect(() => {
|
|
const timout = setTimeout(async () => {
|
|
if (authUser) {
|
|
authService
|
|
.whoAmI()
|
|
.catch((e) => {
|
|
if (e.response?.status === 401) {
|
|
dispatch(logout())
|
|
}
|
|
})
|
|
.then((res) => {})
|
|
}
|
|
}, 5000)
|
|
return () => clearTimeout(timout)
|
|
}, [authUser, dispatch])
|
|
|
|
return (
|
|
<>
|
|
<Box
|
|
bg={useColorModeValue('gray.100', 'blue.600')}
|
|
px={4}
|
|
shadow='lg'
|
|
mb={1}
|
|
>
|
|
<Flex h={16} alignItems={'center'} justifyContent={'space-between'}>
|
|
<Link href='/' passHref>
|
|
<Flex alignItems={'center'}>
|
|
<Image
|
|
alt={'Hero Image'}
|
|
width={30}
|
|
height={30}
|
|
src={'/images/sms-gateway-logo.png'}
|
|
style={{ borderRadius: '50%' }}
|
|
/>
|
|
<Box style={{ cursor: 'pointer', marginLeft: '5px' }}>
|
|
TextBee
|
|
</Box>
|
|
</Flex>
|
|
</Link>
|
|
|
|
<Stack alignItems='center' direction='row' spacing={5}>
|
|
<Button onClick={toggleColorMode} aria-label={'Toggle Color Mode'}>
|
|
{colorMode === 'light' ? <MoonIcon /> : <SunIcon />}
|
|
</Button>
|
|
|
|
{/* <Menu>
|
|
<Link
|
|
href='https://www.patreon.com/bePatron?u=124342375'
|
|
passHref
|
|
>
|
|
<MenuButton>Support</MenuButton>
|
|
</Link>
|
|
</Menu> */}
|
|
|
|
<Menu>
|
|
<Link href='https://github.com/vernu/textbee' passHref>
|
|
<MenuButton>Github</MenuButton>
|
|
</Link>
|
|
</Menu>
|
|
|
|
{!authUser && (
|
|
<Menu>
|
|
<Link href='/login' passHref>
|
|
<MenuButton>Login</MenuButton>
|
|
</Link>
|
|
<Link href='/register' passHref>
|
|
<MenuButton>Register</MenuButton>
|
|
</Link>
|
|
</Menu>
|
|
)}
|
|
|
|
{authUser && (
|
|
<Menu>
|
|
<MenuButton
|
|
as={Button}
|
|
rounded={'full'}
|
|
variant={'link'}
|
|
cursor={'pointer'}
|
|
minW={0}
|
|
>
|
|
<Avatar
|
|
size={'sm'}
|
|
name={authUser.name}
|
|
src={authUser?.avatar}
|
|
/>
|
|
</MenuButton>
|
|
<MenuList alignItems={'center'}>
|
|
<MenuItem>
|
|
<SimpleGrid columns={2} spacing={3}>
|
|
<Avatar
|
|
size={'sm'}
|
|
name={authUser.name}
|
|
src={authUser?.avatar}
|
|
/>
|
|
{authUser?.name}
|
|
</SimpleGrid>
|
|
</MenuItem>
|
|
|
|
<MenuDivider />
|
|
<MenuItem
|
|
onClick={() => {
|
|
Router.push('/dashboard')
|
|
}}
|
|
>
|
|
Dashboard
|
|
</MenuItem>
|
|
<MenuItem
|
|
onClick={() => {
|
|
dispatch(logout())
|
|
}}
|
|
>
|
|
Logout
|
|
</MenuItem>
|
|
</MenuList>
|
|
</Menu>
|
|
)}
|
|
</Stack>
|
|
</Flex>
|
|
</Box>
|
|
</>
|
|
)
|
|
}
|