UNPKG

@7nohe/openapi-react-query-codegen

Version:
37 lines (36 loc) 2.06 kB
import { StructureKind, VariableDeclarationKind, } from "ts-morph"; import { SDK_CALL_ARGS } from "./buildQueryHooks.mjs"; import { getDataTypeName, getErrorType } from "./operationNames.mjs"; /** * Build useMutation hook. * Example: * export const useAddPet = <TData = Common.AddPetMutationResult, TError = AddPetError, TQueryKey extends Array<unknown> = unknown[], TContext = unknown>( * mutationKey?: TQueryKey, * options?: Omit<UseMutationOptions<TData, TError, Options<AddPetData, true>, TContext>, "mutationKey" | "mutationFn"> * ) => useMutation<TData, TError, Options<AddPetData, true>, TContext>({ * mutationKey: Common.UseAddPetKeyFn(mutationKey), * mutationFn: clientOptions => addPet(clientOptions) as unknown as Promise<TData>, * ...options * }); */ export function buildUseMutationHook(op, ctx) { const hookName = `use${op.capitalizedMethodName}`; const errorType = getErrorType(op, ctx); const dataTypeDefault = `Common.${op.capitalizedMethodName}MutationResult`; const optionsType = `Options<${getDataTypeName(op)}, true>`; const mutationFn = `clientOptions => ${op.methodName}(${SDK_CALL_ARGS}) as unknown as Promise<TData>`; const body = `useMutation<TData, TError, ${optionsType}, TContext>({ mutationKey: Common.Use${op.capitalizedMethodName}KeyFn(mutationKey), mutationFn: ${mutationFn}, ...options })`; return { kind: StructureKind.VariableStatement, // Copy the operation's JSDoc (description and @deprecated) from the SDK function leadingTrivia: op.jsDoc ? `${op.jsDoc}\n` : undefined, isExported: true, declarationKind: VariableDeclarationKind.Const, declarations: [ { name: hookName, initializer: `<TData = ${dataTypeDefault}, TError = ${errorType}, TQueryKey extends Array<unknown> = unknown[], TContext = unknown>(mutationKey?: TQueryKey, options?: Omit<UseMutationOptions<TData, TError, ${optionsType}, TContext>, "mutationKey" | "mutationFn">) => ${body}`, }, ], }; }