Files
BrowserOS/packages/browseros-agent/apps/agent/lib/graphql/useGraphqlInfiniteQuery.ts
Dani Akash 290ee91a8b Add 'packages/browseros-agent/' from commit '90bd4be3008285bf3825aad3702aff98f872671a'
git-subtree-dir: packages/browseros-agent
git-subtree-mainline: 8f148d0918
git-subtree-split: 90bd4be300
2026-03-13 21:22:09 +05:30

50 lines
1.5 KiB
TypeScript

import {
type InfiniteData,
type UseInfiniteQueryOptions,
type UseInfiniteQueryResult,
useInfiniteQuery,
} from '@tanstack/react-query'
import type { TypedDocumentString } from '@/generated/graphql/graphql'
import { execute } from './execute'
import { getQueryKeyFromDocument } from './getQueryKeyFromDocument'
/**
* @public
*/
export const useGraphqlInfiniteQuery = <
TQueryFnData,
// biome-ignore lint/suspicious/noExplicitAny: TODO(dani) type GraphQL variables properly
TVariables extends Record<string, any> | undefined = undefined,
TPageParam extends string | undefined | number = undefined,
>(
query: TypedDocumentString<TQueryFnData, TVariables>,
getVariables: (pageParam: TPageParam) => TVariables,
options: Omit<
UseInfiniteQueryOptions<
TQueryFnData, // TQueryFnData
Error, // TError
InfiniteData<TQueryFnData, TPageParam> // TData
>,
'queryKey' | 'queryFn'
> & {
/** Required by React Query v5 */
initialPageParam: TPageParam
},
): UseInfiniteQueryResult<InfiniteData<TQueryFnData, TPageParam>, Error> => {
const queryKey = [getQueryKeyFromDocument(query)] as const
return useInfiniteQuery<
TQueryFnData, // TQueryFnData
Error, // TError
InfiniteData<TQueryFnData, TPageParam> // TData (pages + pageParams)
>({
queryKey,
queryFn: async ({ pageParam }) =>
execute<TQueryFnData, TVariables>(
query,
getVariables(pageParam as TPageParam),
),
...options,
})
}