import { Avatar, Badge, Box, Button, HStack, Input, Menu, MenuButton, MenuItem, MenuList, Portal, Select, Switch, Tag, Text, Tooltip, useDisclosure, useToast, } from "@chakra-ui/react"; import React, { useContext, useEffect, useState } from "react"; import { OPACITY_ON_LOAD } from "../../../Layout/animations"; import NormalTable from "../../../Components/DataTable/NormalTable"; import { HiDotsVertical } from "react-icons/hi"; import { Link, Link as RouterLink, useNavigate } from "react-router-dom"; import { AddIcon, CheckIcon, CloseIcon, DeleteIcon, EditIcon, EmailIcon, 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 { useGetIOsQuery } from "../../../Services/io.service"; import { TABLE_PAGINATION } from "../../../Constants/Paginations"; import { formatCurrency } from "../../../Components/CurrencyInput"; import { IoIosPhonePortrait } from "react-icons/io"; import MobileView from "../../../Components/MobileView"; import { ImMobile } from "react-icons/im"; import { generateSerialNumber, removeTrailingZeros, } from "../../../Constants/Constants"; // import { debounce } from "./AddIOCharges"; const formatDate = (date) => { return new Date(date).toLocaleDateString("en-GB", { day: "2-digit", month: "2-digit", year: "numeric", }); }; // Simple date formatter const ViewIOTable = () => { const navigate = useNavigate(); const toast = useToast(); const { IODetails, setIODetails, slideFromRight } = useContext(GlobalStateContext); // const [isLoading, setIsLoading] = useState(true); const [deleteAlert, setDeleteAlert] = useState(false); const [actionId, setActionId] = useState(false); const [mouseEntered, setMouseEntered] = useState(false); const [mouseEnteredId, setMouseEnteredId] = useState(""); const { isOpen: isOpen, onOpen: onOpen, onClose: onClose } = useDisclosure(); // ===============================[ Paginations ] const [pageSize, setPageSize] = useState(TABLE_PAGINATION?.size); const [currentPage, setCurrentPage] = useState(TABLE_PAGINATION?.page); const [searchTerm, setSearchTerm] = useState(""); const [statusFilter, setStatusFilter] = useState(""); const [debouncedSearchTerm, setDebouncedSearchTerm] = useState(""); // Debounce the search term to avoid making a request on every keystroke useEffect(() => { const handler = setTimeout(() => { setDebouncedSearchTerm(searchTerm); }, 500); // Adjust delay as needed return () => { clearTimeout(handler); }; }, [searchTerm]); // ===============================[ RTK Api calls ] ============================================= const { data, isLoading, error } = useGetIOsQuery({ page: currentPage, size: pageSize, ioStatus_xid: statusFilter, search: debouncedSearchTerm, }, { skip: debouncedSearchTerm === "" && searchTerm !== "", // Skip if search is empty and it's not the initial request }); // ===============================[ Table Header ] const tableHeadRow = [ "Sr No.", "IO ID", "IO Name", "Sponsor", "Investment Type", "Goal Amount", "Amount Raised", "Closing Date", "IO Status", // "Preview", "Action", ]; // ====================================================[Table Filter]================================================================ const filteredData = data?.data?.rows?.filter((item) => { // Filter by name (case insensitive) const name = item.investmentNameEnglish; const searchLower = searchTerm.toLowerCase(); const nameMatches = name.toLowerCase().includes(searchLower); // Filter by status const status = item?.ioStatus?.statusAdmin; const statusMatches = statusFilter === "all" || (status && status.toLowerCase() === statusFilter.toLowerCase()); return nameMatches && statusMatches; }); const extractedArray = data?.data?.rows?.map((item, idx) => ({ "Sr No.": ( {/* {item.id} */} {generateSerialNumber(idx, currentPage, pageSize)} ), "IO ID": ( {item.io_id ? item.io_id : "---"} ), "IO Name": ( {item.investmentNameEnglish ? item.investmentNameEnglish : "---"} ), Sponsor: ( {item?.sponsor?.sponsorName ? item.sponsor?.sponsorName : "---"} ), "Investment Type": ( {item?.investmentType?.investmentTypeName ? item.investmentType?.investmentTypeName : "---"} ), "Goal Amount": ( $ {`${parseFloat(item.goalAmount || 0).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2, })}`} ), "Amount Raised": ( {/* {item.goalAmount ? formatCurrency(removeTrailingZeros(item.goalAmount)) : "---"} */} $ {`${parseFloat(item.totalRaisedAmount || 0).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2, })}`} ), "Closing Date": ( {/* {item.closingDate ? item.closingDate : "---"} */} {formatDate(item.closingDate ? item.closingDate : "---")} ), "IO Status": ( {item.ioStatus?.statusAdmin} ), Preview: ( { setActionId(item.id); onOpen(); }} rounded={"sm"} size={"xs"} variant={"ghost"} cursor={"pointer"} > View ), Action: ( {/* */} {/* */} {/* */} {/* */} ), })); const handleDelete = () => {}; return ( setSearchTerm(e.target.value)} /> {/* */} {/* */} setDeleteAlert(false)} isOpen={deleteAlert} message={"Are you sure you want to delete sponers?"} alertHandler={handleDelete} isLoading={isLoading} /> ); }; export default ViewIOTable;