T

tRPC

โ“-help

Join Server

setMutationDefaults for optimistic updates

HHaaxor16895/16/2023
I have a preferences router, with a get query and a set mutation. I had optimistic updates set up in the onSuccess of the useMutation hook, wherever I used it, like this:

const preferences = api.preferences.get.useQuery();
const savePreferences = api.preferences.set.useMutation({
  onSuccess: v =>
    queryClient.setQueryData(
      getQueryKey(api.preferences.get, undefined, 'query'),
      v
    )
});


Now that I'm adding more and more instances where I need to use the set endpoint, I don't want to copy paste the onSuccess for optimistic updates. There is the setMutationDefaults function of query client that would be ideal for this but it isn't working.

queryClient.setMutationDefaults(getQueryKey(api.preferences.set), {
  onSuccess: v =>
    queryClient.setQueryData(
      getQueryKey(api.preferences.get, undefined, 'query'),
      v
    )
})


Is this not working in tRPC wrapper because it's not setting the mutationKey or am I doing something wrong? Like I could make a wrapper hook for this mutation but using these defaults seems to me like much cleaner solution.
HHaaxor16895/16/2023
Hmm I found this closed issue https://github.com/trpc/trpc/pull/3528
I guess the adding of mutationKey was forgotten about?
HHaaxor16895/16/2023
After some investigation, turns out that for whatever reason, onSettled and onMutate work just fine. onSettled works only if I directly put it into hook call itself.
HHaaxor16895/16/2023
oh I found the culprit
HHaaxor16895/16/2023
Ok, made a PR with proposed fix ๐Ÿ™‚ https://github.com/trpc/trpc/pull/4371