T
TanStack10mo ago
like-gold

pageParam on infiniteQuery is undefined?

A bit confused what is going on here.
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;
};
Current scenario is that there is a 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 undefined
0 Replies
No replies yetBe the first to reply to this messageJoin

Did you find this page helpful?