import React from 'react'; import * as Yup from 'yup'; import { Form, Formik } from 'formik'; import { InputCompOne } from '..'; import { useNavigate } from 'react-router-dom'; import { RouteHandler } from '../../router/routes'; import { useDispatch } from 'react-redux'; import { updateUserDetails } from '../../store/UserDetails'; import { validateBVN, verifyOTP } from '../../core/apiRequest'; import { RequestStatus } from '../../core/models'; // To get the validation schema const validationSchema = Yup.object().shape({ bvn: Yup.string() .required('BVN is required') .test('no-e', 'Invalid number', (value: any) => { if (value && /^[0-9]*$/.test(value) == false) { return false; } return true; }) .min(11, 'must be 11 digits') .max(11, 'must be 11 digits'), otp: Yup.string() // .when('require_otp', { // is: true, // then: Yup.string().required("OTP is required") // }) // .required("OTP is required") .test('no-e', 'Invalid number', (value: any) => { if (value && /^[0-9]*$/.test(value) == false) { return false; } return true; }) .min(5, 'must be 5 digits') .max(5, 'must be 5 digits'), // .test("no-e", "must be 11 characters", (value:any) => { // if (value.length < 11) { // return false; // } // return true; // }) }); // initial values for formik let initialValues = { bvn: '', otp: '', }; type ValidBVN = { verification_id: string; valid: undefined | boolean; }; const LetsGetStarted: React.FC = () => { const dispatch = useDispatch(); const navigate = useNavigate(); // const [pinValues, setPinValues] = React.useState({ // bvn: "", // otp: "", // }); // const otpInputRef = React.useRef(null); const [requestStatusBVN, setRequestStatusBVN] = React.useState( { loading: false, status: undefined, message: '' } ); const [requestStatusOTP, setRequestStatusOTP] = React.useState( { loading: false, status: undefined, message: '' } ); const [bvnIsValid, setBvnIsValid] = React.useState({ verification_id: '', valid: undefined, }); // e: React.FormEvent // let { value } = e.target as HTMLInputElement; const bvnValidation = (values: any) => { // Function to Validate BVN let bvn = values.bvn; setRequestStatusBVN({ loading: true, status: false, message: '' }); validateBVN({ bvn }) .then((res) => { if (!res || !res.data.call_return) { setBvnIsValid({ verification_id: '', valid: false }); setRequestStatusBVN({ loading: false, status: false, message: 'unable to verify BVN', }); return setTimeout(() => { setRequestStatusBVN({ loading: false, status: false, message: '' }); }, 4000); } setBvnIsValid({ verification_id: res.data.verification_id, valid: true, }); setRequestStatusBVN({ loading: false, status: true, message: 'verified', }); }) .catch((err) => { setBvnIsValid({ verification_id: '', valid: false }); console.log(err); }); }; const handleSubmit = (values: any) => { // Function to VERIFY OTP AND LOGIN USER setRequestStatusOTP({ loading: true, status: false, message: '' }); // console.log('values', values) verifyOTP({ ...values, verification_id: bvnIsValid.verification_id }) .then((res) => { if (!res || !res.data.call_return) { setRequestStatusOTP({ loading: false, status: false, message: 'wrong otp', }); return setTimeout(() => { setRequestStatusOTP({ loading: false, status: false, message: '' }); }, 4000); } // console.log(res.data) localStorage.setItem('token', res.data?.token); localStorage.setItem('uid', res?.data?.customer[0]?.uid); dispatch(updateUserDetails({ ...res?.data?.customer[0] })); navigate(RouteHandler.dashboardHome, { replace: true }); }) .catch((err) => { setRequestStatusOTP({ loading: false, status: false, message: 'something went wrong, try again', }); console.log(err); return setTimeout(() => { setRequestStatusOTP({ loading: false, status: false, message: '' }); }, 4000); }); }; return ( {(props: any) => (

Let’s Get You Started

{requestStatusBVN.loading ? 'verifying...' : requestStatusBVN.message}

{bvnIsValid.valid && ( )}

{requestStatusOTP.message}

{bvnIsValid.valid || bvnIsValid.valid == undefined ? (

***Every personal information attached to your BVN is safe and secure. It is only important for us to verify your information and also give you access to your application profile/account.

) : (

***Did not receive OTP? Click to resend

)}
)}
); }; export default LetsGetStarted;