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 (