rsnext/examples/api-routes-apollo-server-and-client-auth/pages/index.js

50 lines
994 B
JavaScript

import { useEffect } from 'react'
import { useRouter } from 'next/router'
import Link from 'next/link'
import { gql, useQuery } from '@apollo/client'
const ViewerQuery = gql`
query ViewerQuery {
viewer {
id
email
}
}
`
const Index = () => {
const router = useRouter()
const { data, loading, error } = useQuery(ViewerQuery)
const viewer = data?.viewer
const shouldRedirect = !(loading || error || viewer)
useEffect(() => {
if (shouldRedirect) {
router.push('/signin')
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [shouldRedirect])
if (error) {
return <p>{error.message}</p>
}
if (viewer) {
return (
<div>
You're signed in as {viewer.email} goto{' '}
<Link href="/about">
<a>about</a>
</Link>{' '}
page. or{' '}
<Link href="/signout">
<a>signout</a>
</Link>
</div>
)
}
return <p>Loading...</p>
}
export default Index