diff --git a/src/Pages/ManageContact/ManageContact.tsx b/src/Pages/ManageContact/ManageContact.tsx index 259e6c7..547f05d 100644 --- a/src/Pages/ManageContact/ManageContact.tsx +++ b/src/Pages/ManageContact/ManageContact.tsx @@ -1,19 +1,26 @@ -import { Box, HStack, Input, Text } from "@chakra-ui/react"; +import { Box, HStack, Text } from "@chakra-ui/react"; import MainFrame from "../../components/MainFrame"; import PendingRequests from "../../Pages/ManageContact/PendingRequests"; -import { InputGroup } from "../../components/ui/input-group"; -import { LuSearch } from "react-icons/lu"; +// import { InputGroup } from "../../components/ui/input-group"; +// import { LuSearch } from "react-icons/lu"; import DataTable from "../../components/DataTable"; import { useGetContactQuery } from "../../Redux/Service/manage.contactus.service"; import { useEffect, useState } from "react"; import { Spinner } from "../../components/Sipnner/Spinner"; +import { useDebounce } from "../../components/Hooks/useDebounce"; +import SearchComponent from "../../components/SearchComponent"; // table data const tableHeadRow = ["Sr. No", "Email id", "Name", "Date", "Action"]; const ManageContact = () => { - const { data, isLoading, isError } = useGetContactQuery(); - const [localData, setLocalData] = useState([]); + const [currentPage, setCurrentPage] = useState(1); + const [localData, setLocalData] = useState([]); + const [searchTerm, setSearchTerm] = useState(""); + const debouncedSearchTerm = useDebounce(searchTerm, 500); + const queryArgs = debouncedSearchTerm ? { page: currentPage, search: debouncedSearchTerm } : { page: currentPage }; + const { data, isLoading, isError, refetch, isFetching } = useGetContactQuery(queryArgs); + useEffect(() => { if (data) { @@ -21,6 +28,20 @@ const ManageContact = () => { } }, [data]); + const handlePageChange = (page: number) => { + setCurrentPage(page); + }; + + const handleSearchChange = (value: string) => { + setSearchTerm(value); + setCurrentPage(1); + }; + + const filteredData = localData?.filter((agency) => + agency?.first_name.toLowerCase().includes(searchTerm.toLowerCase()) || + agency?.email.toLowerCase().includes(searchTerm.toLowerCase()) + ); + const formatDateOfBirth = (dob: string): string => { return new Date(dob).toLocaleDateString("en-GB", { day: "2-digit", @@ -29,14 +50,15 @@ const ManageContact = () => { }); }; - const managepost = localData?.map((agency: any, index: number) => ({ + const managepost = filteredData?.map((agency: any, index: number) => ({ "Sr. No": index + 1, // Typically Sr. No starts from 1, not using id which might not be sequential "Email id": agency?.email || "-", Name: agency?.first_name || "-", Date: formatDateOfBirth(agency?.created_at) || "-", - Action: ( - - + Action: ( + + {agency.response_status === 0 ? : 'Resolved'} + {/* */} ), })); @@ -86,35 +108,25 @@ const ManageContact = () => { - - } - color={"#000"} - > - - + diff --git a/src/Pages/ManageContact/PendingRequests.tsx b/src/Pages/ManageContact/PendingRequests.tsx index 9356979..d65c055 100644 --- a/src/Pages/ManageContact/PendingRequests.tsx +++ b/src/Pages/ManageContact/PendingRequests.tsx @@ -10,95 +10,158 @@ import { DialogTrigger, } from "../../components/ui/dialog"; import { Badge, Field, HStack, Input, Stack, Textarea } from "@chakra-ui/react"; -function PendingRequests() { +import { usePendingRequestMutation } from "../../Redux/Service/manage.contactus.service"; +import { useState } from "react"; +import { Toaster, toaster } from "../../components/ui/toaster"; + +function PendingRequests({ data, refetch }: { data: any, refetch: VoidFunction }) { + const [isOpen, setIsOpen] = useState(false); + const [res, setRes] = useState({ + contact_us_xid: data.id, + message: data.message, + solution: '', + }) + const [pendingRequest] = usePendingRequestMutation() + + const handleOpenModal = () => { + setIsOpen(true); + }; + + + const handleSubmit = async (status: string) => { + const payload = { ...res, response_status: status }; + + if(res.solution === ''){ + toaster.create({ + title: "Error", + description: "All fields are required", + type: "error", + }); + return; + } + try { + const response = await pendingRequest(payload).unwrap() + if (response?.status === "success") { + toaster.create({ + title: "Success", + description: "Country updated successfully", + type: "success", + }); + setIsOpen(false); + refetch() + } else { + toaster.create({ + title: "Error", + description: "Failed to update Country", + type: "error", + }); + } + } catch (error) { + toaster.create({ + title: "Error", + description: "Something went wrong", + type: "error", + }); + } + } + return ( - - - - Answer request - - + <> + setIsOpen(open)}> + + + Answer request + + - - - - Pending Requests - - - - - - - - Request Type - - - - - Solution - -