|
|
|
|
@ -15,6 +15,8 @@ import {
|
|
|
|
|
verifyEmail,
|
|
|
|
|
} from '@/service/common'
|
|
|
|
|
import { noop } from 'lodash-es'
|
|
|
|
|
import { asyncRunSafe } from '@/utils'
|
|
|
|
|
import type { ResponseError } from '@/service/fetch'
|
|
|
|
|
|
|
|
|
|
type Props = {
|
|
|
|
|
show: boolean
|
|
|
|
|
@ -39,6 +41,7 @@ const EmailChangeModal = ({ onClose, email, show }: Props) => {
|
|
|
|
|
const [time, setTime] = useState<number>(0)
|
|
|
|
|
const [stepToken, setStepToken] = useState<string>('')
|
|
|
|
|
const [newEmailExited, setNewEmailExited] = useState<boolean>(false)
|
|
|
|
|
const [unAvailableEmail, setUnAvailableEmail] = useState<boolean>(false)
|
|
|
|
|
const [isCheckingEmail, setIsCheckingEmail] = useState<boolean>(false)
|
|
|
|
|
|
|
|
|
|
const startCount = () => {
|
|
|
|
|
@ -124,9 +127,17 @@ const EmailChangeModal = ({ onClose, email, show }: Props) => {
|
|
|
|
|
email,
|
|
|
|
|
})
|
|
|
|
|
setNewEmailExited(false)
|
|
|
|
|
setUnAvailableEmail(false)
|
|
|
|
|
}
|
|
|
|
|
catch {
|
|
|
|
|
setNewEmailExited(true)
|
|
|
|
|
catch (e: any) {
|
|
|
|
|
if (e.status === 400) {
|
|
|
|
|
const [, errRespData] = await asyncRunSafe<ResponseError>(e.json())
|
|
|
|
|
const { code } = errRespData || {}
|
|
|
|
|
if (code === 'email_already_in_use')
|
|
|
|
|
setNewEmailExited(true)
|
|
|
|
|
if (code === 'account_in_freeze')
|
|
|
|
|
setUnAvailableEmail(true)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
setIsCheckingEmail(false)
|
|
|
|
|
@ -291,15 +302,18 @@ const EmailChangeModal = ({ onClose, email, show }: Props) => {
|
|
|
|
|
placeholder={t('common.account.changeEmail.emailPlaceholder')}
|
|
|
|
|
value={mail}
|
|
|
|
|
onChange={e => handleNewEmailValueChange(e.target.value)}
|
|
|
|
|
destructive={newEmailExited}
|
|
|
|
|
destructive={newEmailExited || unAvailableEmail}
|
|
|
|
|
/>
|
|
|
|
|
{newEmailExited && (
|
|
|
|
|
<div className='body-xs-regular mt-1 py-0.5 text-text-destructive'>{t('common.account.changeEmail.existingEmail')}</div>
|
|
|
|
|
)}
|
|
|
|
|
{unAvailableEmail && (
|
|
|
|
|
<div className='body-xs-regular mt-1 py-0.5 text-text-destructive'>{t('common.account.changeEmail.unAvailableEmail')}</div>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
<div className='mt-3 space-y-2'>
|
|
|
|
|
<Button
|
|
|
|
|
disabled={!mail || newEmailExited || isCheckingEmail || !isValidEmail(mail)}
|
|
|
|
|
disabled={!mail || newEmailExited || unAvailableEmail || isCheckingEmail || !isValidEmail(mail)}
|
|
|
|
|
className='!w-full'
|
|
|
|
|
variant='primary'
|
|
|
|
|
onClick={sendCodeToNewEmail}
|
|
|
|
|
|