MCPcopy
hub / github.com/TanStack/query / infiniteQueryBehavior

Function infiniteQueryBehavior

packages/query-core/src/infiniteQueryBehavior.ts:11–133  ·  view source on GitHub ↗
(
  pages?: number,
)

Source from the content-addressed store, hash-verified

9} from './types'
10
11export function infiniteQueryBehavior<TQueryFnData, TError, TData, TPageParam>(
12 pages?: number,
13): QueryBehavior<TQueryFnData, TError, InfiniteData<TData, TPageParam>> {
14 return {
15 onFetch: (context, query) => {
16 const options = context.options as InfiniteQueryPageParamsOptions<TData>
17 const direction = context.fetchOptions?.meta?.fetchMore?.direction
18 const oldPages = context.state.data?.pages || []
19 const oldPageParams = context.state.data?.pageParams || []
20 let result: InfiniteData<unknown> = { pages: [], pageParams: [] }
21 let currentPage = 0
22
23 const fetchFn = async () => {
24 let cancelled = false
25 const addSignalProperty = (object: unknown) => {
26 Object.defineProperty(object, 'signal', {
27 enumerable: true,
28 get: () => {
29 if (context.signal.aborted) {
30 cancelled = true
31 } else {
32 context.signal.addEventListener('abort', () => {
33 cancelled = true
34 })
35 }
36 return context.signal
37 },
38 })
39 }
40
41 const queryFn = ensureQueryFn(context.options, context.fetchOptions)
42
43 // Create function to fetch a page
44 const fetchPage = async (
45 data: InfiniteData<unknown>,
46 param: unknown,
47 previous?: boolean,
48 ): Promise<InfiniteData<unknown>> => {
49 if (cancelled) {
50 return Promise.reject()
51 }
52
53 if (param == null && data.pages.length) {
54 return Promise.resolve(data)
55 }
56
57 const createQueryFnContext = () => {
58 const queryFnContext: OmitKeyof<
59 QueryFunctionContext<QueryKey, unknown>,
60 'signal'
61 > = {
62 client: context.client,
63 queryKey: context.queryKey,
64 pageParam: param,
65 direction: previous ? 'backward' : 'forward',
66 meta: context.options.meta,
67 }
68 addSignalProperty(queryFnContext)

Callers 4

fetchInfiniteQueryMethod · 0.90
setOptionsMethod · 0.90
getOptimisticResultMethod · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…