import React from 'react' import {View} from 'react-native' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useAgent, useSession} from 'state/session' import {atoms as a} from '#/alf' import {Button, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {DialogControlProps} from '#/components/Dialog' import {useIntentDialogs} from '#/components/intents/IntentDialogs' import {Loader} from '#/components/Loader' import {Text} from '#/components/Typography' export function VerifyEmailIntentDialog() { const {verifyEmailDialogControl: control} = useIntentDialogs() return ( ) } function Inner({control}: {control: DialogControlProps}) { const {_} = useLingui() const {verifyEmailState: state} = useIntentDialogs() const [status, setStatus] = React.useState< 'loading' | 'success' | 'failure' | 'resent' >('loading') const [sending, setSending] = React.useState(false) const agent = useAgent() const {currentAccount} = useSession() React.useEffect(() => { ;(async () => { if (!state?.code) { return } try { await agent.com.atproto.server.confirmEmail({ email: (currentAccount?.email || '').trim(), token: state.code.trim(), }) setStatus('success') } catch (e) { setStatus('failure') } })() }, [agent.com.atproto.server, currentAccount?.email, state?.code]) const onPressResendEmail = async () => { setSending(true) await agent.com.atproto.server.requestEmailConfirmation() setSending(false) setStatus('resent') } return ( {status === 'loading' ? ( ) : status === 'success' ? ( <> Email Verified Thanks, you have successfully verified your email address. ) : status === 'failure' ? ( <> Invalid Verification Code The verification code you have provided is invalid. Please make sure that you have used the correct verification link or request a new one. ) : ( <> Email Resent We have sent another verification email to{' '} {currentAccount?.email} . )} {status !== 'loading' ? ( {status === 'failure' ? ( ) : null} ) : null} ) }