@@ -23,7 +23,7 @@ import {
2323 getQueryOptionsDefinition ,
2424} from './query-options' ;
2525import { generateMutatorReturnType } from './return-types' ;
26- import { isAngular , isSolid } from './utils' ;
26+ import { isAngular , isReact , isSolid } from './utils' ;
2727
2828type NormalizedTarget = {
2929 query : string ;
@@ -201,7 +201,8 @@ export const generateMutationHook = async ({
201201 seenTargets . add ( key ) ;
202202 return true ;
203203 } ) ;
204- const hasInvalidation = uniqueInvalidates . length > 0 && isAngularClient ;
204+ const hasInvalidation =
205+ uniqueInvalidates . length > 0 && ( isAngularClient || isReact ( outputClient ) ) ;
205206
206207 // For Angular, add http: HttpClient as FIRST param (required, before optional params)
207208 // This avoids TS1016 "required param cannot follow optional param"
@@ -210,7 +211,7 @@ export const generateMutationHook = async ({
210211 ? 'http: HttpClient, '
211212 : '' ;
212213
213- // For Angular mutations with invalidation, add queryClient as second required param
214+ // For Angular/React mutations with invalidation, add queryClient as second required param
214215 const queryClientParam = hasInvalidation ? 'queryClient: QueryClient, ' : '' ;
215216
216217 const mutationOptionsFn = `export const ${ mutationOptionsFnName } = <TError = ${ errorType } ,
@@ -237,10 +238,17 @@ ${hooksOptionImplementation}
237238
238239${
239240 hasInvalidation
240- ? ` const onSuccess = (data: Awaited<ReturnType<typeof ${ operationName } >>, variables: ${ definitions ? `{${ definitions } }` : 'void' } , onMutateResult: TContext, context: MutationFunctionContext) => {
241+ ? isAngular ( outputClient )
242+ ? ` const onSuccess = (data: Awaited<ReturnType<typeof ${ operationName } >>, variables: ${ definitions ? `{${ definitions } }` : 'void' } , onMutateResult: TContext, context: MutationFunctionContext) => {
241243${ uniqueInvalidates . map ( ( t ) => generateInvalidateCall ( t ) ) . join ( '\n' ) }
242244 mutationOptions?.onSuccess?.(data, variables, onMutateResult, context);
243245 };`
246+ : isReact ( outputClient )
247+ ? ` const onSuccess = (data: Awaited<ReturnType<typeof ${ operationName } >>, variables: ${ definitions ? `{${ definitions } }` : 'void' } , context: TContext) => {
248+ ${ uniqueInvalidates . map ( ( t ) => generateInvalidateCall ( t ) ) . join ( '\n' ) }
249+ mutationOptions?.onSuccess?.(data, variables, context);
250+ };`
251+ : ''
244252 : ''
245253}
246254
@@ -277,7 +285,7 @@ ${uniqueInvalidates.map((t) => generateInvalidateCall(t)).join('\n')}
277285 const optionalQueryClientArgument =
278286 hasQueryV5 && ! isAngular ( outputClient ) ? ', queryClient?: QueryClient' : '' ;
279287
280- const mutationImplementation = `${ mutationOptionsFnName } (${
288+ const mutationImplementation = `${ mutationOptionsFnName } (${ hasInvalidation ? `queryClient ${ isReact ( outputClient ) ? ' ?? backupQueryClient' : '' } , ` : '' } ${
281289 isRequestOptions ? 'options' : 'mutationOptions'
282290 } )`;
283291
320328 : ` const ${ mutationOptionsVarName } = ${ mutationImplementation } ;
321329
322330 return ${ operationPrefix } Mutation(() => ${ mutationOptionsVarName } );`
323- : ` return ${ operationPrefix } Mutation(${
331+ : ` ${ isReact ( outputClient ) && hasInvalidation ? 'const backupQueryClient = useQueryClient();\n ' : '' } return ${ operationPrefix } Mutation(${
324332 hasSvelteQueryV6
325333 ? `() => ({ ...${ mutationImplementation } ${ optionalQueryClientArgument ? ', queryClient' : '' } })`
326- : `${ mutationImplementation } ${ optionalQueryClientArgument ? ' , queryClient' : '' } `
334+ : `${ mutationImplementation } ${ optionalQueryClientArgument ? ` , queryClient` : '' } `
327335 } );`
328336}
329337 }
0 commit comments