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, options?: Omit< UseQueryOptions, 'queryKey' | 'queryFn' >, ): UseQueryResult => _useQuery(queryKey, queryFn, { context: queryContext, ...options, }); export type WrappedUseQuery< TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, > = { ( queryKey?: TQueryKey, options?: Omit< UseQueryOptions, 'queryKey' | 'queryFn' >, ): UseQueryResult; }; export const useMutation = < TData = unknown, TError = unknown, TVariables = void, TContext = unknown, >( mutationFn: MutationFunction, options?: UseMutationOptions, ): UseMutationResult => _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, ) => UseMutationResult; export const useInfiniteQuery = < TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, >( options: UseInfiniteQueryOptions< TQueryFnData, TError, TData, TQueryFnData, TQueryKey >, ): UseInfiniteQueryResult => _useInfiniteQuery(options); // eslint-disable-next-line @typescript-eslint/no-explicit-any export const useQueries: typeof _useQueries = ({ queries, context, }: { queries: readonly [...QueriesOptions]; context?: UseQueryOptions['context']; }): QueriesResults => _useQueries({ queries, context: context ?? queryContext }); export const useIsMutating = ( mutationKey?: Parameters[0], filters?: Parameters[1], options?: Parameters[2], ): ReturnType => _useIsMutating(mutationKey, filters, { context: queryContext, ...options }); export const useIsFetching = ( mutationKey?: Parameters[0], filters?: Parameters[1], options?: Parameters[2], ): ReturnType => _useIsFetching(mutationKey, filters, { context: queryContext, ...options });