import { FC, useEffect } from 'react' import { useAuthentication, useVerifyOtp } from '../hooks/useAuthData' import { Button } from '@/components/ui/button' import OTPInput from 'react-otp-input' import { useForm } from 'react-hook-form' import { VerifyOtpType } from '../types/Types' import * as yup from "yup" import { yupResolver } from "@hookform/resolvers/yup" import { useAuthStore } from '../store/AuthStore' import { toast } from '@/components/Toast' import { extractErrorMessage } from '@/helpers/errorUtils' import Error from '@/components/Error' import { setRefreshToken, setToken } from '@/config/func' import { useCountDown } from '@/hooks/useCountDown' const LoginStep2: FC = () => { const { phone } = useAuthStore() const { isPending, mutate: verifyOtp } = useVerifyOtp() const { mutate: authentication, isPending: isAuthenticationPending } = useAuthentication(); const { value: countdownValue, reset: resetCountdown } = useCountDown(2, true, () => { // When countdown ends, enable resend button }) const validationSchema = yup .object({ otpCode: yup.string().required('کد را وارد کنید'), phone: yup.string().required('شماره تلفن خود را وارد کنید'), }) .required() const { handleSubmit, watch, setValue, formState: { errors }, } = useForm({ resolver: yupResolver(validationSchema), defaultValues: { phone: phone, }, }) const onSubmit = (data: VerifyOtpType) => { verifyOtp(data, { onSuccess: (data) => { toast('ورود با موفقیت انجام شد', 'success') setToken(data?.results?.data?.accessToken?.token) setRefreshToken(data?.results?.data?.refreshToken?.token) window.location.href = '/' }, onError: (error: Error) => { toast(extractErrorMessage(error), 'error') } }) } const handleResendOtp = () => { authentication({ phone: phone, }, { onSuccess: () => { resetCountdown() toast('کد جدید ارسال شد', 'success') } }) } useEffect(() => { if (watch('otpCode')?.length === 5) { onSubmit({ otpCode: watch('otpCode'), phone: phone, }) } // eslint-disable-next-line react-hooks/exhaustive-deps }, [watch('otpCode')]) return (
کد دریافتی را وارد نمایید
setValue('otpCode', otp)} renderInput={(props) => } />
{ errors.otpCode?.message && }
{/* Countdown and Resend Section */}
کد فعالسازی را دریافت نکردید؟ {countdownValue !== '00:00' ? ( {countdownValue} ) : ( )}
) } export default LoginStep2