From 94d3e25cce5e5297551f9461d15bbec1444c3854 Mon Sep 17 00:00:00 2001 From: "Siddhesh.More" Date: Tue, 13 Aug 2024 16:56:17 +0530 Subject: [PATCH 1/5] updated --- src/Components/CurrencyInput.jsx | 2 + .../Deposit/DepositRequest/DepositRequest.jsx | 10 +- .../DepositRequest/DepositRequestApprove.jsx | 4 - .../ViewIO/HeaderModal/AmountInvested.jsx | 225 +++++++++++++----- src/Services/io.service.js | 24 +- 5 files changed, 191 insertions(+), 74 deletions(-) diff --git a/src/Components/CurrencyInput.jsx b/src/Components/CurrencyInput.jsx index 45932c4..facdca8 100644 --- a/src/Components/CurrencyInput.jsx +++ b/src/Components/CurrencyInput.jsx @@ -9,6 +9,8 @@ export const formatCurrency = (value) => { }; const CurrencyInput = forwardRef(({ value, onChange, ...props }, ref) => { + console.log(props); + const handleChange = (event) => { let { value } = event.target; diff --git a/src/Pages/Deposit/DepositRequest/DepositRequest.jsx b/src/Pages/Deposit/DepositRequest/DepositRequest.jsx index 0490be4..f17fae3 100644 --- a/src/Pages/Deposit/DepositRequest/DepositRequest.jsx +++ b/src/Pages/Deposit/DepositRequest/DepositRequest.jsx @@ -148,34 +148,34 @@ const DepositRequest = () => { fontWeight={"500"} className="d-flex align-items-center web-text-small" > - {item?.principal?.investor_details?.clientReference_id} + {item?.clientReference_id} ), "First Name": ( - {item?.principal?.firstName} + {item?.firstName} ), "Last Name": ( - {item?.principal?.lastName} + {item?.lastName} ), Country: ( - {item?.principal?.investor_details?.country?.countryName} + {item?.countryName} ), "Phone Number": ( - {item?.principal?.mobileNumber} + {item?.mobileNumber} ), diff --git a/src/Pages/Deposit/DepositRequest/DepositRequestApprove.jsx b/src/Pages/Deposit/DepositRequest/DepositRequestApprove.jsx index 00c73c6..dc21c41 100644 --- a/src/Pages/Deposit/DepositRequest/DepositRequestApprove.jsx +++ b/src/Pages/Deposit/DepositRequest/DepositRequestApprove.jsx @@ -64,10 +64,6 @@ const DepositRequestApprove = ({ isOpen, onClose, firstField, id, data:requestDa }, [requestData, id]) - - - - const onSubmit = async(data) => { setIsBtnLoading(true) const formData = new FormData(); diff --git a/src/Pages/IO_Management/ViewIO/HeaderModal/AmountInvested.jsx b/src/Pages/IO_Management/ViewIO/HeaderModal/AmountInvested.jsx index 1d385b8..0a898b5 100644 --- a/src/Pages/IO_Management/ViewIO/HeaderModal/AmountInvested.jsx +++ b/src/Pages/IO_Management/ViewIO/HeaderModal/AmountInvested.jsx @@ -1,3 +1,4 @@ +import React, { useContext, useEffect, useState } from 'react'; import { Box, Button, @@ -12,10 +13,86 @@ import { ModalHeader, ModalOverlay, Text, - Textarea, + useToast, } from "@chakra-ui/react"; +import { useForm } from 'react-hook-form'; +import * as yup from 'yup'; +import { yupResolver } from '@hookform/resolvers/yup'; +import GlobalStateContext from '../../../../Contexts/GlobalStateContext'; +import { useParams } from 'react-router-dom'; +import { useAmountIvestmentMutation } from '../../../../Services/io.service'; +import ToastBox from '../../../../Components/ToastBox'; + +// Validation schema +const validationSchema = yup.object().shape({ + transactionDate: yup.date().required('Date is required'), + Total_Amount: yup.number().positive('Amount must be positive').required('Amount is required'), + amountInvested: yup.number().positive('Amount to invest must be positive').required('Amount to invest is required'), + IoCash: yup.number().positive('IO Cash must be positive').required('IO Cash is required'), +}); + const AmountInvested = ({ isOpen, onClose }) => { + const params = useParams() + const toast = useToast() + const id = params?.id + const { register, handleSubmit, reset, watch, formState: { errors } } = useForm({ + resolver: yupResolver(validationSchema), + }); + const [ isLoading, setIsLoading ] = useState(false) + const { IODetails } = useContext(GlobalStateContext); + const [ amountInvested ] = useAmountIvestmentMutation() + + useEffect(() => { + reset({ + Total_Amount: IODetails?.goalAmount, + IoCash: IODetails?.goalAmount + }) + }, [IODetails]) + + + const onSubmit = async (data) => { + console.log(data); + setIsLoading(true) + + try { + const res = await amountInvested({data, id}) + console.log(res); + if (res?.data?.statusCode === 200 ) { + toast({ + render: () => , + }); + setIsLoading(false) + onClose() + + }else if(response?.error?.status === 400) { + toast({ + render: () => ( + + ), + }); + setIsLoading(false) + } + + + + } catch (error) { + + } + // Handle form submission + }; + + const handleAmountChange = (e) => { + const amount = parseFloat(e.target.value) || 0; + const totalAmount = parseFloat(IODetails?.goalAmount) || 0; + const ioCash = (totalAmount - amount).toFixed(2); // Ensure precision with toFixed + + reset({ + amountInvested: amount, + IoCash: parseFloat(ioCash), // Convert to number for consistent formatting + }); + }; + return ( @@ -23,73 +100,93 @@ const AmountInvested = ({ isOpen, onClose }) => { Amount Invested - - - Date - - - +
+ + + Date + + + {errors.transactionDate && {errors.transactionDate.message}} + - - Amount - - + + Amount + + {errors.Total_Amount && {errors.Total_Amount.message}} + - - Amount to invest - - + + Amount to invest + - - IO Cash - - - + /> + {errors.amountInvested && {errors.amountInvested.message}} + + + + + IO Cash + + + {errors.IoCash && {errors.IoCash.message}} + + + + + + +
- - - -
); diff --git a/src/Services/io.service.js b/src/Services/io.service.js index 5b7049e..d200ff3 100644 --- a/src/Services/io.service.js +++ b/src/Services/io.service.js @@ -231,6 +231,22 @@ export const ioService = createApi({ + // =====[ Amount Investment ] + amountIvestment : builder.mutation({ + query: ({ data, id }) => ({ + url: `/io/admin/amount-invested/${id}`, + method: "POST", + body: data, + }), + invalidatesTags: ["getIOById"], + }), + + + + + + + @@ -277,5 +293,11 @@ export const { - useUpdateStatusIoMutation + useUpdateStatusIoMutation, + + + + + + useAmountIvestmentMutation, } = ioService; From 8dae36daaf423d93cef9d3257b59d48c93d19268 Mon Sep 17 00:00:00 2001 From: "Siddhesh.More" Date: Tue, 13 Aug 2024 19:02:47 +0530 Subject: [PATCH 2/5] updated 13-Aug --- src/Components/DataTable/NormalTable.jsx | 2 ++ src/Pages/IO_Management/KeyMeritsAdd.jsx | 11 ++++------- src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx | 4 ++-- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/Components/DataTable/NormalTable.jsx b/src/Components/DataTable/NormalTable.jsx index 54da2e8..0ae24b8 100644 --- a/src/Components/DataTable/NormalTable.jsx +++ b/src/Components/DataTable/NormalTable.jsx @@ -51,6 +51,8 @@ const DataTable = ({ whiteSpace="normal" // Allow text to wrap wordBreak="normal" // Ensure long words break properly overflowWrap="normal" // Break long words if necessary + textTransform={'none'} + > {isLoading ? : heading} {/* {heading} */} diff --git a/src/Pages/IO_Management/KeyMeritsAdd.jsx b/src/Pages/IO_Management/KeyMeritsAdd.jsx index e3102e0..54d9677 100644 --- a/src/Pages/IO_Management/KeyMeritsAdd.jsx +++ b/src/Pages/IO_Management/KeyMeritsAdd.jsx @@ -80,6 +80,8 @@ const KeyMeritsAdd = ({ isOpen, onClose, firstField, id, icons }) => { setIsLoading(true); try { const res = await createKeyMerits({ data: formData, id }); + console.log(res?.error?.status); + if (res?.data?.statusCode === 201) { toast({ render: () => , @@ -91,21 +93,16 @@ const KeyMeritsAdd = ({ isOpen, onClose, firstField, id, icons }) => { return; } - if (res?.error?.data?.code === 400) { + if (res?.error?.status === 400 || res?.error?.status === 500 ) { toast({ render: () => ( ), }); setIsLoading(false); - onClose(); setAlert(false); - reset(); - setFile(null); - setSelectedImageIcon(null); - setSelectedIcon("Select Icon"); return; - } + } } catch (error) { if (error) { toast({ diff --git a/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx b/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx index 7cbced4..a1616ac 100644 --- a/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx +++ b/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx @@ -290,7 +290,7 @@ console.log(isLoading); IO NAV - {IODetails?.currentValuation ? IODetails?.currentValuation : "00.00"} + {IODetails?.ioNAV ? IODetails?.ioNAV : "00.00"} @@ -308,7 +308,7 @@ console.log(isLoading); IO MV NAV - {IODetails?.marketValue ? IODetails?.marketValue : "00.00"} + {IODetails?.ioMVNAV ? IODetails?.ioMVNAV : "00.00"} From 83aa170c60edaa1c5fed7f8c6f6172e400f20f2c Mon Sep 17 00:00:00 2001 From: "Siddhesh.More" Date: Tue, 13 Aug 2024 19:58:31 +0530 Subject: [PATCH 3/5] updated --- .../IO_Management/CreateIO/IONAVDetails.jsx | 6 +++--- src/Pages/Master/Sponser/Sponsers.jsx | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/Pages/IO_Management/CreateIO/IONAVDetails.jsx b/src/Pages/IO_Management/CreateIO/IONAVDetails.jsx index 6a9c277..f877143 100644 --- a/src/Pages/IO_Management/CreateIO/IONAVDetails.jsx +++ b/src/Pages/IO_Management/CreateIO/IONAVDetails.jsx @@ -78,7 +78,7 @@ const IONAVDetails = () => { fontWeight={"500"} className="d-flex align-items-center web-text-small" > - {`$ ${item.transactionAmount}`} + {`${item.transactionAmount}`} ), "Last NAV update": ( @@ -89,7 +89,7 @@ const IONAVDetails = () => { fontWeight={"500"} className="d-flex align-items-center web-text-small" > - {item.previousNAVvalue && `$ ${item.previousNAVvalue}`} + {item.previousNAVvalue && `${item.previousNAVvalue}`} ), "Investment Closed": ( @@ -100,7 +100,7 @@ const IONAVDetails = () => { fontWeight={"500"} className="d-flex align-items-center web-text-small" > - {item.initialNAVvalue&&`$ ${item.initialNAVvalue}`} + {item.initialNAVvalue&& `${item.initialNAVvalue}`} ), "Comments": ( diff --git a/src/Pages/Master/Sponser/Sponsers.jsx b/src/Pages/Master/Sponser/Sponsers.jsx index 97fb94d..0f16db1 100644 --- a/src/Pages/Master/Sponser/Sponsers.jsx +++ b/src/Pages/Master/Sponser/Sponsers.jsx @@ -158,9 +158,21 @@ const Sponser = () => { setIsLoading(true); try { const response = await deleteSponser(actionId); - console.log(response); - setIsLoading(false); - setDeleteAlert(false); + console.log(response?.data); + if(response?.error?.data?.code === 400){ + toast({ + render: () => , + }); + setIsLoading(false); + setDeleteAlert(false); + } else if(response?.data?.statusCode === 201 || response?.data?.statusCode === 200){ + toast({ + render: () => , + }); + setIsLoading(false); + setDeleteAlert(false); + + } } catch (error) {} }; From 2d641a9748ef2641237e908d02cc0f17a24a0c93 Mon Sep 17 00:00:00 2001 From: "Siddhesh.More" Date: Wed, 14 Aug 2024 12:19:27 +0530 Subject: [PATCH 4/5] updated --- src/Components/CurrencyInput.jsx | 8 +- .../Deposit/DepositRequest/DepositRequest.jsx | 2 +- .../DepositViewHistory/DepositHistory.jsx | 26 +-- src/Pages/IO_Management/CreateIO/CreateIO.jsx | 4 +- src/Pages/IO_Management/KeyMeritsAdd.jsx | 12 +- src/Pages/IO_Management/KeyMeritsEdit.jsx | 28 ++- .../ViewIO/HeaderModal/AmountInvested.jsx | 78 ++++--- .../ViewIO/HeaderModal/UpdateIOStatus.jsx | 214 +++++++++--------- src/Pages/IO_Management/ViewIO/ViewIOdata.jsx | 7 +- .../IO_Management/ViewIO/ViewIOdataHeader.jsx | 18 +- .../InvestorDetails/InvestorDetails.jsx | 2 +- src/Pages/UnderConstruction.jsx | 4 +- src/Routes/Routes.js | 2 +- 13 files changed, 215 insertions(+), 190 deletions(-) diff --git a/src/Components/CurrencyInput.jsx b/src/Components/CurrencyInput.jsx index facdca8..7aea90c 100644 --- a/src/Components/CurrencyInput.jsx +++ b/src/Components/CurrencyInput.jsx @@ -13,15 +13,15 @@ const CurrencyInput = forwardRef(({ value, onChange, ...props }, ref) => { const handleChange = (event) => { - let { value } = event.target; + let { value } = event?.target; // Remove non-numeric characters except decimal point - value = value.replace(/[^0-9.]/g, ''); + value = value?.replace(/[^0-9.]/g, ''); // Ensure only one decimal point - const parts = value.split('.'); + const parts = value?.split('.'); if (parts.length > 2) { - value = parts[0] + '.' + parts.slice(1).join(''); + value = parts[0] + '.' + parts?.slice(1)?.join(''); } onChange(value); // Pass the raw value to parent or use it directly diff --git a/src/Pages/Deposit/DepositRequest/DepositRequest.jsx b/src/Pages/Deposit/DepositRequest/DepositRequest.jsx index f17fae3..b84279c 100644 --- a/src/Pages/Deposit/DepositRequest/DepositRequest.jsx +++ b/src/Pages/Deposit/DepositRequest/DepositRequest.jsx @@ -109,7 +109,7 @@ const DepositRequest = () => { // ====================================================[Table Filter]================================================================ const filteredData = data?.data?.rows.filter((item) => { // Filter by name (case insensitive) - const name = item?.createdAt; + const name = [item.firstName, item.lastName, item.countryName].filter(Boolean).join(' '); const searchLower = searchTerm.toLowerCase(); const nameMatches = name.toLowerCase().includes(searchLower); diff --git a/src/Pages/Deposit/DepositViewHistory/DepositHistory.jsx b/src/Pages/Deposit/DepositViewHistory/DepositHistory.jsx index 058a068..e44b2e8 100644 --- a/src/Pages/Deposit/DepositViewHistory/DepositHistory.jsx +++ b/src/Pages/Deposit/DepositViewHistory/DepositHistory.jsx @@ -101,15 +101,15 @@ const DepositHistory = () => { }); }, 300); - // ====================================================[Table Filter]================================================================ - const filteredData = data?.data?.rows.filter((item) => { - // Filter by name (case insensitive) - const name = item.createdAt; - const searchLower = searchTerm.toLowerCase(); - const nameMatches = name.toLowerCase().includes(searchLower); +// ====================================================[Table Filter]================================================================ +const filteredData = data?.data?.rows.filter((item) => { + // Combine firstName, lastName, and countryName for filtering + const name = [item.firstName, item.lastName, item.countryName].filter(Boolean).join(' '); + const searchLower = searchTerm.toLowerCase(); + const nameMatches = name.toLowerCase().includes(searchLower); + return nameMatches; +}); - return nameMatches; - }); // const handleView = (id) => { // setActionId(id); @@ -139,34 +139,34 @@ const DepositHistory = () => { fontWeight={"500"} className="d-flex align-items-center web-text-small" > - {item?.principal?.investor_details?.clientReference_id} + {item?.clientReference_id} ), "First Name": ( - {item?.principal?.firstName} + {item?.firstName} ), "Last Name": ( - {item?.principal?.lastName} + {item?.lastName} ), Country: ( - {item?.principal?.investor_details?.country?.countryName} + {item?.countryName} ), "Phone Number": ( - {item?.principal?.mobileNumber} + {item?.mobileNumber} ), diff --git a/src/Pages/IO_Management/CreateIO/CreateIO.jsx b/src/Pages/IO_Management/CreateIO/CreateIO.jsx index 9d0ca4c..942c9ec 100644 --- a/src/Pages/IO_Management/CreateIO/CreateIO.jsx +++ b/src/Pages/IO_Management/CreateIO/CreateIO.jsx @@ -15,6 +15,7 @@ import ViewIOdataHeader from "../ViewIO/ViewIOdataHeader"; import { useParams } from "react-router-dom"; import FullscreenLoaders from "../../../Components/Loaders/FullscreenLoaders"; import { useGetIOprepopulateDataQuery } from "../../../Services/io.service"; +import UnderConstruction from "../../UnderConstruction"; const CreateIO = () => { const id = useParams()?.id; @@ -57,7 +58,8 @@ const CreateIO = () => { }, { label: "Investors", - Content: Investors, + // Content: Investors, + Content: UnderConstruction, isDisabled: id ? false : true, }, { diff --git a/src/Pages/IO_Management/KeyMeritsAdd.jsx b/src/Pages/IO_Management/KeyMeritsAdd.jsx index 54d9677..eb44428 100644 --- a/src/Pages/IO_Management/KeyMeritsAdd.jsx +++ b/src/Pages/IO_Management/KeyMeritsAdd.jsx @@ -86,10 +86,7 @@ const KeyMeritsAdd = ({ isOpen, onClose, firstField, id, icons }) => { toast({ render: () => , }); - setAlert(false); - onClose(); - setIsLoading(false); - reset(); + handleClose() return; } @@ -115,12 +112,7 @@ const KeyMeritsAdd = ({ isOpen, onClose, firstField, id, icons }) => { }); } setIsLoading(false); - onClose(); - setAlert(false); - reset(); - setFile(null); - setSelectedImageIcon(null); - setSelectedIcon("Select Icon"); + handleClose() } reset(); }; diff --git a/src/Pages/IO_Management/KeyMeritsEdit.jsx b/src/Pages/IO_Management/KeyMeritsEdit.jsx index 557f8dc..473658b 100644 --- a/src/Pages/IO_Management/KeyMeritsEdit.jsx +++ b/src/Pages/IO_Management/KeyMeritsEdit.jsx @@ -59,6 +59,8 @@ const KeyMeritsEdit = ({ const [selectedImageIcon, setSelectedImageIcon] = useState(null); const found = data?.find((item) => item?.id === actionId); + console.log(found); + const { control, @@ -71,6 +73,9 @@ const KeyMeritsEdit = ({ }); // useEffect to reset the form when `found` changes useEffect(() => { + setValue("icon_xid", found?.icon?.id); + setSelectedIcon(found?.icon?.iconName); // Update selected icon name + setSelectedImageIcon(found?.icon?.iconFilePath); if (found) { reset({ meritsHeader: found?.meritsHeader, @@ -91,10 +96,7 @@ const KeyMeritsEdit = ({ toast({ render: () => , }); - setAlert(false); - onClose(); - setIsLoading(false); - reset(); + handleClose() return; } if (res?.error?.data?.code === 400) { @@ -103,10 +105,7 @@ const KeyMeritsEdit = ({ ), }); - setAlert(false); - onClose(); - setIsLoading(false); - reset(); + handleClose() return; } } catch (error) { @@ -121,10 +120,7 @@ const KeyMeritsEdit = ({ ), }); } - setIsLoading(false); - setAlert(false); - onClose(); - reset(); + handleClose() } reset(); }; @@ -140,6 +136,14 @@ const KeyMeritsEdit = ({ setSelectedImageIcon(iconFilePath); }; + const handleClose = () => { + setIsLoading(false); + setAlert(false); + onClose(); + reset(); + + } + return ( <> { + if (isNaN(value)) return ''; + const formatted = parseFloat(value).toFixed(2).toString(); + const [integer, decimal] = formatted.split('.'); + const formattedInteger = integer.replace(/\B(?=(\d{3})+(?!\d))/g, ','); + return decimal ? `${formattedInteger}.${decimal}` : formattedInteger; +}; const AmountInvested = ({ isOpen, onClose }) => { - const params = useParams() - const toast = useToast() - const id = params?.id - const { register, handleSubmit, reset, watch, formState: { errors } } = useForm({ + const params = useParams(); + const toast = useToast(); + const id = params?.id; + const { control, register, handleSubmit, reset, watch, formState: { errors } } = useForm({ resolver: yupResolver(validationSchema), }); - const [ isLoading, setIsLoading ] = useState(false) + const [isLoading, setIsLoading] = useState(false); const { IODetails } = useContext(GlobalStateContext); - const [ amountInvested ] = useAmountIvestmentMutation() + const [amountInvested] = useAmountIvestmentMutation(); useEffect(() => { - reset({ - Total_Amount: IODetails?.goalAmount, - IoCash: IODetails?.goalAmount - }) - }, [IODetails]) - + if (IODetails?.goalAmount) { + const totalAmount = parseFloat(IODetails.goalAmount); + const ioCashUpdate = parseFloat(IODetails.goalAmount) + reset({ + Total_Amount: totalAmount, + IoCash: ioCashUpdate, + }); + } + }, [IODetails, reset]); const onSubmit = async (data) => { console.log(data); - setIsLoading(true) + setIsLoading(true); try { - const res = await amountInvested({data, id}) + const res = await amountInvested({ data, id }); console.log(res); - if (res?.data?.statusCode === 200 ) { + if (res?.data?.statusCode === 200) { toast({ render: () => , }); - setIsLoading(false) - onClose() - - }else if(response?.error?.status === 400) { + setIsLoading(false); + onClose(); + } else if (res?.error?.status === 400) { toast({ render: () => ( - + ), }); - setIsLoading(false) + setIsLoading(false); } - - - } catch (error) { - + setIsLoading(false); } - // Handle form submission }; const handleAmountChange = (e) => { const amount = parseFloat(e.target.value) || 0; const totalAmount = parseFloat(IODetails?.goalAmount) || 0; - const ioCash = (totalAmount - amount).toFixed(2); // Ensure precision with toFixed + const ioCash = (totalAmount - amount).toFixed(2); reset({ - amountInvested: amount, - IoCash: parseFloat(ioCash), // Convert to number for consistent formatting + amountInvested: parseFloat(amount), + IoCash: parseFloat(ioCash), + Total_Amount: IODetails?.goalAmount }); }; @@ -119,8 +126,8 @@ const AmountInvested = ({ isOpen, onClose }) => { Amount { focusBorderColor="forestGreen.300" fontSize={"sm"} onChange={handleAmountChange} - /> {errors.amountInvested && {errors.amountInvested.message}} @@ -152,8 +158,8 @@ const AmountInvested = ({ isOpen, onClose }) => { IO Cash { +const UpdateIOStatus = ({ isOpen, onClose, status }) => { const params = useParams(); const id = params?.id; - const [selectedItem, setSelectedItem] = useState(status?.[0]?.statusAdmin); + const [selectedItem, setSelectedItem] = useState(); const [isLoadingg, setIsLoading] = useState(false); - const { data, error, isLoading } = useGetIOprepopulateDataQuery(); + const [error, setError] = useState(""); const [selectedStatusId, setSelectedStatusId] = useState(status?.[0]?.id); - useEffect(() => { - setSelectedItem(status?.[0]?.statusAdmin) - setSelectedStatusId(status?.[0]?.id) - }, [status]) - - - - + const { data } = useGetIOprepopulateDataQuery(); const [updateStatusIo] = useUpdateStatusIoMutation(); + useEffect(() => { + setSelectedStatusId(status?.[0]?.id); + }, [status]); + const handleMenuItemClick = (item, id) => { setSelectedItem(item); setSelectedStatusId(id); }; const handleSubmit = async () => { - setIsLoading(true) + if (!selectedStatusId) { + setError("Status is required."); + return; + } + setError(""); + setIsLoading(true); try { const res = await updateStatusIo({ data: { @@ -57,109 +59,117 @@ const UpdateIOStatus = ({ isOpen, onClose , status}) => { id, }); console.log(res); - setIsLoading(false) - onClose() - } catch (error) {} + setIsLoading(false); + handleClose(); + } catch (error) { + setIsLoading(false); + } }; + const handleClose = () => { + setSelectedItem("") + onClose() + } + return ( - + Update IO Status Transaction - - Status - - - } - fontSize={"sm"} - fontWeight={500} - w={"100%"} - textAlign={"left"} - > - - {selectedItem ? selectedItem: "No action"} - - - - - {status?.map(({ id, statusAdmin }) => ( - handleMenuItemClick(statusAdmin, id)} - > + + + Status + + + } + fontSize={"sm"} + fontWeight={500} + w={"100%"} + textAlign={"left"} + > + {selectedItem ? ( - {statusAdmin} + rounded={"full"} + pt={1.5} + pb={1.5} + ps={4} + pe={4} + mt={1.5} + mb={1.5} + textTransform={"none"} + colorScheme={ + selectedItem === "Draft" + ? "gray" + : selectedItem === "Processing" + ? "yellow" + : selectedItem === "Open" + ? "blue" + : selectedItem === "Closed" + ? "green" + : selectedItem === "Exited" + ? "red" + : selectedItem === "Canclled" + ? "orange" + : "purple" + } + py={"3px"} px={"8px"} + > + {selectedItem} - - ))} - - + ) : "Select Item"} + + + {status?.length > 0 ? + {status?.map(({ id, statusAdmin }) => ( + handleMenuItemClick(statusAdmin, id)} + > + + {statusAdmin} + + + ))} + :""} + + {error} + - diff --git a/src/Pages/IO_Management/ViewIO/ViewIOdata.jsx b/src/Pages/IO_Management/ViewIO/ViewIOdata.jsx index bb20909..88ac59f 100644 --- a/src/Pages/IO_Management/ViewIO/ViewIOdata.jsx +++ b/src/Pages/IO_Management/ViewIO/ViewIOdata.jsx @@ -35,6 +35,7 @@ import IOArtifacts from "../CreateIO/IOArtifacts"; import IOCashDetails from "../CreateIO/IOCashDetails"; import IONAVDetails from "../CreateIO/IONAVDetails"; import { useGetIOprepopulateDataQuery } from "../../../Services/io.service"; +import UnderConstruction from "../../UnderConstruction"; const ViewIOdata = () => { @@ -51,10 +52,12 @@ const ViewIOdata = () => { { label: "Investment documents", content: }, { label: "Key merits", content: }, { label: "IO artifacts", content: }, - { label: "Investors", content: }, + // { label: "Investors", content: }, + { label: "Investors", content: }, { label: "IO Cash Details", content: }, { label: "IO NAV Details", content: }, - { label: "Distribution to Investors", content: }, + // { label: "Distribution to Investors", content: }, + { label: "Distribution to Investors", content: }, ]; return ( diff --git a/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx b/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx index a1616ac..4399d1f 100644 --- a/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx +++ b/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx @@ -23,6 +23,7 @@ import { Badge, Box, Icon, + HStack, } from "@chakra-ui/react"; import header from "../../../assets/IOheader.png"; import { HiDotsVertical } from "react-icons/hi"; @@ -40,6 +41,7 @@ import Cancle from "./HeaderModal/Cancle"; import { AddIcon } from "@chakra-ui/icons"; import { GrGallery } from "react-icons/gr"; import Loader01 from "../../../Components/Loaders/Loader01"; +import { formatCurrency } from "../../../Components/CurrencyInput"; const ViewIOdataHeader = ({data, isLoading}) => { const params = useParams(); @@ -166,7 +168,7 @@ console.log(isLoading); {/* {IODetails?.ioName}/ */} {IODetails?.artifactsImage?.[0]?.artifactPathName ? ( @@ -249,6 +251,10 @@ console.log(isLoading); : "---"} + + + + @@ -290,7 +296,7 @@ console.log(isLoading); IO NAV - {IODetails?.ioNAV ? IODetails?.ioNAV : "00.00"} + {IODetails?.ioNAV ? formatCurrency(IODetails?.ioNAV) : "00.00"} @@ -299,7 +305,7 @@ console.log(isLoading); IO cash - {IODetails?.ioCash ? IODetails?.ioCash : "00.00"} + {IODetails?.ioCash ? formatCurrency(IODetails?.ioCash) : "00.00"} @@ -308,10 +314,12 @@ console.log(isLoading); IO MV NAV - {IODetails?.ioMVNAV ? IODetails?.ioMVNAV : "00.00"} + {IODetails?.ioMVNAV ? formatCurrency(IODetails?.ioMVNAV) : "00.00"} + + { // ====================================================[Table Filter]================================================================ const filteredData = investorDetails?.data?.rows?.filter((item) => { // Filter by name (case insensitive) - const name = item.clientReference_id; + const name = [item?.principal?.firstName, item?.principal?.lastName, item?.country?.countryName, item?.principal?.mobileNumber, item?.principal?.emailAddress].filter(Boolean).join(' '); const searchLower = searchTerm.toLowerCase(); const nameMatches = name?.toLowerCase().includes(searchLower); diff --git a/src/Pages/UnderConstruction.jsx b/src/Pages/UnderConstruction.jsx index 834dc42..56bf614 100644 --- a/src/Pages/UnderConstruction.jsx +++ b/src/Pages/UnderConstruction.jsx @@ -3,10 +3,10 @@ import React from 'react' // import noInternet from "../assets/Error.svg" import robot from "../assets/under-construction.png" -const UnderConstruction = ({title}) => { +const UnderConstruction = ({title, h}) => { return ( Date: Wed, 14 Aug 2024 18:48:25 +0530 Subject: [PATCH 5/5] update --- src/Layout/DefaultLayout.jsx | 2 +- .../Deposit/DepositRequest/DepositRequest.jsx | 11 +------ .../DepositRequest/DepositRequestApprove.jsx | 2 +- .../DepositViewHistory/DepositHistory.jsx | 11 +------ .../CreateIO/IOArtifactsVideo.jsx | 5 ++- .../IO_Management/CreateIO/IODetails.jsx | 4 +++ src/Pages/IO_Management/KeyMeritsAdd.jsx | 1 + .../IO_Management/ViewIO/ViewIOdataHeader.jsx | 6 ++-- src/Pages/Master/Sponser/AddSponser.jsx | 31 +++++++++---------- 9 files changed, 31 insertions(+), 42 deletions(-) diff --git a/src/Layout/DefaultLayout.jsx b/src/Layout/DefaultLayout.jsx index 2995343..a0c05f8 100644 --- a/src/Layout/DefaultLayout.jsx +++ b/src/Layout/DefaultLayout.jsx @@ -136,7 +136,7 @@ const DashboardLayout = ({ isOnline }) => { case path.startsWith("/sponser"): return ( - Sponsorer + Sponsor ); case path.startsWith("/investment-type"): diff --git a/src/Pages/Deposit/DepositRequest/DepositRequest.jsx b/src/Pages/Deposit/DepositRequest/DepositRequest.jsx index b84279c..d04fc0e 100644 --- a/src/Pages/Deposit/DepositRequest/DepositRequest.jsx +++ b/src/Pages/Deposit/DepositRequest/DepositRequest.jsx @@ -70,15 +70,6 @@ const DepositRequest = () => { } = useGetDepositRequestQuery({ page: currentPage, size: pageSize }); - useEffect(() => { - // Simulate loading - const timer = setTimeout(() => { - setIsLoading(false); - }, 1500); - - // Cleanup the timer on component unmount - return () => clearTimeout(timer); - }, []); // ====================================================[Table Setup]================================================================ const tableHeadRow = [ @@ -311,7 +302,7 @@ const DepositRequest = () => { emptyMessage={`We don't have any Investment type `} tableHeadRow={tableHeadRow} data={extractedArray} - isLoading={isLoading} + isLoading={depositRequestLoading} viewActionId={actionId} setViewActionId={setActionId} // totalPages={10} diff --git a/src/Pages/Deposit/DepositRequest/DepositRequestApprove.jsx b/src/Pages/Deposit/DepositRequest/DepositRequestApprove.jsx index dc21c41..2df842d 100644 --- a/src/Pages/Deposit/DepositRequest/DepositRequestApprove.jsx +++ b/src/Pages/Deposit/DepositRequest/DepositRequestApprove.jsx @@ -28,7 +28,7 @@ const FILE_TYPES = ["image/jpeg", "image/png", "image/gif"]; export const conformModalSchema = yup.object().shape({ investorAmount: yup.string().required("Investor amount is required"), - comment: yup.string().required("Comment is required"), + comment: yup.string().notRequired(), supporting_FileName: yup.mixed().required("File is required"), // .test("fileType", "Unsupported File Format", (value) => { // return value && FILE_TYPES.includes(value.type); diff --git a/src/Pages/Deposit/DepositViewHistory/DepositHistory.jsx b/src/Pages/Deposit/DepositViewHistory/DepositHistory.jsx index e44b2e8..46016d5 100644 --- a/src/Pages/Deposit/DepositViewHistory/DepositHistory.jsx +++ b/src/Pages/Deposit/DepositViewHistory/DepositHistory.jsx @@ -64,15 +64,6 @@ const DepositHistory = () => { } = useGetDepositHistoryQuery({ page: currentPage, size: pageSize }); - useEffect(() => { - // Simulate loading - const timer = setTimeout(() => { - setIsLoading(false); - }, 1500); - - // Cleanup the timer on component unmount - return () => clearTimeout(timer); - }, []); // ====================================================[Table Setup]================================================================ const tableHeadRow = [ @@ -304,7 +295,7 @@ const filteredData = data?.data?.rows.filter((item) => { tableHeadRow={tableHeadRow} // setData={setExtractedArray} data={extractedArray} - isLoading={isLoading} + isLoading={depositHistoryLoading} viewActionId={actionId} setViewActionId={setActionId} setMouseEnteredId={setMouseEnteredId} diff --git a/src/Pages/IO_Management/CreateIO/IOArtifactsVideo.jsx b/src/Pages/IO_Management/CreateIO/IOArtifactsVideo.jsx index 52d91d2..5416043 100644 --- a/src/Pages/IO_Management/CreateIO/IOArtifactsVideo.jsx +++ b/src/Pages/IO_Management/CreateIO/IOArtifactsVideo.jsx @@ -27,7 +27,10 @@ import ToastBox from "../../../Components/ToastBox"; const investmentVideoSchema = yup.object().shape({ artifactName: yup.string().required("Artifact name is required"), - artifactStreamingURL: yup.string().required("Artifact streaming URL is required").url("Invalid URL format"), + artifactStreamingURL: yup.string() + .required("Artifact streaming URL is required") + .url("Invalid URL format") + .matches(/\.mp4$/, "URL must end with .mp4"), }); const IOArtifactsAdd = ({ isOpen, onClose, firstField, actionId, setActionId, data }) => { diff --git a/src/Pages/IO_Management/CreateIO/IODetails.jsx b/src/Pages/IO_Management/CreateIO/IODetails.jsx index 7afc83c..e828255 100644 --- a/src/Pages/IO_Management/CreateIO/IODetails.jsx +++ b/src/Pages/IO_Management/CreateIO/IODetails.jsx @@ -286,6 +286,8 @@ const IODetails = ({ enableNextTab, index, data }) => { section: " ", width: "49%", value: IObyID?.data?.holdingPeriod, + maxLength:20, + helperText:`Maximum length should be 20 characters. You have entered ${watch()?.holdingPeriod?.length || 0} characters.` }, { label: "Holding Period (Arabic)", @@ -297,6 +299,8 @@ const IODetails = ({ enableNextTab, index, data }) => { section: " ", width: "49%", value: IObyID?.data?.holdingPeriodArabic, + maxLength:20, + helperText:`Maximum length should be 20 characters. You have entered ${watch()?.holdingPeriodArabic?.length || 0} characters.` }, diff --git a/src/Pages/IO_Management/KeyMeritsAdd.jsx b/src/Pages/IO_Management/KeyMeritsAdd.jsx index eb44428..2ce992b 100644 --- a/src/Pages/IO_Management/KeyMeritsAdd.jsx +++ b/src/Pages/IO_Management/KeyMeritsAdd.jsx @@ -136,6 +136,7 @@ const KeyMeritsAdd = ({ isOpen, onClose, firstField, id, icons }) => { const handleClose = () => { onClose(); + setIsLoading(false); setAlert(false); reset(); setFile(null); diff --git a/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx b/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx index 4399d1f..a0c3a2d 100644 --- a/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx +++ b/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx @@ -158,7 +158,9 @@ const filteredMenu = menu?.filter(item => apiTransactionTitles?.includes(item.id -console.log(isLoading); +console.log(IODetails?.ioNAV); +console.log(IODetails?.ioCash); +console.log(IODetails?.ioMVNAV); @@ -305,7 +307,7 @@ console.log(isLoading); IO cash - {IODetails?.ioCash ? formatCurrency(IODetails?.ioCash) : "00.00"} + {IODetails?.ioCash ? IODetails?.ioCash : "00.00"} diff --git a/src/Pages/Master/Sponser/AddSponser.jsx b/src/Pages/Master/Sponser/AddSponser.jsx index 3859537..7f706b3 100644 --- a/src/Pages/Master/Sponser/AddSponser.jsx +++ b/src/Pages/Master/Sponser/AddSponser.jsx @@ -54,7 +54,7 @@ const AddSponser = () => { const [isLoadingBtn, setIsLoadingBtn] = useState(false); const [alert, setAlert] = useState(false); const [form, setForm] = useState(); - const [isSwitchOn, setIsSwitchOn] = useState(); + const [isSwitchOn, setIsSwitchOn] = useState(true); const [createSponser] = useCreateSponserMutation(); const [updateSponser] = useUpdateSponserMutation(); @@ -62,9 +62,6 @@ const AddSponser = () => { // Fetch sponsor data only if id exists const {data: sponserByIdData,error,isLoading,} = useGetSponserByIdQuery(id, {skip: !id,}); - console.log(sponserByIdData); - - // ======================== [validators] =========================== const { @@ -124,15 +121,15 @@ const AddSponser = () => { setIsLoadingBtn(false); setAlert(false); navigate("/sponser"); - } else { + } else if(response?.error?.status === 400) { toast({ render: () => ( - + ), }); setIsLoadingBtn(false); - navigate("/sponser"); + setAlert(false) } }); } catch (error) { @@ -179,22 +176,22 @@ const AddSponser = () => { const formFields = [ { - label: "Sponser name (English)", + label: "Sponsor name (English)", placeHolder: " ", name: "sponsorName", type: "text", isRequired: true, - section: "Add Details", + section: "", maxLength:50, helperText:`Maximum length should be 50 characters. You have entered ${watch()?.sponsorName?.length || 0} characters.` }, { - label: "Sponser name (Arabic)", + label: "Sponsor name (Arabic)", name: "sponsorNameArabic", placeHolder: " ", type: "text", isRequired: true, - section: "Add Details", + section: "", arabic: true, right: true, maxLength:55, @@ -206,7 +203,7 @@ const AddSponser = () => { placeHolder: " ", type: "email", // isRequired: true, - section: "Add Details", + section: "", }, ]; @@ -214,22 +211,22 @@ const AddSponser = () => { const formEditFields = [ { - label: "Sponser name", + label: "Sponsor name", placeHolder: " ", name: "sponsorName", type: "text", isRequired: true, - section: "Add Details", + section: "", maxLength:55, helperText:`Maximum length should be 55 characters. You have entered ${watch()?.sponsorName?.length || 0} characters.` }, { - label: "Sponser name (Arabic)", + label: "Sponsor name (Arabic)", name: "sponsorNameArabic", placeHolder: " ", type: "text", isRequired: true, - section: "Add Details", + section: "", arabic: true, maxLength:55, helperText:`Maximum length should be 55 characters. You have entered ${watch()?.sponsorNameArabic?.length || 0} characters.` @@ -240,7 +237,7 @@ const AddSponser = () => { placeHolder: " ", type: "email", // isRequired: true, - section: "Add Details", + section: "", }, ];