'use client' import { useTranslation } from 'react-i18next' import { useCallback, useEffect, useState } from 'react' import Link from 'next/link' import { useAccountDeleteStore, useConfirmDeleteAccount, useSendDeleteAccountEmail } from '../state' import Input from '@/app/components/base/input' import Button from '@/app/components/base/button' import Countdown from '@/app/components/signin/countdown' const CODE_EXP = /[A-Za-z\d]{6}/gi type DeleteAccountProps = { onCancel: () => void onConfirm: () => void } export default function VerifyEmail(props: DeleteAccountProps) { const { t } = useTranslation() const emailToken = useAccountDeleteStore(state => state.sendEmailToken) const [verificationCode, setVerificationCode] = useState() const [shouldButtonDisabled, setShouldButtonDisabled] = useState(true) const { mutate: sendEmail } = useSendDeleteAccountEmail() const { isPending: isDeleting, mutateAsync: confirmDeleteAccount } = useConfirmDeleteAccount() useEffect(() => { setShouldButtonDisabled(!(verificationCode && CODE_EXP.test(verificationCode)) || isDeleting) }, [verificationCode, isDeleting]) const handleConfirm = useCallback(async () => { try { const ret = await confirmDeleteAccount({ code: verificationCode!, token: emailToken }) if (ret.result === 'success') props.onConfirm() } catch (error) { console.error(error) } }, [emailToken, verificationCode, confirmDeleteAccount, props]) return <>
{t('common.account.deleteTip')}
{t('common.account.deletePrivacyLinkTip')} {t('common.account.deletePrivacyLink')}
{ setVerificationCode(e.target.value) }} />
}