From bec703f126e564290f200fce475660fa116e2d3f 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 --- .changeset/lazy-bobcats-hear.md | 5 ++++ packages/openapi-react-query/src/index.ts | 9 ++++--- .../openapi-react-query/test/index.test.tsx | 24 +++++++++++++++++++ 3 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 .changeset/lazy-bobcats-hear.md diff --git a/.changeset/lazy-bobcats-hear.md b/.changeset/lazy-bobcats-hear.md new file mode 100644 index 000000000..5c854a36d --- /dev/null +++ b/.changeset/lazy-bobcats-hear.md @@ -0,0 +1,5 @@ +--- +"openapi-react-query": patch +--- + +fixes mutation results type 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", () => {