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 { 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 <div>Loading....</div>;
if (isError) return <div>{error.message}</div>;
return (
@ -88,8 +104,6 @@ const GalleryFilterPanel = () => {
<SelectMultiple
name="activityIds"
label="Select Activity:"
options={data?.activities}
labelKey="name"
valueKey="id"
@ -114,7 +128,7 @@ const GalleryFilterPanel = () => {
/>
</div>
<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">
Apply
</button>

View File

@ -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) => {

View File

@ -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;
},

View File

@ -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",<GalleryFilterPanel/>);
setOffcanvasContent("Gallery Filter",<GalleryFilterPanel onApply={setFilter}/>);
return ()=>{
setOffcanvasContent("",null)
@ -102,7 +104,7 @@ const ImageGalleryPage = () => {
</div>
)}
<ImageGalleryListView />
<ImageGalleryListView filter={filter}/>
</div>
{openGallery?.isOpen && (