Bluesky app fork with some witchin' additions 馃挮
at main 1.3 kB view raw
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}