import {useEffect, useState} 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, useBreakpoints, useTheme} from '#/alf' import {Button, ButtonIcon, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {type DialogControlProps} from '#/components/Dialog' import {useConfirmEmail} from '#/components/dialogs/EmailDialog/data/useConfirmEmail' import {Divider} from '#/components/Divider' import {ArrowRotateCounterClockwise_Stroke2_Corner0_Rounded as Resend} from '#/components/icons/ArrowRotate' import {useIntentDialogs} from '#/components/intents/IntentDialogs' import {Loader} from '#/components/Loader' import {Text} from '#/components/Typography' import {IS_NATIVE} from '#/env' export function VerifyEmailIntentDialog() { const {verifyEmailDialogControl: control} = useIntentDialogs() return ( ) } function Inner({}: {control: DialogControlProps}) { const t = useTheme() const {gtMobile} = useBreakpoints() const {_} = useLingui() const {verifyEmailState: state} = useIntentDialogs() const [status, setStatus] = useState< 'loading' | 'success' | 'failure' | 'resent' >('loading') const [sending, setSending] = useState(false) const agent = useAgent() const {currentAccount} = useSession() const {mutate: confirmEmail} = useConfirmEmail({ onSuccess: () => setStatus('success'), onError: () => setStatus('failure'), }) useEffect(() => { if (state?.code) { confirmEmail({token: state.code}) } }, [state?.code, confirmEmail]) 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. You can close this dialog. ) : 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 === 'failure' && ( <> )} ) }