Viewing File: /home/ubuntu/voice-assistant-frontend/src/components/Auth/ForgetPasswordAuthVerificationIndex.jsx
import React, { useState, useEffect } from "react";
import { Button, Image, InputGroup, Row, Col, Modal } from "react-bootstrap";
import OtpInput from "react-otp-input";
import { Link, useNavigate } from "react-router-dom";
import { Formik, Form as FORM, Field, ErrorMessage } from "formik";
import { useDispatch, useSelector } from "react-redux";
import { getErrorNotificationMessage } from "../Helper/NotificationMessage";
import { ButtonLoader } from "../Helper/Loader";
import { useTranslation } from "react-multi-lang";
import * as Yup from "yup";
import { verifyForgotPasswordStart, forgotPasswordStart } from "../../store/slices/AdminSlice";
import { useLocation } from 'react-router-dom';
import AuthSection from "./AuthSection";
const ForgetPasswordAuthVerificationIndex = (props) => {
const dispatch = useDispatch();
const navigate = useNavigate();
const t = useTranslation("otp_verify");
const location = useLocation();
const email = location.state?.email;
const verifyForgotPassword = useSelector((state) => state.admin.verifyForgotPassword)
const forgotPassword = useSelector((state) => state.admin.forgotPassword)
const [skipRender, setSkipRender] = useState(true);
const handleSubmit = (values) => {
if(!email){
getErrorNotificationMessage(t("invalid"));
navigate("/forgot-password")
}
else{
dispatch(verifyForgotPasswordStart({
email: email,
verification_code: values.otp,
}))
}
};
const handleResendOtp = () => {
dispatch(
forgotPasswordStart({
email: email
})
);
};
const otpSchema = Yup.object().shape({
otp: Yup.string().required(t("required"))
.min(6, t("six_digits")),
});
useEffect(() => {
if (
!skipRender &&
!verifyForgotPassword.loading &&
Object.keys(verifyForgotPassword.data).length > 0
) {
navigate("/reset-password")
}
setSkipRender(false);
}, [verifyForgotPassword]);
return (
<>
<div className="auth-sec">
<div className="auth-box">
<AuthSection/>
<div className="auth-right-sec">
<div className="auth-right-box">
<Row className="justify-content-md-center">
<Col md={10}>
<Formik
initialValues={{
otp: "",
}}
onSubmit={handleSubmit}
validationSchema={otpSchema}
>
{({ values, setFieldValue }) => (
<FORM className="auth-form-sec">
<div className="verification-item">
<h4>{t("otp_verification")}</h4>
<OtpInput
value={values.otp}
onChange={(value) => {
const numericValue = value.replace(/\D/g, '');
setFieldValue('otp', numericValue)
}}
numInputs={6}
renderSeparator={<span>-</span>}
renderInput={(props) => <input {...props} />}
/>
</div>
<ErrorMessage
component={"div"}
name="otp"
className="errorMsgAuthVerification"
/>
<div className="verification-btn-sec">
<span>{t("not_getting_code")}</span>
<button
type="button"
onClick={handleResendOtp}
className="resend-link"
disabled={
forgotPassword.buttonDisable ||
forgotPassword.buttonDisable
}
>
{forgotPassword.buttonDisable ? (
<ButtonLoader />
) : (
t("resend_otp")
)}
</button>
</div>
<div className="verify-btn-sec">
<Button
type="submit"
className="default-btn"
disabled={
verifyForgotPassword.buttonDisable
}
>
{verifyForgotPassword.buttonDisable ? (
<ButtonLoader />
) : (
t("validate")
)}
</Button>
</div>
</FORM>
)}
</Formik>
</Col>
</Row>
</div>
</div>
</div>
</div>
</>
);
};
export default ForgetPasswordAuthVerificationIndex;
Back to Directory
File Manager