From a77bb6cccc840eaea2a2c6bab00072b64c269f9c Mon Sep 17 00:00:00 2001 From: AmirReza Jamali Date: Tue, 25 Nov 2025 12:40:30 +0330 Subject: [PATCH] feat(inquiries): Add filtering functionality to inquiries list table - Create new InquiriesListFilters component with search and status filter fields - Integrate filter modal into inquiries table with form handling - Add INQUIRY_STATUS enum with pending, reviewed, approved, and rejected statuses - Implement URL-based query parameter management for filter persistence - Add form state management using react-hook-form with watch and setValue utilities - Connect filter search to useGetInquiries hook to fetch filtered results - Support clearing individual filter fields and closing filter modal --- .../Tables/inquiries/InquiriesListFilters.tsx | 82 +++++++++++++++++++ src/components/Tables/inquiries/index.tsx | 24 ++++++ .../inquiries/useInquiriesListPresenter.ts | 47 ++++++++++- src/constants/enums.ts | 6 ++ 4 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 src/components/Tables/inquiries/InquiriesListFilters.tsx diff --git a/src/components/Tables/inquiries/InquiriesListFilters.tsx b/src/components/Tables/inquiries/InquiriesListFilters.tsx new file mode 100644 index 0000000..173eb22 --- /dev/null +++ b/src/components/Tables/inquiries/InquiriesListFilters.tsx @@ -0,0 +1,82 @@ +import InputGroup from "@/components/FormElements/InputGroup"; +import { Select } from "@/components/FormElements/select"; +import { INQUIRY_STATUS } from "@/constants/enums"; +import { + FieldValues, + UseFormHandleSubmit, + UseFormRegister, + UseFormSetValue, + UseFormWatch, +} from "react-hook-form"; + +interface InquiriesListFiltersProps { + filterRegister: UseFormRegister; + setIsFilterModalOpen: (isOpen: boolean) => void; + isMutating: number; + handleFilterSubmit: UseFormHandleSubmit; + search: (data: any) => void; + watch: UseFormWatch; + setValue: UseFormSetValue; +} + +const statusOptions = Object.values(INQUIRY_STATUS).map((status) => ({ + label: status.charAt(0).toUpperCase() + status.slice(1), + value: status, +})); + +const InquiriesListFilters = ({ + filterRegister, + setIsFilterModalOpen, + isMutating, + handleFilterSubmit, + search, + setValue, + watch, +}: InquiriesListFiltersProps) => { + return ( +
+ +