( pages?: number, )
| 9 | } from './types' |
| 10 | |
| 11 | export 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) |
no outgoing calls
no test coverage detected
searching dependent graphs…