addded filter added inside api

This commit is contained in:
pramod.mahajan 2025-10-07 14:02:25 +05:30
parent 5e27ed36fa
commit c35eacca5a
4 changed files with 40 additions and 17 deletions

View File

@ -7,13 +7,18 @@ import { DateRangePicker1 } from "../common/DateRangePicker";
import { zodResolver } from "@hookform/resolvers/zod"; import { zodResolver } from "@hookform/resolvers/zod";
import { defaultGalleryFilterValue, gallerySchema } from "./GallerySchema"; import { defaultGalleryFilterValue, gallerySchema } from "./GallerySchema";
import SelectMultiple from "../common/SelectMultiple"; import SelectMultiple from "../common/SelectMultiple";
import { localToUtc } from "../../utils/appUtils";
const GalleryFilterPanel = () => { const GalleryFilterPanel = ({ onApply }) => {
const selectedProject = useSelectedProject(); const selectedProject = useSelectedProject();
const [resetKey, setResetKey] = useState(0); const [resetKey, setResetKey] = useState(0);
const { data, isLoading, isError, error } = const { data, isLoading, isError, error } =
useImageGalleryFilter(selectedProject); useImageGalleryFilter(selectedProject);
const closePanel = () => {
document.querySelector(".offcanvas.show .btn-close")?.click();
};
const methods = useForm({ const methods = useForm({
resolver: zodResolver(gallerySchema), resolver: zodResolver(gallerySchema),
defaultValues: defaultGalleryFilterValue, defaultValues: defaultGalleryFilterValue,
@ -22,14 +27,25 @@ const GalleryFilterPanel = () => {
const { const {
handleSubmit, handleSubmit,
register, register,
setValue, setValue,reset,
formState: { errors }, formState: { errors },
} = methods; } = methods;
const onSubmit = (formData) => { 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 <div>Loading....</div>; if (isLoading) return <div>Loading....</div>;
if (isError) return <div>{error.message}</div>; if (isError) return <div>{error.message}</div>;
return ( return (
@ -88,8 +104,6 @@ const GalleryFilterPanel = () => {
<SelectMultiple <SelectMultiple
name="activityIds" name="activityIds"
label="Select Activity:" label="Select Activity:"
options={data?.activities} options={data?.activities}
labelKey="name" labelKey="name"
valueKey="id" valueKey="id"
@ -114,7 +128,7 @@ const GalleryFilterPanel = () => {
/> />
</div> </div>
<div className="d-flex flex-row gap-3 justify-content-end"> <div className="d-flex flex-row gap-3 justify-content-end">
<button className="btn btn-sm btn-label-secondary">Cancel</button> <button className="btn btn-sm btn-label-secondary" onClick={onClear}>Cancel</button>
<button type="submit" className="btn btn-sm btn-primary"> <button type="submit" className="btn btn-sm btn-primary">
Apply Apply
</button> </button>

View File

@ -9,7 +9,7 @@ import Pagination from "../common/Pagination";
import { formatUTCToLocalTime } from "../../utils/dateUtils"; import { formatUTCToLocalTime } from "../../utils/dateUtils";
import Loader from "../common/Loader"; import Loader from "../common/Loader";
const ImageGalleryListView = () => { const ImageGalleryListView = ({filter}) => {
const [hoveredImage, setHoveredImage] = useState(null); const [hoveredImage, setHoveredImage] = useState(null);
const selectedProject = useSelectedProject(); const selectedProject = useSelectedProject();
const [currentPage, setCurrentPage] = useState(1); const [currentPage, setCurrentPage] = useState(1);
@ -19,7 +19,7 @@ const ImageGalleryListView = () => {
selectedProject, selectedProject,
currentPage, currentPage,
10, 10,
{} filter
); );
const paginate = (page) => { const paginate = (page) => {

View File

@ -6,23 +6,30 @@ import { ImageGalleryRepository } from "../repositories/ImageGalleryAPI";
import { useInfiniteQuery, useQuery } from "@tanstack/react-query"; 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 useImageGallery = (selectedProjectId,pageNumber, pageSize, filters) => {
const hasFilters = filters && Object.values(filters).some(
value => Array.isArray(value) ? value.length > 0 : value !== null && value !== ""
);
return useQuery({ return useQuery({
queryKey: ["imageGallery", selectedProjectId, pageNumber, pageSize, hasFilters ? filters : null], queryKey: ["imageGallery", selectedProjectId, pageNumber, pageSize,filters],
enabled: !!selectedProjectId, enabled: !!selectedProjectId,
queryFn: async () => { queryFn: async () => {
const cleanedFilter = cleanFilter(filters)
const res = await ImageGalleryRepository.ImagesGet( const res = await ImageGalleryRepository.ImagesGet(
selectedProjectId, selectedProjectId,
pageNumber, pageNumber,
pageSize, pageSize,
hasFilters ? filters : undefined, cleanedFilter
); );
return res.data; return res.data;
}, },

View File

@ -36,9 +36,11 @@ export const useGalleryContext = () => {
}; };
const ImageGalleryPage = () => { const ImageGalleryPage = () => {
const [filter,setFilter] = useState()
const selectedProjectId = useSelectedProject(); const selectedProjectId = useSelectedProject();
const { projectNames } = useProjectName(); const { projectNames } = useProjectName();
const [openGallery, setOpenGallery] = useState({ isOpen: false, data: null }); const [openGallery, setOpenGallery] = useState({ isOpen: false, data: null });
const { data: assignedServices = [], isLoading } = const { data: assignedServices = [], isLoading } =
@ -58,7 +60,7 @@ const ImageGalleryPage = () => {
useEffect(()=>{ useEffect(()=>{
setShowTrigger(true); setShowTrigger(true);
setOffcanvasContent("Gallery Filter",<GalleryFilterPanel/>); setOffcanvasContent("Gallery Filter",<GalleryFilterPanel onApply={setFilter}/>);
return ()=>{ return ()=>{
setOffcanvasContent("",null) setOffcanvasContent("",null)
@ -102,7 +104,7 @@ const ImageGalleryPage = () => {
</div> </div>
)} )}
<ImageGalleryListView /> <ImageGalleryListView filter={filter}/>
</div> </div>
{openGallery?.isOpen && ( {openGallery?.isOpen && (