diff --git a/packages/react-query/src/useMutationState.ts b/packages/react-query/src/useMutationState.ts index dfd0c41da3a..d39baa1a6e6 100644 --- a/packages/react-query/src/useMutationState.ts +++ b/packages/react-query/src/useMutationState.ts @@ -22,14 +22,34 @@ export function useIsMutating( ).length } -type MutationStateOptions = { +type MutationStateOptions< + TData = unknown, + TError = unknown, + TVariables = unknown, + TContext = unknown, + TResult = MutationState +> = { filters?: MutationFilters - select?: (mutation: Mutation) => TResult + select?: ( + mutation: Mutation + ) => TResult } -function getResult( +function getResult< + TData = unknown, + TError = unknown, + TVariables = unknown, + TContext = unknown, + TResult = MutationState +>( mutationCache: MutationCache, - options: MutationStateOptions, + options: MutationStateOptions< + TData, + TError, + TVariables, + TContext, + TResult + >, ): Array { return mutationCache .findAll(options.filters) @@ -39,13 +59,26 @@ function getResult( ) } -export function useMutationState( - options: MutationStateOptions = {}, +export function useMutationState< + TData = unknown, + TError = unknown, + TVariables = unknown, + TContext = unknown, + TResult = MutationState +>( + options: MutationStateOptions< + TData, + TError, + TVariables, + TContext, + TResult + > = {}, queryClient?: QueryClient, ): Array { const mutationCache = useQueryClient(queryClient).getMutationCache() const optionsRef = React.useRef(options) const result = React.useRef>(null) + if (result.current === null) { result.current = getResult(mutationCache, options) }