addded filter added inside api
This commit is contained in:
parent
5e27ed36fa
commit
c35eacca5a
@ -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>
|
||||||
|
@ -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) => {
|
||||||
|
@ -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;
|
||||||
},
|
},
|
||||||
|
@ -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 && (
|
||||||
|
Loading…
x
Reference in New Issue
Block a user