From f99e78a8df99015acd468a55ae47b9d48056cbcb Mon Sep 17 00:00:00 2001 From: "Siddhesh.More" Date: Tue, 22 Oct 2024 16:28:14 +0530 Subject: [PATCH] updated --- src/Pages/User/AddUser.jsx | 13 ++ src/Pages/User/User.jsx | 286 +++++++++++++++++++++++++++++++++++++ src/Routes/Routes.js | 5 +- 3 files changed, 303 insertions(+), 1 deletion(-) create mode 100644 src/Pages/User/AddUser.jsx create mode 100644 src/Pages/User/User.jsx diff --git a/src/Pages/User/AddUser.jsx b/src/Pages/User/AddUser.jsx new file mode 100644 index 0000000..c05ad2f --- /dev/null +++ b/src/Pages/User/AddUser.jsx @@ -0,0 +1,13 @@ +import { Box } from '@chakra-ui/react' +import React from 'react' +import { OPACITY_ON_LOAD } from '../../Layout/animations' + +const AddUser = () => { + return ( + + + + ) +} + +export default AddUser \ No newline at end of file diff --git a/src/Pages/User/User.jsx b/src/Pages/User/User.jsx new file mode 100644 index 0000000..1406542 --- /dev/null +++ b/src/Pages/User/User.jsx @@ -0,0 +1,286 @@ +import {Badge, Box,Button,HStack,Input,Text,Tooltip,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 { Link, Link as RouterLink } from "react-router-dom"; +import {AddIcon,DeleteIcon,EditIcon,} from "@chakra-ui/icons"; +import Pagination from "../../Components/Pagination"; +import GlobalStateContext from "../../Contexts/GlobalStateContext"; +import CustomAlertDialog from "../../Components/CustomAlertDialog"; +import { useNavigate } from "react-router-dom"; +import ToastBox from "../../Components/ToastBox"; +// import { debounce } from "./AddSponser"; +import { TABLE_PAGINATION } from "../../Constants/Paginations"; +import { useDeleteSponserMutation, useGetSponserMasterQuery } from "../../Services/io.service"; +import { generateSerialNumber } from "../../Constants/Constants"; + +export const formatDate = (date) => { + const d = new Date(date); + const year = d.getFullYear(); + const month = String(d.getMonth() + 1).padStart(2, '0'); // Months are 0-indexed + const day = String(d.getDate()).padStart(2, '0'); + + return `${day}/${month}/${year}`; +}; + +const User = () => { + + const navigate = useNavigate(); + const toast = useToast(); + const [isLoading, setIsLoading] = useState(false); + const [deleteAlert, setDeleteAlert] = useState(false); + const [actionId, setActionId] = useState(false); + const [mouseEntered, setMouseEntered] = useState(false); + const [mouseEnteredId, setMouseEnteredId] = useState(""); + const [deleteSponser] = useDeleteSponserMutation(); + const { sponser, setSponser, slideFromRight } = useContext(GlobalStateContext); + + // =========================== [Use State] ============================= + const [pageSize, setPageSize] = useState(TABLE_PAGINATION?.size); + const [currentPage, setCurrentPage] = useState(TABLE_PAGINATION?.page); + const [searchTerm, setSearchTerm] = 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]); + const { data: sponsors, error, isLoading: isSponserLoading } = useGetSponserMasterQuery( + { + page: debouncedSearchTerm ? undefined : currentPage, // Omit pagination for search + size: debouncedSearchTerm ? undefined : pageSize, // Omit pagination for search + searchTerm: debouncedSearchTerm, + }, + { + skip: debouncedSearchTerm === "" && searchTerm !== "", // Skip if search is empty and it's not the initial request + } + ); + console.log(sponsors?.data?.rows); + + // ==============================[Table Filter]======================== + + const filteredData = sponsors?.data?.rows?.filter((item) => { + const name = item.sponsorName; + const searchLower = searchTerm?.toLowerCase(); + const nameMatches = name?.toLowerCase().includes(searchLower); + return nameMatches; + }); + + // ====================================================[Table Setup]================================================================ + + const tableHeadRow = [ + "Sr No", + "First Name", + "Last Name", + "Email Address", + "Action", + ]; + + const extractedArray = sponsors?.data?.rows?.map((item, index) => ({ + "Sr No": ( + + {/* {item.id} */} + {generateSerialNumber(index,currentPage, pageSize )} + + ), + "First Name": ( + + {item.sponsorName} + + ), + + "Last Name": ( + + {item.sponsorName} + + ), + + "Email Address": ( + + + {item.email ? item.email : "---" } + + + ), + Action: ( + + + + + + + + + + ), + })); + + // =========================== [Delete Function] ================================= + + const handleDelete = async () => { + console.log(actionId); + setIsLoading(true); + try { + const response = await deleteSponser(actionId); + 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) {} + }; + + + + return ( + + + + + {/* =======================[Search Input]======================== */} + + setSearchTerm(e.target.value)} + /> + + + + {/* ====================[Pagination]===================== */} + + + + {/* =====================[Add Button]===================== */} + + + + + + + + + {/* =================== [Data Table] ===================== */} + + + + {/* ======================== [Modal] ======================== */} + + setDeleteAlert(false)} + isOpen={deleteAlert} + message={"Are you sure you want to delete sponers?"} + alertHandler={handleDelete} + isLoading={isLoading} + /> + + ); +}; + +export default User; diff --git a/src/Routes/Routes.js b/src/Routes/Routes.js index 56dff41..dce9d96 100644 --- a/src/Routes/Routes.js +++ b/src/Routes/Routes.js @@ -43,6 +43,8 @@ import ApproveRequest from "../Pages/FawateerChecker/ApproveRequest/ApproveReque import ApproveHistory from "../Pages/FawateerChecker/ApproveHistory/ApproveHistoryChecker"; import ApproveHistoryMaker from "../Pages/FawateerChecker/ApproveHistory/ApproveHistoryMaker"; import EmailNotification from "../Pages/EmailNotification/EmailNotification"; +import User from "../Pages/User/User"; +import AddUser from "../Pages/User/AddUser"; export const RouteLink = [ // =============[ Tanami ]================ @@ -114,7 +116,8 @@ export const RouteLink = [ // { path: "/contact", Component: UnderConstruction }, // { path: "/users", Component: Users }, { path: "/email", Component: EmailNotification }, - { path: "/users", Component: UnderConstruction }, + { path: "/users", Component: User }, + { path: "/users/add-user", Component: AddUser }, { path: "/bank-details", Component: BankDetails }, // { path: "/bank-details", Component: UnderConstruction }, { path: "/bank-details/edit-bank-details/:id", Component: EditBankDetails },