From 9eca3ae9fce42c176bc3f00aa13925a49db16fb6 Mon Sep 17 00:00:00 2001 From: Swapnil Bendal <84583651+Swapnil155@users.noreply.github.com> Date: Fri, 27 Dec 2024 15:22:34 +0530 Subject: [PATCH] [update] - pagination on investor details --- src/Components/Pagination.jsx | 2 +- src/Constants/Paginations.js | 3 +- .../InvestorDetails/InvestorDetails.jsx | 168 +++++++++--------- 3 files changed, 84 insertions(+), 89 deletions(-) diff --git a/src/Components/Pagination.jsx b/src/Components/Pagination.jsx index 488775d..78d914d 100644 --- a/src/Components/Pagination.jsx +++ b/src/Components/Pagination.jsx @@ -49,7 +49,7 @@ const Pagination = ({ value={pageSize} onChange={handlePageSizeChange} > - {[15, 20, 30]?.map((size) => ( + {[15, 20, 30, 500]?.map((size) => ( diff --git a/src/Constants/Paginations.js b/src/Constants/Paginations.js index e657279..8c134dc 100644 --- a/src/Constants/Paginations.js +++ b/src/Constants/Paginations.js @@ -1,2 +1,3 @@ export const TABLE_PAGINATION = { page: 1, size: 20 } -export const IMAGE_URI = import.meta.env.VITE_API_IMAGE_URL \ No newline at end of file +export const IMAGE_URI = import.meta.env.VITE_API_IMAGE_URL +export const INVESTOR_TABLE_PAGINATION = { page: 1, size: 500 } \ No newline at end of file diff --git a/src/Pages/Investor_Management/InvestorDetails/InvestorDetails.jsx b/src/Pages/Investor_Management/InvestorDetails/InvestorDetails.jsx index 69abf45..d0f3683 100644 --- a/src/Pages/Investor_Management/InvestorDetails/InvestorDetails.jsx +++ b/src/Pages/Investor_Management/InvestorDetails/InvestorDetails.jsx @@ -1,5 +1,5 @@ +import { ViewIcon } from "@chakra-ui/icons"; import { - Avatar, Badge, Box, Button, @@ -11,23 +11,21 @@ import { useDisclosure, useToast, } from "@chakra-ui/react"; -import React, { useContext, useEffect, useState, useRef } from "react"; -import { OPACITY_ON_LOAD } from "../../../Layout/animations"; -import NormalTable from "../../../Components/DataTable/NormalTable"; -import { Link, Link as RouterLink, useNavigate } from "react-router-dom"; -import { - ViewIcon, -} from "@chakra-ui/icons"; -import Pagination from "../../../Components/Pagination"; -import GlobalStateContext from "../../../Contexts/GlobalStateContext"; -import CustomAlertDialog from "../../../Components/CustomAlertDialog"; -import ToastBox from "../../../Components/ToastBox"; -import { debounce } from "../../Master/Sponser/AddSponser"; -import InvestmentDetailsEdit from "./InvestmentDetailsEdit"; -import { useGetInvestorsQuery } from "../../../Services/investor.details.service"; -import { TABLE_PAGINATION } from "../../../Constants/Paginations"; -import { exportToExcel, exportToExcelNew, generateSerialNumber } from "../../../Constants/Constants"; +import React, { useContext, useEffect, useRef, useState } from "react"; import { LuFileSpreadsheet } from "react-icons/lu"; +import { useNavigate } from "react-router-dom"; +import CustomAlertDialog from "../../../Components/CustomAlertDialog"; +import NormalTable from "../../../Components/DataTable/NormalTable"; +import Pagination from "../../../Components/Pagination"; +import { + exportToExcelNew, + generateSerialNumber, +} from "../../../Constants/Constants"; +import { INVESTOR_TABLE_PAGINATION } from "../../../Constants/Paginations"; +import GlobalStateContext from "../../../Contexts/GlobalStateContext"; +import { OPACITY_ON_LOAD } from "../../../Layout/animations"; +import { useGetInvestorsQuery } from "../../../Services/investor.details.service"; +import InvestmentDetailsEdit from "./InvestmentDetailsEdit"; const formatDate = (date) => new Date(date).toLocaleDateString(); // Simple date formatter @@ -49,10 +47,11 @@ const InvestorDetails = () => { } = useDisclosure(); const btnRef = React.useRef(); - - // =========================== [Use State] ============================= - const [pageSize, setPageSize] = useState(TABLE_PAGINATION?.size); - const [currentPage, setCurrentPage] = useState(TABLE_PAGINATION?.page); + // =========================== [Use State] ============================= + const [pageSize, setPageSize] = useState(INVESTOR_TABLE_PAGINATION?.size); + const [currentPage, setCurrentPage] = useState( + INVESTOR_TABLE_PAGINATION?.page + ); const [searchTerm, setSearchTerm] = useState(""); const [debouncedSearchTerm, setDebouncedSearchTerm] = useState(""); @@ -73,20 +72,19 @@ const InvestorDetails = () => { data: investorDetails, isLoading: investorDetailsLoading, error, - } = useGetInvestorsQuery({ - page: debouncedSearchTerm ? undefined : currentPage, // Omit pagination for search - size: debouncedSearchTerm ? undefined : pageSize, // Omit pagination for search userStatus KYCStatus investorType_xid - search: debouncedSearchTerm, - userStatus: status, - KYCStatus: kyc, - country_xid: country - - }, - { - skip: debouncedSearchTerm === "" && searchTerm !== "", // Skip if search is empty and it's not the initial request - } -); - + } = useGetInvestorsQuery( + { + page: debouncedSearchTerm ? undefined : currentPage, // Omit pagination for search + size: debouncedSearchTerm ? undefined : pageSize, // Omit pagination for search userStatus KYCStatus investorType_xid + search: debouncedSearchTerm, + userStatus: status, + KYCStatus: kyc, + country_xid: country, + }, + { + skip: debouncedSearchTerm === "" && searchTerm !== "", // Skip if search is empty and it's not the initial request + } + ); useEffect(() => { // Simulate loading @@ -104,43 +102,41 @@ const InvestorDetails = () => { "Client ID", "First Name", "Last Name", - "Country", + "Country", "Phone Number", "E-mail ID", - "Type", + "Type", "KYC Status", "Status", "Action", ]; - // ====================================================[Table Filter]================================================================ const exportInvestor = investorDetails?.data?.rows?.map((item, idx) => ({ - "Id": parseInt(item?.id, 10) || item?.id, // Convert to integer, fallback to string if conversion fails + Id: parseInt(item?.id, 10) || item?.id, // Convert to integer, fallback to string if conversion fails "Client ID": item?.clientReference_id, // This is likely a string "First Name": item?.principal?.firstName, "Last Name": item?.principal?.lastName, - "Country": item?.country?.countryName, + Country: item?.country?.countryName, "Phone Number": item?.principal?.mobileNumber, // Skipping integer conversion, as this is likely a string "E-mail ID": item?.principal?.emailAddress, - "Type": item?.investor_type?.investorTypeName, - "Status": item.ioStatus ? "Ban" : "Unban", - "KYC Status": item.KYCStatus ? "Completed" : "Not complete" + Type: item?.investor_type?.investorTypeName, + Status: item.ioStatus ? "Ban" : "Unban", + "KYC Status": item.KYCStatus ? "Completed" : "Not complete", })); const extractedArray = investorDetails?.data?.rows?.map((item, idx) => ({ id: item?.id, "Sr No": ( {/* {item.id} */} - {generateSerialNumber(idx,currentPage, pageSize )} - + {generateSerialNumber(idx, currentPage, pageSize)} ), "Client ID": ( @@ -148,7 +144,7 @@ const InvestorDetails = () => { {item.clientReference_id} - + ), "First Name": ( @@ -185,39 +181,44 @@ const InvestorDetails = () => { ), - "Type": ( + Type: ( - - + + {item?.investor_type?.investorTypeName} ), Status: ( - - - {item.ioStatus ? "Ban" : "Unban"} - - + + + {item.ioStatus ? "Ban" : "Unban"} + + ), "KYC Status": ( - + {/* {item.KYCStatus ? "Completed" : "Not complete"} */} {item?.KYCStatus === true ? "Completed" : "NotCompleted"} @@ -235,7 +236,7 @@ const InvestorDetails = () => { placement="top" > + onClick={() => exportToExcelNew(exportInvestor, "Investor Details")} + leftIcon={} + colorScheme="forestGreen" + size={"sm"} + variant={"outline"} + rounded={"sm"} + fontSize={"xs"} + w={100} + me={2} + isDisabled={exportInvestor?.length === 0} + > + Export xls +