1234567891011121314151617181920212223242526272829303132333435363738394041 |
- 'use client'
- import { useCountDown } from 'ahooks'
- import { useEffect, useState } from 'react'
- import { useTranslation } from 'react-i18next'
- export const COUNT_DOWN_TIME_MS = 59000
- export const COUNT_DOWN_KEY = 'leftTime'
- type CountdownProps = {
- onResend?: () => void
- }
- export default function Countdown({ onResend }: CountdownProps) {
- const { t } = useTranslation()
- const [leftTime, setLeftTime] = useState(Number(localStorage.getItem(COUNT_DOWN_KEY) || COUNT_DOWN_TIME_MS))
- const [time] = useCountDown({
- leftTime,
- onEnd: () => {
- setLeftTime(0)
- localStorage.removeItem(COUNT_DOWN_KEY)
- },
- })
- const resend = async function () {
- setLeftTime(COUNT_DOWN_TIME_MS)
- localStorage.setItem(COUNT_DOWN_KEY, `${COUNT_DOWN_TIME_MS}`)
- onResend?.()
- }
- useEffect(() => {
- localStorage.setItem(COUNT_DOWN_KEY, `${time}`)
- }, [time])
- return <p className='system-xs-regular text-text-tertiary'>
- <span>{t('login.checkCode.didNotReceiveCode')}</span>
- {time > 0 && <span>{Math.round(time / 1000)}s</span>}
- {
- time <= 0 && <span className='system-xs-medium text-text-accent-secondary cursor-pointer' onClick={resend}>{t('login.checkCode.resend')}</span>
- }
- </p>
- }
|