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 {useMutation} from '@tanstack/react-query'
import {useAgent} from '#/state/session'
import {useRequestEmailUpdate} from '#/components/dialogs/EmailDialog/data/useRequestEmailUpdate'
async function updateEmailAndRefreshSession(
agent: ReturnType<typeof useAgent>,
email: string,
token?: string,
) {
await agent.com.atproto.server.updateEmail({email: email.trim(), token})
await agent.resumeSession(agent.session!)
}
export function useUpdateEmail() {
const agent = useAgent()
const {mutateAsync: requestEmailUpdate} = useRequestEmailUpdate()
return useMutation<
{status: 'tokenRequired' | 'success'},
Error,
{email: string; token?: string}
>({
mutationFn: async ({email, token}: {email: string; token?: string}) => {
if (token) {
await updateEmailAndRefreshSession(agent, email, token)
return {
status: 'success',
}
} else {
const {tokenRequired} = await requestEmailUpdate()
if (tokenRequired) {
return {
status: 'tokenRequired',
}
} else {
await updateEmailAndRefreshSession(agent, email, token)
return {
status: 'success',
}
}
}
},
})
}
|