From c35eacca5aca42f561ef9c1a3934cd6a3649df64 Mon Sep 17 00:00:00 2001 From: "pramod.mahajan" Date: Tue, 7 Oct 2025 14:02:25 +0530 Subject: [PATCH] addded filter added inside api --- src/components/gallary/GalleryFilterPanel.jsx | 26 ++++++++++++++----- .../gallary/ImageGalleryListView.jsx | 4 +-- src/hooks/useImageGallery.js | 21 ++++++++++----- src/pages/Gallary/ImageGallaryPage.jsx | 6 +++-- 4 files changed, 40 insertions(+), 17 deletions(-) diff --git a/src/components/gallary/GalleryFilterPanel.jsx b/src/components/gallary/GalleryFilterPanel.jsx index f6e1c6c2..e91ba9d1 100644 --- a/src/components/gallary/GalleryFilterPanel.jsx +++ b/src/components/gallary/GalleryFilterPanel.jsx @@ -7,13 +7,18 @@ import { DateRangePicker1 } from "../common/DateRangePicker"; import { zodResolver } from "@hookform/resolvers/zod"; import { defaultGalleryFilterValue, gallerySchema } from "./GallerySchema"; import SelectMultiple from "../common/SelectMultiple"; +import { localToUtc } from "../../utils/appUtils"; -const GalleryFilterPanel = () => { +const GalleryFilterPanel = ({ onApply }) => { const selectedProject = useSelectedProject(); const [resetKey, setResetKey] = useState(0); + const { data, isLoading, isError, error } = useImageGalleryFilter(selectedProject); + const closePanel = () => { + document.querySelector(".offcanvas.show .btn-close")?.click(); + }; const methods = useForm({ resolver: zodResolver(gallerySchema), defaultValues: defaultGalleryFilterValue, @@ -22,14 +27,25 @@ const GalleryFilterPanel = () => { const { handleSubmit, register, - setValue, + setValue,reset, formState: { errors }, } = methods; const onSubmit = (formData) => { - console.log(formData); + onApply({ + ...formData, + startDate: localToUtc(formData.startDate), + endDate: localToUtc(formData.endDate), + }); + closePanel() }; + const onClear=()=>{ + reset(defaultGalleryFilterValue); + setResetKey((prev) => prev + 1); + closePanel() + } + if (isLoading) return
Loading....
; if (isError) return
{error.message}
; return ( @@ -88,8 +104,6 @@ const GalleryFilterPanel = () => { { />
- + diff --git a/src/components/gallary/ImageGalleryListView.jsx b/src/components/gallary/ImageGalleryListView.jsx index 32960681..945736e3 100644 --- a/src/components/gallary/ImageGalleryListView.jsx +++ b/src/components/gallary/ImageGalleryListView.jsx @@ -9,7 +9,7 @@ import Pagination from "../common/Pagination"; import { formatUTCToLocalTime } from "../../utils/dateUtils"; import Loader from "../common/Loader"; -const ImageGalleryListView = () => { +const ImageGalleryListView = ({filter}) => { const [hoveredImage, setHoveredImage] = useState(null); const selectedProject = useSelectedProject(); const [currentPage, setCurrentPage] = useState(1); @@ -19,7 +19,7 @@ const ImageGalleryListView = () => { selectedProject, currentPage, 10, - {} + filter ); const paginate = (page) => { diff --git a/src/hooks/useImageGallery.js b/src/hooks/useImageGallery.js index 85f2c41b..ac3cb852 100644 --- a/src/hooks/useImageGallery.js +++ b/src/hooks/useImageGallery.js @@ -6,23 +6,30 @@ import { ImageGalleryRepository } from "../repositories/ImageGalleryAPI"; import { useInfiniteQuery, useQuery } from "@tanstack/react-query"; -const PAGE_SIZE = 10; +const cleanFilter = (filter) => { + const cleaned = { ...filter }; + + ["buildingIds", "floorIds", "workAreaIds", "activityIds","workCategoryIds","uploadedByIds","serviceIds"].forEach((key) => { + if (Array.isArray(cleaned[key]) && cleaned[key].length === 0) { + delete cleaned[key]; + } + }); + return cleaned; +};; const useImageGallery = (selectedProjectId,pageNumber, pageSize, filters) => { - const hasFilters = filters && Object.values(filters).some( - value => Array.isArray(value) ? value.length > 0 : value !== null && value !== "" - ); - + return useQuery({ - queryKey: ["imageGallery", selectedProjectId, pageNumber, pageSize, hasFilters ? filters : null], + queryKey: ["imageGallery", selectedProjectId, pageNumber, pageSize,filters], enabled: !!selectedProjectId, queryFn: async () => { + const cleanedFilter = cleanFilter(filters) const res = await ImageGalleryRepository.ImagesGet( selectedProjectId, pageNumber, pageSize, - hasFilters ? filters : undefined, + cleanedFilter ); return res.data; }, diff --git a/src/pages/Gallary/ImageGallaryPage.jsx b/src/pages/Gallary/ImageGallaryPage.jsx index a230a44b..b8d6383d 100644 --- a/src/pages/Gallary/ImageGallaryPage.jsx +++ b/src/pages/Gallary/ImageGallaryPage.jsx @@ -36,8 +36,10 @@ export const useGalleryContext = () => { }; const ImageGalleryPage = () => { + const [filter,setFilter] = useState() const selectedProjectId = useSelectedProject(); const { projectNames } = useProjectName(); + const [openGallery, setOpenGallery] = useState({ isOpen: false, data: null }); @@ -58,7 +60,7 @@ const ImageGalleryPage = () => { useEffect(()=>{ setShowTrigger(true); - setOffcanvasContent("Gallery Filter",); + setOffcanvasContent("Gallery Filter",); return ()=>{ setOffcanvasContent("",null) @@ -102,7 +104,7 @@ const ImageGalleryPage = () => {
)} - + {openGallery?.isOpen && (