67 lines
1.5 KiB
JavaScript
67 lines
1.5 KiB
JavaScript
import { useInfiniteQuery, useQuery } from "@tanstack/react-query";
|
|
import {
|
|
getProfilesFilterList,
|
|
getProfilesFilterMasters,
|
|
} from "../api/masters.api";
|
|
|
|
export const useProfiles = (filters = {}) => {
|
|
|
|
// Remove empty filters
|
|
const cleanFilters = Object.entries(filters).reduce((acc, [key, value]) => {
|
|
if (
|
|
value !== "" &&
|
|
value !== null &&
|
|
value !== undefined &&
|
|
!(Array.isArray(value) && value.length === 0)
|
|
) {
|
|
acc[key] = value;
|
|
}
|
|
return acc;
|
|
}, {});
|
|
|
|
return useInfiniteQuery({
|
|
queryKey: ["profiles-filter-list", cleanFilters],
|
|
|
|
queryFn: ({ pageParam = 1 }) =>
|
|
getProfilesFilterList({
|
|
...cleanFilters,
|
|
page: pageParam,
|
|
}),
|
|
|
|
staleTime: 1000 * 60 * 2,
|
|
refetchOnWindowFocus: false,
|
|
|
|
|
|
getNextPageParam: (lastPage, allPages) => {
|
|
|
|
const currentPageData =
|
|
lastPage?.data?.data || lastPage?.data || [];
|
|
|
|
const totalLoaded = allPages.reduce((acc, page) => {
|
|
const pageData = page?.data?.data || page?.data || [];
|
|
return acc + pageData.length;
|
|
}, 0);
|
|
|
|
const totalRecords =
|
|
lastPage?.data?.recordsFiltered ||
|
|
lastPage?.recordsFiltered ||
|
|
0;
|
|
|
|
console.log("totalLoaded:", totalLoaded);
|
|
console.log("totalRecords:", totalRecords);
|
|
|
|
if (totalLoaded < totalRecords) {
|
|
return allPages.length + 1;
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
});
|
|
};
|
|
|
|
export const useProfilesFilterMasters = () =>
|
|
useQuery({
|
|
queryKey: ["profiles-filter-masters"],
|
|
queryFn: getProfilesFilterMasters,
|
|
}); |