about summary refs log tree commit diff
path: root/src/components/dialogs/EmailDialog/data/useConfirmEmail.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/dialogs/EmailDialog/data/useConfirmEmail.ts')
-rw-r--r--src/components/dialogs/EmailDialog/data/useConfirmEmail.ts29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/components/dialogs/EmailDialog/data/useConfirmEmail.ts b/src/components/dialogs/EmailDialog/data/useConfirmEmail.ts
new file mode 100644
index 000000000..73f824fcc
--- /dev/null
+++ b/src/components/dialogs/EmailDialog/data/useConfirmEmail.ts
@@ -0,0 +1,29 @@
+import {useMutation} from '@tanstack/react-query'
+
+import {useAgent, useSession} from '#/state/session'
+import {useUpdateAccountEmailStateQueryCache} from '#/components/dialogs/EmailDialog/data/useAccountEmailState'
+
+export function useConfirmEmail() {
+  const agent = useAgent()
+  const {currentAccount} = useSession()
+  const updateAccountEmailStateQueryCache =
+    useUpdateAccountEmailStateQueryCache()
+
+  return useMutation({
+    mutationFn: async ({token}: {token: string}) => {
+      if (!currentAccount?.email) {
+        throw new Error('No email found for the current account')
+      }
+
+      await agent.com.atproto.server.confirmEmail({
+        email: currentAccount.email,
+        token: token.trim(),
+      })
+      const {data} = await agent.resumeSession(agent.session!)
+      updateAccountEmailStateQueryCache({
+        isEmailVerified: !!data.emailConfirmed,
+        email2FAEnabled: !!data.emailAuthFactor,
+      })
+    },
+  })
+}