import React, { useEffect, useState } from "react"; import { useNavigate } from "react-router-dom"; import usersService from "../../services/UsersService"; import Icons from "../Helpers/Icons"; import InputCom from "../Helpers/Inputs/InputCom"; import { toast } from "react-toastify"; import LoadingSpinner from "../Spinners/LoadingSpinner"; import { Form, Formik } from "formik"; import * as Yup from "yup"; const validationSchema = Yup.object().shape({ firstname: Yup.string() .min(3, "Minimum 3 characters") .max(25, "Maximum 25 characters") .required("Firstname is required"), lastname: Yup.string() .min(3, "Minimum 3 characters") .max(25, "Maximum 25 characters") .required("Lastname is required"), country: Yup.string() .min(1, "Minimum 1 characters") .max(25, "Maximum 25 characters") .required("Country is required"), bank: Yup.string() .min(3, "Minimum 3 characters") .max(25, "Maximum 25 characters") .required("Bank name is required"), accountNumber: Yup.string() .matches(/\d/, "must be a number") .min(3, "Minimum 3 characters") .max(25, "Maximum 25 characters") .required("Account Number is required"), repeatAccountNumber: Yup.string() .required("Repeat Account Number is required") .oneOf([Yup.ref("accountNumber"), null], "Must match Account Number"), accountType: Yup.string() .min(1, "Minimum 3 characters") .max(25, "Maximum 25 characters") .required("Account Type is required"), city: Yup.string() .min(3, "Minimum 3 characters") .max(25, "Maximum 25 characters") .required("City is required"), state: Yup.string() .min(3, "Minimum 3 characters") .max(25, "Maximum 25 characters") .required("State is required"), }); const initialValues = { firstname: "", lastname: "", country: "", bank: "", accountNumber: "", repeatAccountNumber: "", accountType: "", state: "", city: "", }; function AddRecipient() { const apiURL = new usersService(); const navigate = useNavigate(); let [requestStatus, setRequestStatus] = useState({ message: "", loading: false, status: false, }); let [allCountries, setAllCountries] = useState({ // STATE TO HOLD LIST OF COUNTRIES loading: true, data: [], }); let [bankName, setBankName] = useState({ // STATE TO HOLD LIST OF BANK NAME loading: true, data: [], }); let [accType, setAccType] = useState({ // STATE TO HOLD LIST ACCOUNT TYPE loading: true, data: [], }); //FUNCTION TO HANDLE ADD RECIPIENT SUBMIT const handleSubmit = (values, helpers) => { setRequestStatus({ message: "", loading: true, status: false }); let reqData = { //REQUEST DATA FOR API CALL firstname: values.firstname, lastname: values.lastname, bank_code: values.bank, account_no: values.accountNumber, account_type: values.accountType, country: values.country, state: values.state, city: values.city, }; //CALL TO ADD RECIPIENT API apiURL .addRecipient(reqData) .then((res) => { if (res.data.internal_return < 0) { setRequestStatus({ message: "could not add recipient, try again!", loading: false, status: true, }); return; } // setRequestStatus({message: 'Recipient Added Successfully!', loading: false, status: true}) toast.success("Recipient Added Successfully!"); setTimeout(() => { navigate("/my-wallet/transfer-fund", { replace: true }); }, 1000); }) .catch((error) => { setRequestStatus({ message: "Opps! an error occured! Try again later", loading: false, status: false, }); }); }; // FUNCTION TO GET COUNTRIES const getCountry = () => { apiURL .getSignupCountryData() .then((res) => { if (res.data.internal_return < 0) { setAllCountries((prev) => ({ loading: false, data: [] })); return; } setAllCountries((prev) => ({ loading: false, data: res.data.signup_country, })); }) .catch((error) => { setAllCountries((prev) => ({ loading: false, data: [] })); }); }; // END OF FUNCTION TO GET COUNTRIES // FUNCTION TO GET COUNTRY BANK const getCountryBank = () => { apiURL .getCountryBank() .then((res) => { if (res.data.internal_return < 0) { setBankName((prev) => ({ loading: false, data: [] })); return; } setBankName((prev) => ({ loading: false, data: res.data.result_list })); }) .catch((error) => { setBankName((prev) => ({ loading: false, data: [] })); }); }; // END OF FUNCTION TO GET COUNTRY BANK // FUNCTION TO GET ACCOUNT TYPES const getAccountTypes = () => { apiURL .getAccountTypes() .then((res) => { if (res.data.internal_return < 0) { setAccType((prev) => ({ loading: false, data: [] })); return; } setAccType((prev) => ({ loading: false, data: res.data.result_list })); }) .catch((error) => { setAccType((prev) => ({ loading: false, data: [] })); }); }; // END OF FUNCTION TO GET ACCOUNT TYPES useEffect(() => { getCountry(); // TO LOAD LIST COUNTRY getCountryBank(); // TO LOAD LIST COUNTRY BANK getAccountTypes(); // TO LOAD LIST ACCOUNT TYPES }, []); return (

ADD BANK ACCOUNT

{(props) => (
{/* inputs starts here */} {/* firstname */}
{props.errors.firstname && props.touched.firstname && (

{props.errors.firstname}

)}
{/* lastname */}
{props.errors.lastname && props.touched.lastname && (

{props.errors.lastname}

)}
{/* country */}
{props.errors.country && props.touched.country && (

{props.errors.country}

)}
{/* bank name */}
{props.errors.bank && props.touched.bank && (

{props.errors.bank}

)}
{/* ACCOUNT NUMBER */}
{props.errors.accountNumber && props.touched.accountNumber && (

{props.errors.accountNumber}

)}
{/* REPEAT ACCT. NUMBER */}
{props.errors.repeatAccountNumber && props.touched.repeatAccountNumber && (

{props.errors.repeatAccountNumber}

)}
{/* Account Type */}
{props.errors.accountType && props.touched.accountType && (

{props.errors.accountType}

)}
{/* state */}
{props.errors.state && props.touched.state && (

{props.errors.state}

)}
{/* city */}
{props.errors.city && props.touched.city && (

{props.errors.city}

)}
{/* end of inputs starts here */} {/* REQUEST ERROR DISPLAY */} {requestStatus.message && (

{requestStatus.message}

)}
{requestStatus.loading ? ( ) : ( )}
)}
); } export default AddRecipient;