import React, { useEffect, useState } from "react"; import ModalCom from "../../../Helpers/ModalCom"; import InputCom from "../../../Helpers/Inputs/InputCom"; import { Form, Formik } from "formik"; import * as Yup from "yup"; import { AmountTo2DP } from "../../../Helpers/PriceFormatter"; import usersService from "../../../../services/UsersService"; import LoadingSpinner from "../../../Spinners/LoadingSpinner"; import { PriceFormatter } from "../../../Helpers/PriceFormatter"; import { tableReload } from "../../../../store/TableReloads"; import { useDispatch, useSelector } from "react-redux"; import { apiConst } from "../../../../lib/apiConst"; import { SocketValues } from "../../../Contexts/SocketIOContext"; const validationSchema = Yup.object().shape({ // amount: Yup.string() // .typeError("Invalid number") // .min(1, "Price must be greater than 0") // .test("no-e", "Invalid number", (value) => { // if (value && /\d+e/.test(value)) { // return false; // } // return true; // }) // .required("Amount is required"), amount: Yup.number("Please enter a number") .min(1, "Price must be greater than 0") .required("Amount is required"), comment: Yup.string().required("Comment is required"), }); function FamilyAddFundPopout({ action, situation, wallet, familyData }) { const {userDetails} = useSelector((state) => state?.userDetails); // Gets User Detail const { parentAssignJobToKid } = SocketValues() // socket emit event from FULL account const dispatch = useDispatch(); const apiUrl = new usersService(); const [startTransfer, setStartTransfer] = useState({ loading: true, data: {}, }); const [requestStatus, setRequestStatus] = useState({ loading: false, status: false, message: "", }); // initial values for formik let initialValues = { amount: "", from: AmountTo2DP(startTransfer?.data?.origing_current_balance * 0.01), to: `${familyData.firstname} ${familyData.lastname}`, comment: "", }; // FUNCTION TO PERFORM FAMILY TRANSFER const handleAddFund = (values) => { setRequestStatus({ loading: true, status: false, message: "" }); let senderBal = startTransfer?.data?.origing_current_balance || ""; // SENDER'S ACCOUNT BALANCE let senderLimit = startTransfer?.data?.origing_transfer_limit || ""; // SENDER'S TRANSFER LIMIT let reqData = { // API REQUEST DATA family_uid: familyData.uid, wallet_uid: wallet.wallet_uid, origing_wallet_uid: startTransfer?.data?.origing_wallet_uid, currency: startTransfer?.data?.currency, amount: values.amount * 100, description: values.comment, family_transfer_mode: 100, action: apiConst.WRENCHBOARD_FAMILY_TRANSFER, }; if (!senderBal || !senderLimit) { // RETURNS UNAUTHORIZED, IF SENDER BAL OR LIMIT IS NOT AVAILABLE setRequestStatus({ loading: false, status: false, message: "Unauthorized, try again later", }); return setTimeout(() => { setRequestStatus({ loading: false, status: false, message: "" }); }, 5000); } if (values.amount > senderBal * 0.01) { // CHECKS TO SEE IF SENDER IS SENDING MORE THAN HIS BALANCE setRequestStatus({ loading: false, status: false, message: "You cannot send more than your balance", }); return setTimeout(() => { setRequestStatus({ loading: false, status: false, message: "" }); }, 5000); } if (values.amount > senderLimit * 0.01) { // CHECKS TO SEE IF SENDER IS SENDING MORE THAN HIS LIMIT setRequestStatus({ loading: false, status: false, message: `You cannot exceed ${senderLimit * 0.01} ${ startTransfer?.data?.origing_currency.charAt(0).toUpperCase() + startTransfer?.data?.origing_currency.slice(1).toLowerCase() }`, }); return setTimeout(() => { setRequestStatus({ loading: false, status: false, message: "" }); }, 5000); } apiUrl .familyTransfer(reqData) .then(({ data }) => { if ( data.internal_return < 0 || data.credit_confirm == "" || data.pay_confirm == "" ) { setRequestStatus({ loading: false, status: false, message: "Transfer Failed", }); return setTimeout(() => { setRequestStatus({ loading: false, status: false, message: "" }); }, 5000); } setRequestStatus({ loading: false, status: true, message: "Transfer Successful", }); //SENDS MESSAGE TO SOCKET TO UPDATE CHILD ACCOUNT // message, room let socketMsg = { "audience": "MEMBER", "action": "REFRESH_WALLET", "family_uid": reqData.family_uid, } let socketRoom = `FAMILY-${userDetails.uid}` parentAssignJobToKid(socketMsg, socketRoom) //SENDS MESSAGE TO SOCKET TO UPDATE CHILD ACCOUNT setTimeout(() => { setRequestStatus({ loading: false, status: false, message: "" }); dispatch(tableReload({ type: "WALLETTABLE" })); // UPDATES PARENT WALLET ACCOUNT action(); // TO CLOSE THE MODAL }, 5000); }) .catch((error) => { setRequestStatus({ loading: false, status: false, message: "Network Error, try again", }); setTimeout(() => { setRequestStatus({ loading: false, status: false, message: "" }); }, 5000); }); }; // LOAD FAMILY START TRANSFER useEffect(() => { let reqData = { family_uid: familyData.uid, wallet_uid: wallet.wallet_uid, action: apiConst.WRENCHBOARD_FAMILY_TRANSFERSTART, }; apiUrl .familyTransferStart(reqData) .then((response) => { setStartTransfer({ loading: false, data: response?.data }); }) .catch((err) => { setStartTransfer({ loading: false, data: {} }); }); }, []); return (

Add Fund

{startTransfer.loading && ( )} {!startTransfer.loading && ( {(props) => (
{/* AMOUNT */}
{/* FROM */}
{/* TO */}
{/* COMMENT */}