"use client"; import { useOtpRequest } from "@/app/auth/login/hooks/useAuthData"; import { LoginOTPRequestType } from "@/app/auth/login/types/Types"; import Button from "@/components/button/PrimaryButton"; import InputField from "@/components/input/InputField"; import { toast } from "@/components/Toast"; import { AUTH_PAGE_ELEMENT, AUTH_STEP } from "@/enums"; import { useCountdown } from "@/hooks/useCountdown"; import { extractErrorMessage } from "@/lib/func"; import { glassSurfaceFlat } from "@/lib/styles/glassSurface"; import { useFormik } from "formik"; import Image from "next/image"; import { useParams } from "next/navigation"; import type { ChangeEvent } from "react"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import * as Yup from "yup"; import StepOtp from "./StepOtp"; type StepEnterNumberProps = { pending?: boolean; onChange?: (event: ChangeEvent) => void; value?: string; }; function StepEnterNumber(_props: StepEnterNumberProps = {}) { void _props; const { t } = useTranslation("auth"); const { name } = useParams(); const [step, setStep] = useState(AUTH_STEP.ENTER_NUMBER); const { mutate: mutateOtpRequest, isPending } = useOtpRequest(); const { timerRunning, secondsLeft, restart } = useCountdown(step === AUTH_STEP.ENTER_OTP, 120); const formik = useFormik({ initialValues: { phone: "", slug: "", }, validationSchema: Yup.object({ phone: Yup.string() .required("Errors.PhoneNumberRequired") .matches(/^09\d{9}$/, "Errors.PhoneNumberFormat"), }), onSubmit: (values) => { if (name) { values.slug = name as string; mutateOtpRequest(values, { onSuccess: () => { toast(t("otp_sent"), "success"); setStep(AUTH_STEP.ENTER_OTP); }, onError: (error) => { toast(extractErrorMessage(error), "error"); }, }); } }, }); const handleResendOtp = () => { if (timerRunning || !name) return; mutateOtpRequest( { phone: formik.values.phone, slug: name as string }, { onSuccess: () => { toast(t("otp_sent"), "success"); restart(); }, onError: (error) => { toast(extractErrorMessage(error), "error"); }, }, ); }; return ( <> login banner
{step === AUTH_STEP.ENTER_NUMBER && ( <>
{t("Enter.Heading")}

{t("Enter.Description")}

)} {step === AUTH_STEP.ENTER_OTP && ( <>
{t("OTP.Heading")}

{t("OTP.Description", { phoneNumber: formik.values.phone })}

)}
{step === AUTH_STEP.ENTER_NUMBER && ( )} {step === AUTH_STEP.ENTER_OTP && ( )}
{step === AUTH_STEP.ENTER_NUMBER && ( )}
); } export default StepEnterNumber;