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