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