You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.7 KiB
62 lines
1.7 KiB
import { useQuery } from "@tanstack/react-query";
|
|
import { useDbTableName, getPoints } from "../../../api";
|
|
import { useMergeTableData } from "../useMergeTableData";
|
|
import { STATUSES } from "../../../config";
|
|
import { usePendingPointsFilters } from "../../../stores/usePendingPointsFilters";
|
|
import { appendFiltersInUse } from "../../../utils.js";
|
|
import { useUpdateLayerCounter } from "../../../stores/useUpdateLayerCounter.js";
|
|
|
|
export const usePendingTableData = (page, resetPage, pageSize, setPageSize, sort) => {
|
|
const { filters, ranges } = usePendingPointsFilters();
|
|
const { updateCounter } = useUpdateLayerCounter();
|
|
const {
|
|
categories,
|
|
region,
|
|
} = filters;
|
|
|
|
const dbTable = useDbTableName();
|
|
|
|
const getParams = () => {
|
|
const params = new URLSearchParams({
|
|
page,
|
|
page_size: pageSize,
|
|
"categories[]": categories,
|
|
ordering: sort,
|
|
});
|
|
|
|
appendFiltersInUse(params, filters, ranges);
|
|
params.append("status[]", [STATUSES.pending, STATUSES.cancelled].join(","))
|
|
|
|
return params;
|
|
}
|
|
|
|
const {data, isInitialLoading, isFetching} = useQuery(
|
|
["table", page, filters, sort, dbTable, updateCounter],
|
|
async ({signal}) => {
|
|
const params = getParams();
|
|
|
|
return await getPoints(params, region, dbTable, signal);
|
|
},
|
|
{
|
|
onError: (err) => {
|
|
if (err.response.data.detail === "Неправильная страница") {
|
|
resetPage();
|
|
}
|
|
},
|
|
refetchOnWindowFocus: false
|
|
}
|
|
);
|
|
|
|
const {data: mergedData, isClickedPointLoading} = useMergeTableData(
|
|
data,
|
|
setPageSize
|
|
);
|
|
|
|
return {
|
|
data: mergedData,
|
|
pageSize,
|
|
isClickedPointLoading,
|
|
isDataLoading: isInitialLoading || isFetching,
|
|
};
|
|
};
|