import { ComputedRef, Ref } from 'vue';
import { Options, QueryResult } from './core/types';

export type DataType = {
    list: any[];
    [key: string]: any;
};
export type LoadMoreService<R extends DataType> = (data?: R) => Promise<R>;
export type LoadMoreBaseOptions<R> = Pick<Options<R, any>, 'ready' | 'manual' | 'refreshDeps' | 'refreshDepsAction' | 'debounceInterval' | 'debounceOptions' | 'throttleInterval' | 'throttleOptions' | 'errorRetryCount' | 'errorRetryInterval'> & {
    dataListKey?: string;
    isNoMore?: (data?: R) => boolean;
    onBefore?: () => void;
    onAfter?: () => void;
    onSuccess?: (data: R) => void;
    onError?: (error: Error) => void;
};
type LoadMoreQueryResult<R extends DataType> = Pick<QueryResult<R, any>, 'data' | 'loading' | 'error' | 'refresh' | 'refreshAsync' | 'cancel' | 'mutate'> & {
    dataList: ComputedRef<R['list']>;
    noMore: ComputedRef<boolean>;
    loadingMore: Ref<boolean>;
    loadMore: () => void;
    loadMoreAsync: () => Promise<R>;
};
declare function useLoadMore<R extends DataType>(service: LoadMoreService<R>, options?: LoadMoreBaseOptions<R>): LoadMoreQueryResult<R>;
export default useLoadMore;
