Skip to content

Commit 0879e19

Browse files
committed
try without committing html
1 parent dbe0716 commit 0879e19

4 files changed

Lines changed: 52 additions & 9 deletions

File tree

docs/src/pages/reference/configuration/output.mdx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,7 +1303,7 @@ export const invalidateShowPetById = async (
13031303

13041304
Type: `Array<{ onMutations: string[], invalidates: (string | { query: string, params: string[] })[] }>`.
13051305

1306-
**Angular Query only.** Declaratively invalidate queries when mutations succeed. Requires `useInvalidate: true`.
1306+
**Angular Query and React Query only.** Declaratively invalidate queries when mutations succeed.
13071307

13081308
```js
13091309
import { defineConfig } from 'orval';
@@ -1314,7 +1314,6 @@ export default defineConfig({
13141314
client: 'angular-query',
13151315
override: {
13161316
query: {
1317-
useInvalidate: true,
13181317
mutationInvalidates: [
13191318
{
13201319
onMutations: ['createPets'],

packages/query/src/mutation-generator.ts

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {
2323
getQueryOptionsDefinition,
2424
} from './query-options';
2525
import { generateMutatorReturnType } from './return-types';
26-
import { isAngular, isSolid } from './utils';
26+
import { isAngular, isReact, isSolid } from './utils';
2727

2828
type 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

@@ -320,10 +328,10 @@ ${
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
}

packages/query/src/utils.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,9 @@ export const isSolid = (client: OutputClient | OutputClientFunc) =>
138138
export const isAngular = (client: OutputClient | OutputClientFunc) =>
139139
OutputClient.ANGULAR_QUERY === client;
140140

141+
export const isReact = (client: OutputClient | OutputClientFunc) =>
142+
OutputClient.REACT_QUERY === client;
143+
141144
export const getQueryTypeForFramework = (type: string): string => {
142145
// Angular Query and Svelte Query don't have suspense variants, map them to regular queries
143146
switch (type) {

tests/configs/react-query.config.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,39 @@ export default defineConfig({
1313
target: '../specifications/petstore.yaml',
1414
},
1515
},
16+
invalidates: {
17+
output: {
18+
target: '../generated/react-query/invalidates/endpoints.ts',
19+
schemas: '../generated/react-query/invalidates/model',
20+
client: 'react-query',
21+
mock: true,
22+
headers: true,
23+
override: {
24+
query: {
25+
mutationInvalidates: [
26+
{
27+
onMutations: ['createPets'],
28+
invalidates: ['listPets'],
29+
},
30+
{
31+
onMutations: ['deletePet', 'updatePet', 'patchPet'],
32+
invalidates: [
33+
'listPets',
34+
{ query: 'showPetById', params: ['petId'] },
35+
],
36+
},
37+
{
38+
onMutations: ['uploadFile'],
39+
invalidates: ['listPets'],
40+
},
41+
],
42+
},
43+
},
44+
},
45+
input: {
46+
target: '../specifications/petstore.yaml',
47+
},
48+
},
1649
zodSchemaResponse: {
1750
output: {
1851
target: '../generated/react-query/zod-schema-response/endpoints.ts',

0 commit comments

Comments
 (0)