import { type DefaultError, type InfiniteData, InfiniteQueryObserver, QueryClient, type QueryKey, QueryObserver, } from '@tanstack/query-core' import { Getter, WritableAtom, atom } from 'jotai' import { queryClientAtom } from './_queryClientAtom' import { baseAtomWithQuery } from './baseAtomWithQuery' import { AtomWithSuspenseInfiniteQueryOptions, AtomWithSuspenseInfiniteQueryResult, } from './types' import { defaultThrowOnError } from './utils' export function atomWithSuspenseInfiniteQuery< TQueryFnData, TError = DefaultError, TData = InfiniteData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, >( getOptions: ( get: Getter ) => AtomWithSuspenseInfiniteQueryOptions< TQueryFnData, TError, TData, TQueryKey, TPageParam >, getQueryClient: (get: Getter) => QueryClient = (get) => get(queryClientAtom) ): WritableAtom, [], void> { const suspenseOptionsAtom = atom((get) => { const options = getOptions(get) return { ...options, enabled: true, suspense: true, throwOnError: defaultThrowOnError, } }) return baseAtomWithQuery( (get: Getter) => get(suspenseOptionsAtom), InfiniteQueryObserver as typeof QueryObserver, getQueryClient ) as unknown as WritableAtom< AtomWithSuspenseInfiniteQueryResult, [], void > }