UNPKG

@thy-rathana/nuxt-infinite-scroll

Version:

Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.

41 lines (38 loc) 1.6 kB
import * as vue from 'vue'; import { MaybeRef, Ref } from 'vue'; import * as _vue_shared from '@vue/shared'; type DefaultResponse<TItem> = { list?: TItem[]; total?: number; }; type InitialData<TResponse extends DefaultResponse<TItem>, TItem> = TResponse & DefaultResponse<TItem>; interface InfiniteScrollOptions<TQuery, TItem, TResponse extends DefaultResponse<TItem>> { fetchFn: (query: TQuery & { page: number; page_size: number; }) => Promise<InitialData<TResponse, TItem> | undefined>; filters: MaybeRef<TQuery>; pageSize?: number; distance?: number; } declare function useNuxtInfiniteScroll<TQuery, TItem, TResponse extends DefaultResponse<TItem>>({ fetchFn, filters, pageSize, distance, }: InfiniteScrollOptions<TQuery, TItem, TResponse>): Promise<{ data: [TResponse] extends [Ref<any, any>] ? _vue_shared.IfAny<TResponse, Ref<TResponse, TResponse>, TResponse> : Ref<vue.UnwrapRef<TResponse>, TResponse | vue.UnwrapRef<TResponse>>; items: Ref<TItem[], TItem[]>; isLoading: Ref<boolean, boolean>; isEnd: Ref<boolean, boolean>; isNoData: Ref<boolean, boolean>; reset: () => void; fetchMore: (callbackFc?: () => void) => Promise<void>; setTarget: (el: HTMLElement | null) => void; }>; type UseInfiniteScrollFetch = { data: Ref<any>; items: Ref<any[]>; isLoading: Ref<boolean>; isEnd: Ref<boolean>; isNoData: Ref<boolean>; reset: () => void; fetchMore: () => Promise<void>; setTarget: (el: HTMLElement | null) => void; }; export { type UseInfiniteScrollFetch, useNuxtInfiniteScroll };