---
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
'use client'
|
||||
import { LogoutDocument, MeDocument, PostsDocument } from '@/generated/graphql/graphql'
|
||||
import { useMutation, useQuery } from '@apollo/client/react'
|
||||
import { Link } from '@chakra-ui/next-js'
|
||||
import { Box, Button, Flex, Text } from '@chakra-ui/react'
|
||||
import { usePathname, useRouter } from 'next/navigation'
|
||||
|
||||
const NavBar: React.FC = () => {
|
||||
const { data, loading, refetch } = useQuery(MeDocument)
|
||||
const { refetch: refetchPosts } = useQuery(PostsDocument)
|
||||
const [logout] = useMutation(LogoutDocument)
|
||||
const router = useRouter()
|
||||
const pathname = usePathname()
|
||||
|
||||
return (
|
||||
<Flex bgColor='tan' paddingY={4} paddingX={6} ml='auto' minH='72px' alignItems='center'>
|
||||
<Box mr='auto'>
|
||||
<Link href='/'>
|
||||
<Button>Home</Button>
|
||||
</Link>
|
||||
</Box>
|
||||
<Box ml='auto'>
|
||||
{
|
||||
loading &&
|
||||
<Text>Loading...</Text>
|
||||
}
|
||||
{
|
||||
!loading && !data?.me &&
|
||||
<>
|
||||
<Link href='/login' mr={4}>
|
||||
<Button>Login</Button>
|
||||
</Link>
|
||||
<Link href='/register' mr={4}>
|
||||
<Button>Register</Button>
|
||||
</Link>
|
||||
</>
|
||||
}
|
||||
{
|
||||
data?.me &&
|
||||
<Flex alignItems='center'>
|
||||
<Text mr={4}>Logged in as {data.me.username}!</Text>
|
||||
<Button
|
||||
onClick={async () => {
|
||||
await logout()
|
||||
await refetch() // Calling refetch will also refetch the data for any other components using useQuery(MeDocument)
|
||||
await refetchPosts()
|
||||
if (pathname == '/') {
|
||||
router.refresh()
|
||||
}
|
||||
else {
|
||||
router.push('/')
|
||||
}
|
||||
|
||||
}}
|
||||
>
|
||||
Log out
|
||||
</Button>
|
||||
</Flex>
|
||||
}
|
||||
</Box>
|
||||
</Flex>
|
||||
)
|
||||
}
|
||||
export default NavBar
|
||||
Reference in New Issue
Block a user