pageParam on infiniteQuery is undefined?
A bit confused what is going on here.
Current scenario is that there is a
export const enumerateProjectsInfiniteQueryOpts = (
variables: EnumerateProjectsRequest | undefined,
init: RequestInit = {},
) => {
const queryKey = [
"projects",
"infinite",
{
queries: variables?.queries,
},
] as const;
return infiniteQueryOptions({
queryKey,
queryFn: variables
? ({ pageParam }: { pageParam: string | undefined }) => {
return enumerateProjects(
{
...variables,
queries: {
...variables.queries,
continuation: variables.queries.continuation || pageParam,
},
},
init,
);
}
: skipToken,
getNextPageParam: (lastPage) => lastPage.continuation || undefined,
initialPageParam: undefined,
});
};
export const useInfiniteProjects = () => {
const qc = useQueryClient();
const query = useInfiniteQuery({
...enumerateProjectsInfiniteQueryOpts({
queries: {
continuation: undefined,
},
}),
select: (data) => {
const lastPage = data.pages[data.pages.length - 1];
return {
projects: data.pages
.flatMap((page) => page.projects ?? [])
.filter((p) => p?.status !== "deleted")
.sort(
(a, b) =>
new Date(b.createdate).getTime() -
new Date(a.createdate).getTime(),
),
continuation: lastPage ? lastPage.continuation : undefined,
};
},
placeholderData: keepPreviousData,
});
useEffect(() => {
if (query.hasNextPage && !query.isFetchingNextPage) {
qc.prefetchInfiniteQuery({
...enumerateProjectsInfiniteQueryOpts({
queries: {
continuation: query.data?.continuation,
},
}),
});
}
}, [query.hasNextPage, query.isFetchingNextPage]);
return query;
};
export const enumerateProjectsInfiniteQueryOpts = (
variables: EnumerateProjectsRequest | undefined,
init: RequestInit = {},
) => {
const queryKey = [
"projects",
"infinite",
{
queries: variables?.queries,
},
] as const;
return infiniteQueryOptions({
queryKey,
queryFn: variables
? ({ pageParam }: { pageParam: string | undefined }) => {
return enumerateProjects(
{
...variables,
queries: {
...variables.queries,
continuation: variables.queries.continuation || pageParam,
},
},
init,
);
}
: skipToken,
getNextPageParam: (lastPage) => lastPage.continuation || undefined,
initialPageParam: undefined,
});
};
export const useInfiniteProjects = () => {
const qc = useQueryClient();
const query = useInfiniteQuery({
...enumerateProjectsInfiniteQueryOpts({
queries: {
continuation: undefined,
},
}),
select: (data) => {
const lastPage = data.pages[data.pages.length - 1];
return {
projects: data.pages
.flatMap((page) => page.projects ?? [])
.filter((p) => p?.status !== "deleted")
.sort(
(a, b) =>
new Date(b.createdate).getTime() -
new Date(a.createdate).getTime(),
),
continuation: lastPage ? lastPage.continuation : undefined,
};
},
placeholderData: keepPreviousData,
});
useEffect(() => {
if (query.hasNextPage && !query.isFetchingNextPage) {
qc.prefetchInfiniteQuery({
...enumerateProjectsInfiniteQueryOpts({
queries: {
continuation: query.data?.continuation,
},
}),
});
}
}, [query.hasNextPage, query.isFetchingNextPage]);
return query;
};
continuation token returned from the first request. getNextPageParam for enumerateProjectsInfiniteQueryOpts does contai an object of lastPage with the next continuation token. However... pageParam is always undefined. My variables object does have it, but wondering why pageParams is always undefined0 Replies