explicaboamet
Version:
A Modular, Extensible and Flexible web3 wallet framework for building dApps.
120 lines (110 loc) • 3.29 kB
text/typescript
import type {
MutationFunction,
QueriesOptions,
QueriesResults,
QueryFunction,
QueryKey,
UseInfiniteQueryOptions,
UseInfiniteQueryResult,
UseMutationOptions,
UseMutationResult,
UseQueryOptions,
UseQueryResult,
} from '@tanstack/react-query';
import {
useInfiniteQuery as _useInfiniteQuery,
useIsFetching as _useIsFetching,
useIsMutating as _useIsMutating,
useMutation as _useMutation,
useQueries as _useQueries,
useQuery as _useQuery,
} from '@tanstack/react-query';
import { queryContext } from './client';
export const useQuery = <
TQueryFnData = unknown,
TError = unknown,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
>(
queryKey: TQueryKey,
queryFn: QueryFunction<TQueryFnData, TQueryKey>,
options?: Omit<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
'queryKey' | 'queryFn'
>,
): UseQueryResult<TData, TError> =>
_useQuery(queryKey, queryFn, {
context: queryContext,
...options,
});
export type WrappedUseQuery<
TQueryFnData = unknown,
TError = unknown,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
> = {
(
queryKey?: TQueryKey,
options?: Omit<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
'queryKey' | 'queryFn'
>,
): UseQueryResult<TData, TError>;
};
export const useMutation = <
TData = unknown,
TError = unknown,
TVariables = void,
TContext = unknown,
>(
mutationFn: MutationFunction<TData, TVariables>,
options?: UseMutationOptions<TData, TError, TVariables, TContext>,
): UseMutationResult<TData, TError, TVariables, TContext> =>
_useMutation(options?.mutationFn ?? mutationFn, {
context: queryContext,
...options,
});
// https://github.com/TanStack/query/issues/4264
export type WrappedUseMutation<
TData = unknown,
TError = unknown,
TVariables = void,
TContext = unknown,
> = (
options?: UseMutationOptions<TData, TError, TVariables, TContext>,
) => UseMutationResult<TData, TError, TVariables, TContext>;
export const useInfiniteQuery = <
TQueryFnData = unknown,
TError = unknown,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
>(
options: UseInfiniteQueryOptions<
TQueryFnData,
TError,
TData,
TQueryFnData,
TQueryKey
>,
): UseInfiniteQueryResult<TData, TError> => _useInfiniteQuery(options);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const useQueries: typeof _useQueries = <T extends any[]>({
queries,
context,
}: {
queries: readonly [...QueriesOptions<T>];
context?: UseQueryOptions['context'];
}): QueriesResults<T> =>
_useQueries<T>({ queries, context: context ?? queryContext });
export const useIsMutating = (
mutationKey?: Parameters<typeof _useIsMutating>[0],
filters?: Parameters<typeof _useIsMutating>[1],
options?: Parameters<typeof _useIsMutating>[2],
): ReturnType<typeof _useIsMutating> =>
_useIsMutating(mutationKey, filters, { context: queryContext, ...options });
export const useIsFetching = (
mutationKey?: Parameters<typeof _useIsFetching>[0],
filters?: Parameters<typeof _useIsFetching>[1],
options?: Parameters<typeof _useIsFetching>[2],
): ReturnType<typeof _useIsFetching> =>
_useIsFetching(mutationKey, filters, { context: queryContext, ...options });