/
index.tsx
45 lines (38 loc) · 929 Bytes
/
index.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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}. Go to{' '}
<Link href="/about">about</Link> page or{' '}
<Link href="/signout">signout</Link>.
</div>
)
}
return <p>Loading...</p>
}
export default Index