import { Alert, AlertIcon, Box, Button, FormControl, FormErrorMessage, FormLabel, HStack, Input, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, Switch, Table, Tbody, Text, Textarea, Th, Tr, useToast, } from "@chakra-ui/react"; import NormalData from "../../../../Components/DataTable/NormalTable"; import { useContext, useState } from "react"; import { AddIcon } from "@chakra-ui/icons"; import { useGetDistributedToInvestorMutation, useGetDistributionInvestorMutation, useUpdateExitToInvestorMutation, } from "../../../../Services/io.service"; import { useParams } from "react-router-dom"; import { useEffect } from "react"; import { Controller, useForm } from "react-hook-form"; import * as yup from "yup"; import { yupResolver } from "@hookform/resolvers/yup"; import ToastBox from "../../../../Components/ToastBox"; import CurrencyInput from "../../../../Components/CurrencyInput"; import { IoCalculator } from "react-icons/io5"; import { debounce } from "../../../Master/Sponser/AddSponser"; import GlobalStateContext from "../../../../Contexts/GlobalStateContext"; const Exit = ({ isOpen, onClose }) => { const params = useParams(); const toast = useToast(); const id = params?.id; const [isCalculateLoading, setIsCalculateLoading] = useState(false); const [isFinalCalculateLoading, setIsFinalCalculateLoading] = useState(false); const [calcualtedData, setCalculatedDate] = useState(null); const [isCalcualtedData, setIsCalcualtedData] = useState(false); const { IODetails } = useContext(GlobalStateContext); const investorExit = yup.object().shape({ amount: yup .string() .required("Amount is required") .test( "max", `Distribution amount should not be greater than IO cash amount ${IODetails?.ioCash}`, function (value) { const { ioCash } = IODetails || {}; // Safely get ioCash if (value && ioCash) { return parseFloat(value) <= parseFloat(ioCash); // Ensure both are compared as numbers } return true; // If ioCash is not available, skip validation } ), }); const { control, handleSubmit, formState: { errors }, reset, } = useForm({ resolver: yupResolver(investorExit), }); useEffect(() => { console.log("hiit useEffectc"); handleCalculate(id, { amount: IODetails?.ioMVNAV, }); reset({ amount: IODetails?.ioMVNAV, }); }, [IODetails, id]); const handleCalculate = async (id, data) => { try { const res = await getDistributionInvestment({ id, data }); console.log(res?.data?.data); if (res?.error?.status === 401) { // toast({ // render: () => ( // // ), // }); setIsCalculateLoading(false); setIsCalcualtedData(false); } else if (res?.data?.statusCode === 200) { setCalculatedDate(res?.data?.data); // toast({ // render: () => , // }); setIsCalculateLoading(false); setIsCalcualtedData(true); } } catch (error) {} }; // const { // data:IObyID, // error, // isLoading, // } = useGetDistributionInvestorMutation(id); const [getDistributionInvestment] = useGetDistributionInvestorMutation(); const [getFinalDistributionInvestment] = useGetDistributedToInvestorMutation(); const [updateExitToInvestor] = useUpdateExitToInvestorMutation(); const investor = yup.object().shape({ amount: yup.string().required("Amount is required"), }); // useEffect(()=>{ // try { // const res = getDistributionInvestment({id,data}) // console.log(res); // } catch (error) { // } // },[]) // console.log(IObyID); // ====================================================[Table Setup]================================================================ const tableHeadRow = [ "Sr No.", "Client Id", "First name", "Last Name", "Amount", "Holding %", "($)", ]; const extractedArray = calcualtedData?.data?.map((item, index) => ({ id: item?.id, "Sr No.": ( {index + 1} ), "Client Id": ( {item?.clientId} ), "First name": ( {item?.firstName} ), "Last Name": ( {item?.lastName} ), Amount: ( {item?.amount?.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2, })} ), "Holding %": ( {parseFloat(item?.distribution_per).toFixed(2)}% ), "($)": ( {item?.distribution_amt?.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2, })} ), })); const Total = () => { return (
Total {" "} {" "} {" "} {calcualtedData?.totalInvestedAmt?.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2, })} {calcualtedData?.distributed_per?.toFixed(2)}% {calcualtedData?.distributed_amt?.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2, })}
); }; const onSubmit = async (data) => { setIsCalculateLoading(true); try { const res = await getDistributionInvestment({ id, data }); console.log(res?.data?.data); if (res?.error?.status === 401) { toast({ render: () => ( ), }); setIsCalculateLoading(false); setIsCalcualtedData(false); } else if (res?.data?.statusCode === 200) { setCalculatedDate(res?.data?.data); toast({ render: () => , }); setIsCalculateLoading(false); setIsCalcualtedData(true); } } catch (error) {} }; const onFinalSubmit = async (data) => { setIsFinalCalculateLoading(true); if (!isCalcualtedData) { setIsFinalCalculateLoading(false); return toast({ render: () => ( ), }); } const finalData = { transactionAmount: data?.amount, }; try { const res = (await exit) ? updateExitToInvestor({ id, data: finalData }) : getFinalDistributionInvestment({ id, data: finalData }); console.log(finalData); if (res?.error?.status === 401) { toast({ render: () => ( ), }); } else if (res?.data?.statusCode === 200) { toast({ render: () => , }); handleClose(); } } catch (error) { console.error("An error occurred:", error); } finally { handleClose(); } }; const handleClose = () => { onClose(); setIsFinalCalculateLoading(false); setIsCalcualtedData(false); }; return ( Enter Exit Amount {/* Amount to Distribute */} {/* */} {/* Enter Exit Amount */} $ {parseFloat(IODetails?.ioMVNAV || 0).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2, })} {/* */} {/* {calcualtedData && ( */} } // isLoading={isLoading} /> {/* ) } */} {isCalcualtedData ? ( <> ) : ( "" )} ); }; export default Exit;