// Type definitions for react-query 0.3 // Project: https://github.com/tannerlinsley/react-query // Definitions by: Lukasz Fiszer // Jace Hensley // Matteo Frana // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped import { ComponentType } from 'react'; export function useQuery( queryKey: QueryKey, queryFn: QueryFunction, options?: QueryOptions ): QueryResult; // overloaded useQuery function with pagination export function useQuery( queryKey: QueryKey, queryFn: QueryFunction, options?: QueryOptionsPaginated ): QueryResultPaginated; export type QueryKey = string | [string, TVariables] | false | null | QueryKeyFunction; export type QueryKeyFunction = () => string | [string, TVariables] | false | null; export type QueryFunction = (variables: TVariables) => Promise; export interface QueryOptions { manual?: boolean; retry?: boolean | number; retryDelay?: (retryAttempt: number) => number; staleTime?: number; cacheTime?: number; refetchInterval?: false | number; refetchIntervalInBackground?: boolean; refetchOnWindowFocus?: boolean; onError?: (err: any) => void; onSuccess?: (data: TResult) => void; suspense?: boolean; initialData?: TResult; } export interface QueryOptionsPaginated extends QueryOptions { paginated: true; getCanFetchMore: (lastPage: TResult, allPages: TResult[]) => boolean; } export interface QueryResult { data: null | TResult; error: null | Error; isLoading: boolean; isFetching: boolean; isCached: boolean; failureCount: number; refetch: (arg?: {variables?: TVariables, merge?: (...args: any[]) => any, disableThrow?: boolean}) => void; } export interface QueryResultPaginated extends QueryResult { isFetchingMore: boolean; canFetchMore: boolean; fetchMore: (variables?: TVariables) => Promise; } export function prefetchQuery( queryKey: QueryKey, queryFn: QueryFunction, options?: PrefetchQueryOptions ): Promise; export interface PrefetchQueryOptions extends QueryOptions { force?: boolean; } export function useMutation( mutationFn: MutationFunction, mutationOptions?: MutationOptions ): [MutateFunction, MutationResult]; export type MutationFunction = ( variables: TVariables, ) => Promise; export interface MutationOptions { refetchQueries?: Array; refetchQueriesOnFailure?: boolean; } export type MutateFunction = ( variables?: TVariables, options?: { updateQuery?: string | [string, object], waitForRefetchQueries?: boolean; } ) => Promise; export interface MutationResult { data: TResults | null; isLoading: boolean; error: null | Error; promise: Promise; } export function setQueryData( queryKey: string | [string, object], data: any, options?: { shouldRefetch?: boolean } ): void | Promise; export function refetchQuery( queryKey: string | [string, object] | [string, false], force?: { force?: boolean } ): Promise; export function refetchAllQueries( options?: { force?: boolean, includeInactive: boolean } ): Promise; export function useIsFetching(): boolean; export const ReactQueryConfigProvider: React.ComponentType<{ config?: ReactQueryProviderConfig }>; export interface ReactQueryProviderConfig { retry?: number; retryDelay?: (attempt: number) => number; staleTime?: number; cacheTime?: number; refetchAllOnWindowFocus?: boolean; refetchInterval?: false | number; suspense?: boolean; } export function clearQueryCache(): void;