@yoroi/common
Version:
The Common package of Yoroi SDK
33 lines (30 loc) • 844 B
text/typescript
import {
QueryKey,
useMutation,
UseMutationOptions,
useQueryClient,
} from 'react-query'
export const useMutationWithInvalidations = <
TData = unknown,
TError = unknown,
TVariables = void,
TContext = unknown,
>({
invalidateQueries,
...options
}: UseMutationOptions<TData, TError, TVariables, TContext> & {
invalidateQueries?: Array<QueryKey>
}) => {
const queryClient = useQueryClient()
return useMutation<TData, TError, TVariables, TContext>({
...options,
onMutate: (variables) => {
invalidateQueries?.forEach((key) => queryClient.cancelQueries(key))
return options?.onMutate?.(variables)
},
onSuccess: (data, variables, context) => {
invalidateQueries?.forEach((key) => queryClient.invalidateQueries(key))
return options?.onSuccess?.(data, variables, context)
},
})
}