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 (