From 8b795bb428ea6e7f328d21e2b63f47cd55872f8e Mon Sep 17 00:00:00 2001 From: AmirReza Jamali Date: Tue, 25 Nov 2025 13:54:40 +0330 Subject: [PATCH] feat(inquiries): Add pagination functionality to inquiries list table - Import and integrate Pagination component into inquiries table - Add allInquiries data exposure to access pagination metadata - Expose setParams function to allow dynamic pagination updates - Initialize default offset and limit parameters (10 items per page) - Reset offset to 0 when applying new filters for consistent pagination - Implement page change handler to update offset based on selected page - Maintain filter state while navigating between pages --- src/components/Tables/inquiries/index.tsx | 20 +++++++++++++++++-- .../inquiries/useInquiriesListPresenter.ts | 9 +++++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/components/Tables/inquiries/index.tsx b/src/components/Tables/inquiries/index.tsx index 5cad59b..ea83a40 100644 --- a/src/components/Tables/inquiries/index.tsx +++ b/src/components/Tables/inquiries/index.tsx @@ -3,6 +3,8 @@ import { TrashIcon } from "@/assets/icons"; import EmptyListWrapper from "@/components/HOC/EmptyListWrapper"; import ConfirmationModal from "@/components/ui/ConfirmationModal"; import ListHeader from "@/components/ui/ListHeader"; +import Modal from "@/components/ui/modal"; +import Pagination from "@/components/ui/pagination"; import Status from "@/components/ui/Status"; import { Table, @@ -16,14 +18,14 @@ import TableSkeleton from "@/components/ui/TableSkeleton"; import { _TooltipDefaultParams } from "@/constants/tooltip"; import { formatPhoneNumber, unixToDate } from "@/utils/shared"; import { Tooltip } from "react-tooltip"; -import useInquiriesListPresenter from "./useInquiriesListPresenter"; import InquiriesListFilters from "./InquiriesListFilters"; -import Modal from "@/components/ui/modal"; +import useInquiriesListPresenter from "./useInquiriesListPresenter"; const InquiriesTable = () => { const { columns, inquiries, + allInquiries, isFilterModalOpen, setIsFilterModalOpen, isPending, @@ -38,6 +40,7 @@ const InquiriesTable = () => { watch, setFilterValue, isMutating, + setParams, } = useInquiriesListPresenter(); return (
@@ -118,6 +121,19 @@ const InquiriesTable = () => { watch={watch} /> + { + setParams((currentParams) => ({ + ...currentParams, + offset: e.selected * (allInquiries?.meta?.limit ?? 10), + limit: allInquiries?.meta?.limit ?? 10, + })); + }} + /> {isDeleteModalOpen && ( { } = useForm(); useEffect(() => { - const newParams: Record = {}; + const newParams: Record = { + offset: 0, + limit: 10, + }; for (const [key, value] of searchParams.entries()) { newParams[key] = value; } @@ -50,7 +53,7 @@ const useInquiriesListPresenter = () => { const { mutate } = useDeleteInquiry(() => setIsDeleteModalOpen(false)); const search = (data: any) => { - const newParams = { ...params, ...data }; + const newParams = { ...params, ...data, offset: 0 }; const cleanedParams = deleteEmptyKeys(newParams); const queryString = new URLSearchParams(cleanedParams).toString(); router.push(`${pathname}?${queryString}`); @@ -65,6 +68,7 @@ const useInquiriesListPresenter = () => { return { columns, inquiries: data?.data.inquiries, + allInquiries: data, isFilterModalOpen, setIsFilterModalOpen, isPending, @@ -79,6 +83,7 @@ const useInquiriesListPresenter = () => { watch, setFilterValue, isMutating, + setParams, }; };