import React, {useEffect, useState} from 'react' import { Link, useNavigate } from 'react-router-dom' import Icons from '../Helpers/Icons' import usersService from '../../services/UsersService' import InputCom from '../Helpers/Inputs/InputCom' import LoadingSpinner from '../Spinners/LoadingSpinner' import {toast} from 'react-toastify' import {Formik, Form} 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 3 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('../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