wagmi
Version:
React Hooks for Ethereum
93 lines (89 loc) • 3.29 kB
text/typescript
'use client'
import { useMutation } from '@tanstack/react-query'
import type {
Config,
ResolvedRegister,
SelectChains,
SignTransactionErrorType,
} from '@wagmi/core'
import type { Compute, ConfigParameter } from '@wagmi/core/internal'
import {
type SignTransactionData,
type SignTransactionMutate,
type SignTransactionMutateAsync,
type SignTransactionOptions,
type SignTransactionVariables,
signTransactionMutationOptions,
} from '@wagmi/core/query'
import type { SignTransactionRequest as viem_SignTransactionRequest } from 'viem'
import type { UseMutationReturnType } from '../utils/query.js'
import { useConfig } from './useConfig.js'
export type UseSignTransactionParameters<
config extends Config = Config,
request extends viem_SignTransactionRequest<
SelectChains<config, config['chains'][number]['id']>[0],
SelectChains<config, config['chains'][number]['id']>[0]
> = viem_SignTransactionRequest<
SelectChains<config, config['chains'][number]['id']>[0],
SelectChains<config, config['chains'][number]['id']>[0]
>,
context = unknown,
> = Compute<
ConfigParameter<config> &
SignTransactionOptions<
config,
config['chains'][number]['id'],
request,
context
>
>
export type UseSignTransactionReturnType<
config extends Config = Config,
request extends viem_SignTransactionRequest<
SelectChains<config, config['chains'][number]['id']>[0],
SelectChains<config, config['chains'][number]['id']>[0]
> = viem_SignTransactionRequest<
SelectChains<config, config['chains'][number]['id']>[0],
SelectChains<config, config['chains'][number]['id']>[0]
>,
context = unknown,
> = Compute<
UseMutationReturnType<
SignTransactionData<config, config['chains'][number]['id'], request>,
SignTransactionErrorType,
SignTransactionVariables<config, config['chains'][number]['id'], request>,
context,
SignTransactionMutate<config, context>,
SignTransactionMutateAsync<config, context>
> & {
/** @deprecated use `mutate` instead */
signTransaction: SignTransactionMutate<config, context>
/** @deprecated use `mutateAsync` instead */
signTransactionAsync: SignTransactionMutateAsync<config, context>
}
>
/** https://wagmi.sh/react/api/hooks/useSignTransaction */
export function useSignTransaction<
config extends Config = ResolvedRegister['config'],
request extends viem_SignTransactionRequest<
SelectChains<config, config['chains'][number]['id']>[0],
SelectChains<config, config['chains'][number]['id']>[0]
> = viem_SignTransactionRequest<
SelectChains<config, config['chains'][number]['id']>[0],
SelectChains<config, config['chains'][number]['id']>[0]
>,
context = unknown,
>(
parameters: UseSignTransactionParameters<config, request, context> = {},
): UseSignTransactionReturnType<config, request, context> {
const config = useConfig(parameters)
const options = signTransactionMutationOptions(config, parameters)
const mutation = useMutation(options)
type Return = UseSignTransactionReturnType<config, request, context>
return {
...(mutation as unknown as Return),
signTransaction: mutation.mutate as Return['mutate'],
signTransactionAsync:
mutation.mutateAsync as unknown as Return['mutateAsync'],
}
}