{"version":3,"file":"observableInfiniteQuery.mjs","sources":["../../../src/vanilla/observableInfiniteQuery.ts"],"sourcesContent":["import {\n  InfiniteQueryPageParamsOptions,\n  hasNextPage,\n  hasPreviousPage,\n} from './infiniteQueryBehavior'\nimport {\n  ObservableQuery,\n  ObservableQueryBaseResult,\n  ObservableQueryOptions,\n  createObservableQuery,\n} from './observableQuery'\nimport { QueryClient, ResultOptions } from './queryClient'\nimport { QueryInfo } from './queryInfo'\nimport { InfiniteQuery } from './queryWithInfinite'\nimport { Override } from './typeUtils'\nimport { InfiniteData } from './types'\n\nexport interface FetchNextPageOptions extends ResultOptions {\n  cancelRefetch?: boolean\n}\n\nexport interface FetchPreviousPageOptions extends ResultOptions {\n  cancelRefetch?: boolean\n}\n\nexport interface ObservableInfiniteQueryOptions<\n  TFetcherData = unknown,\n  TVars = unknown,\n  TError = Error,\n  TData = InfiniteData<TFetcherData>\n> extends ObservableQueryOptions<\n    TFetcherData,\n    TVars,\n    TError,\n    InfiniteData<TFetcherData>,\n    TData\n  > {\n  query: InfiniteQuery<TFetcherData, TVars, TError>\n}\n\nexport interface ObservableInfiniteQueryBaseResult<\n  TData = unknown,\n  TError = Error\n> extends ObservableQueryBaseResult<TData, TError> {\n  fetchNextPage: (\n    options?: FetchNextPageOptions\n  ) => Promise<ObservableInfiniteQueryResult<TData, TError>>\n  fetchPreviousPage: (\n    options?: FetchPreviousPageOptions\n  ) => Promise<ObservableInfiniteQueryResult<TData, TError>>\n  hasNextPage: boolean\n  hasPreviousPage: boolean\n  isFetchingNextPage: boolean\n  isFetchingPreviousPage: boolean\n}\n\nexport interface ObservableInfiniteQueryLoadingResult<\n  TData = unknown,\n  TError = Error\n> extends ObservableInfiniteQueryBaseResult<TData, TError> {\n  data: undefined\n  error: null\n}\n\nexport interface ObservableInfiniteQueryLoadingErrorResult<\n  TData = unknown,\n  TError = Error\n> extends ObservableInfiniteQueryBaseResult<TData, TError> {\n  data: undefined\n  error: TError\n}\n\nexport interface ObservableInfiniteQuerySuccessResult<\n  TData = unknown,\n  TError = Error\n> extends ObservableInfiniteQueryBaseResult<TData, TError> {\n  data: TData\n  error: null\n}\n\nexport type ObservableInfiniteQueryResult<TData = unknown, TError = Error> =\n  | ObservableInfiniteQueryLoadingResult<TData, TError>\n  | ObservableInfiniteQueryLoadingErrorResult<TData, TError>\n  | ObservableInfiniteQuerySuccessResult<TData, TError>\n\ntype ObservableInfiniteQueryListener<TData = unknown, TError = Error> = (\n  result: ObservableInfiniteQueryResult<TData, TError>\n) => void\n\nexport interface ObservableInfiniteQuery<\n  TFetcherData = unknown,\n  TVars = unknown,\n  TError = Error,\n  TData = InfiniteData<TFetcherData>\n> extends Override<\n    ObservableQuery<\n      TFetcherData,\n      TVars,\n      TError,\n      InfiniteData<TFetcherData>,\n      TData\n    >,\n    {\n      subscribe: (\n        listener?: ObservableInfiniteQueryListener<TData, TError>\n      ) => () => void\n\n      createResult: (\n        queryInfo: QueryInfo<\n          TFetcherData,\n          TVars,\n          TError,\n          InfiniteData<TFetcherData>\n        >,\n        options: ObservableInfiniteQueryOptions<\n          TFetcherData,\n          TVars,\n          TError,\n          TData\n        >\n      ) => ObservableInfiniteQueryResult<TData, TError>\n\n      getCurrentResult: () => ObservableInfiniteQueryResult<TData, TError>\n\n      getOptimisticResult: (\n        options: ObservableInfiniteQueryOptions<\n          TFetcherData,\n          TVars,\n          TError,\n          TData\n        >\n      ) => ObservableInfiniteQueryResult<TData, TError>\n    }\n  > {\n  fetchNextPage: (\n    options?: FetchNextPageOptions\n  ) => Promise<ObservableInfiniteQueryResult<TData, TError>>\n  fetchPreviousPage: (\n    options?: FetchPreviousPageOptions\n  ) => Promise<ObservableInfiniteQueryResult<TData, TError>>\n}\n\nexport const createObservableInfiniteQuery = <\n  TFetcherData = unknown,\n  TVars = unknown,\n  TError = Error,\n  TData = InfiniteData<TFetcherData>\n>(\n  client: QueryClient,\n  initialOptions: ObservableInfiniteQueryOptions<\n    TFetcherData,\n    TVars,\n    TError,\n    TData\n  >\n): ObservableInfiniteQuery<TFetcherData, TVars, TError, TData> => {\n  initialOptions.behavior = (\n    obsQuery: ObservableInfiniteQuery<TFetcherData, TVars, TError, TData>\n  ) => {\n    const { fetch, createResult } = obsQuery\n\n    const fetchNextPage = (options?: FetchNextPageOptions) =>\n      fetch({\n        ...options,\n        meta: {\n          fetchMore: { direction: 'forward' },\n        },\n      }) as Promise<ObservableInfiniteQueryResult<TData, TError>>\n\n    const fetchPreviousPage = (options?: FetchPreviousPageOptions) =>\n      fetch({\n        ...options,\n        meta: {\n          fetchMore: { direction: 'backward' },\n        },\n      }) as Promise<ObservableInfiniteQueryResult<TData, TError>>\n\n    Object.assign(obsQuery, {\n      fetchNextPage,\n      fetchPreviousPage,\n      createResult: (\n        queryInfo: QueryInfo<\n          TFetcherData,\n          TVars,\n          TError,\n          InfiniteData<TFetcherData>\n        >,\n        options: ObservableInfiniteQueryOptions<\n          TFetcherData,\n          TVars,\n          TError,\n          TData\n        >\n      ): ObservableInfiniteQueryResult<TData, TError> => {\n        const { state } = queryInfo\n        const result = createResult(queryInfo, options)\n\n        const { isFetching } = result\n\n        const isFetchingNextPage =\n          isFetching && state.fetchMeta?.fetchMore?.direction === 'forward'\n\n        const isFetchingPreviousPage =\n          isFetching && state.fetchMeta?.fetchMore?.direction === 'backward'\n\n        return {\n          ...result,\n          fetchNextPage,\n          fetchPreviousPage,\n          hasNextPage: hasNextPage(\n            options as unknown as InfiniteQueryPageParamsOptions,\n            state.data\n          ),\n          hasPreviousPage: hasPreviousPage(\n            options as unknown as InfiniteQueryPageParamsOptions,\n            state.data\n          ),\n          isFetchingNextPage,\n          isFetchingPreviousPage,\n        }\n      },\n    })\n  }\n\n  return createObservableQuery(\n    client,\n    initialOptions\n  ) as ObservableInfiniteQuery<TFetcherData, TVars, TError, TData>\n}\n"],"names":["createObservableInfiniteQuery","client","initialOptions","behavior","obsQuery","fetch","createResult","fetchNextPage","options","meta","fetchMore","direction","fetchPreviousPage","Object","assign","queryInfo","_state$fetchMeta","_state$fetchMeta2","state","result","isFetching","isFetchingNextPage","fetchMeta","isFetchingPreviousPage","hasNextPage","data","hasPreviousPage","createObservableQuery"],"mappings":";;;MA8IaA,6BAA6B,GAAGA,CAM3CC,MAAmB,EACnBC,cAKC,KAC+D;AAChEA,EAAAA,cAAc,CAACC,QAAQ,GACrBC,QAAqE,IAClE;IACH,MAAM;MAAEC,KAAK;AAAEC,MAAAA,YAAAA;AAAa,KAAC,GAAGF,QAAQ,CAAA;AAExC,IAAA,MAAMG,aAAa,GAAIC,OAA8B,IACnDH,KAAK,CAAC;AACJ,MAAA,GAAGG,OAAO;AACVC,MAAAA,IAAI,EAAE;AACJC,QAAAA,SAAS,EAAE;AAAEC,UAAAA,SAAS,EAAE,SAAA;AAAU,SAAA;AACpC,OAAA;AACF,KAAC,CAA0D,CAAA;AAE7D,IAAA,MAAMC,iBAAiB,GAAIJ,OAAkC,IAC3DH,KAAK,CAAC;AACJ,MAAA,GAAGG,OAAO;AACVC,MAAAA,IAAI,EAAE;AACJC,QAAAA,SAAS,EAAE;AAAEC,UAAAA,SAAS,EAAE,UAAA;AAAW,SAAA;AACrC,OAAA;AACF,KAAC,CAA0D,CAAA;AAE7DE,IAAAA,MAAM,CAACC,MAAM,CAACV,QAAQ,EAAE;MACtBG,aAAa;MACbK,iBAAiB;AACjBN,MAAAA,YAAY,EAAEA,CACZS,SAKC,EACDP,OAKC,KACgD;QAAA,IAAAQ,gBAAA,EAAAC,iBAAA,CAAA;QACjD,MAAM;AAAEC,UAAAA,KAAAA;AAAM,SAAC,GAAGH,SAAS,CAAA;AAC3B,QAAA,MAAMI,MAAM,GAAGb,YAAY,CAACS,SAAS,EAAEP,OAAO,CAAC,CAAA;QAE/C,MAAM;AAAEY,UAAAA,UAAAA;AAAW,SAAC,GAAGD,MAAM,CAAA;QAE7B,MAAME,kBAAkB,GACtBD,UAAU,IAAI,EAAAJ,gBAAA,GAAAE,KAAK,CAACI,SAAS,cAAAN,gBAAA,GAAfA,gBAAA,CAAiBN,SAAS,qBAA1BM,gBAAA,CAA4BL,SAAS,MAAK,SAAS,CAAA;QAEnE,MAAMY,sBAAsB,GAC1BH,UAAU,IAAI,EAAAH,iBAAA,GAAAC,KAAK,CAACI,SAAS,cAAAL,iBAAA,GAAfA,iBAAA,CAAiBP,SAAS,qBAA1BO,iBAAA,CAA4BN,SAAS,MAAK,UAAU,CAAA;QAEpE,OAAO;AACL,UAAA,GAAGQ,MAAM;UACTZ,aAAa;UACbK,iBAAiB;UACjBY,WAAW,EAAEA,WAAW,CACtBhB,OAAO,EACPU,KAAK,CAACO,IACR,CAAC;UACDC,eAAe,EAAEA,eAAe,CAC9BlB,OAAO,EACPU,KAAK,CAACO,IACR,CAAC;UACDJ,kBAAkB;AAClBE,UAAAA,sBAAAA;SACD,CAAA;AACH,OAAA;AACF,KAAC,CAAC,CAAA;GACH,CAAA;AAED,EAAA,OAAOI,qBAAqB,CAC1B1B,MAAM,EACNC,cACF,CAAC,CAAA;AACH;;;;"}