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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
import styles from 'styles/Main.module.scss'
import {useState, useEffect} from 'react'
import {useRouter} from 'next/router'
import useUser from 'lib/useUser'
import fetchJson from 'lib/fetchJson'
import {Layout} from 'components'
const Verify = () => {
const router = useRouter()
const {user, mutateUser} = useUser({
redirectToLogin: true,
redirectToApps: true,
})
const [errorMsg, setErrorMsg] = useState('')
const [sending, setSending] = useState(false)
const [resent, setResent] = useState(false)
const handleSendMail = async e => {
e.preventDefault()
setErrorMsg('')
setSending(true)
try {
await fetch('/api/verify')
setResent(true)
} catch (error) {
setErrorMsg('Could not send verification email')
} finally {
setSending(false)
}
}
const handleKey = async e => {
e.preventDefault()
const key = e.currentTarget.key.value
try {
mutateUser(
await fetchJson('/api/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({_id: user._id, key}),
})
)
} catch (err) {
setErrorMsg('Could not verify user')
}
}
return (
<Layout>
{!user
? (
<div className="window window--popup">
<p>Loading...</p>
</div>
) : (
<div className={`window window--popup ${styles.verify}`}>
<p>One last step missing</p>
<p>{`To start using Notes App type the verification code we sent to your email (${user.email}):`}</p>
<form onSubmit={handleKey}>
<input type="text" placeholder="Verification key" name="key" />
<button className="window__button" type="submit">Verify</button>
</form>
{
sending
? (
<p>Sending...</p>
) : (
resent
? (
<p>Mail was successfully sent again, check your mailbox!</p>
) : (
<p>If you didn't get verification email
<span className={styles.email} onClick={handleSendMail}>send it again</span>.
</p>
)
)
}
{errorMsg && <p className={styles.error}>{errorMsg}</p>}
</div>
)
}
</Layout>
)
}
export default Verify
|