mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
1import {useMutation} from '@tanstack/react-query'
2
3import {useAgent} from '#/state/session'
4import {useRequestEmailUpdate} from '#/components/dialogs/EmailDialog/data/useRequestEmailUpdate'
5
6async function updateEmailAndRefreshSession(
7 agent: ReturnType<typeof useAgent>,
8 email: string,
9 token?: string,
10) {
11 await agent.com.atproto.server.updateEmail({email: email.trim(), token})
12 await agent.resumeSession(agent.session!)
13}
14
15export function useUpdateEmail() {
16 const agent = useAgent()
17 const {mutateAsync: requestEmailUpdate} = useRequestEmailUpdate()
18
19 return useMutation<
20 {status: 'tokenRequired' | 'success'},
21 Error,
22 {email: string; token?: string}
23 >({
24 mutationFn: async ({email, token}: {email: string; token?: string}) => {
25 if (token) {
26 await updateEmailAndRefreshSession(agent, email, token)
27 return {
28 status: 'success',
29 }
30 } else {
31 const {tokenRequired} = await requestEmailUpdate()
32 if (tokenRequired) {
33 return {
34 status: 'tokenRequired',
35 }
36 } else {
37 await updateEmailAndRefreshSession(agent, email, token)
38 return {
39 status: 'success',
40 }
41 }
42 }
43 },
44 })
45}