From ffc9e6dfad23b670f44009e5f819466b6f07e45d Mon Sep 17 00:00:00 2001 From: sacha-c Date: Tue, 4 Nov 2025 19:45:46 +0100 Subject: [PATCH] fix(openapi-react-query): mutation results type --- packages/openapi-react-query/src/index.ts | 9 ++++--- .../openapi-react-query/test/index.test.tsx | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/packages/openapi-react-query/src/index.ts b/packages/openapi-react-query/src/index.ts index 337919ac3..23c996c53 100644 --- a/packages/openapi-react-query/src/index.ts +++ b/packages/openapi-react-query/src/index.ts @@ -156,13 +156,16 @@ export type UseMutationMethod, Init extends MaybeOptionalInit, Response extends Required>, // note: Required is used to avoid repeating NonNullable in UseQuery types - Options extends Omit, "mutationKey" | "mutationFn">, + TOnMutateResult = unknown, >( method: Method, url: Path, - options?: Options, + options?: Omit< + UseMutationOptions, + "mutationKey" | "mutationFn" + >, queryClient?: QueryClient, -) => UseMutationResult; +) => UseMutationResult; export interface OpenapiQueryClient { queryOptions: QueryOptionsFunction; diff --git a/packages/openapi-react-query/test/index.test.tsx b/packages/openapi-react-query/test/index.test.tsx index 4dcca2eee..b9978935c 100644 --- a/packages/openapi-react-query/test/index.test.tsx +++ b/packages/openapi-react-query/test/index.test.tsx @@ -792,6 +792,30 @@ describe("client", () => { await waitFor(() => rendered.findByText("data: Hello, status: success")); }); + + it("should type mutate results properly", async () => { + const fetchClient = createFetchClient({ baseUrl }); + const client = createClient(fetchClient); + + const onMutateReturnValue = { someArray: [1, 2, 3], someString: "abc" }; + type expectedOnMutateResultType = typeof onMutateReturnValue | undefined; + + const result = renderHook( + () => + client.useMutation("put", "/comment", { + onMutate: () => onMutateReturnValue, + onError: (err, _, onMutateResult, context) => { + assertType(onMutateResult); + }, + onSettled: (_data, _error, _variables, onMutateResult, context) => { + assertType(onMutateResult); + }, + }), + { wrapper }, + ); + + assertType(result.result.current.context); + }); }); describe("mutateAsync", () => {