UNPKG

@wagmi/vue

Version:

Vue Composables for Ethereum

146 lines (138 loc) 4.31 kB
import type { Config, ResolvedRegister, SimulateContractErrorType, } from '@wagmi/core' import { type SimulateContractData, type SimulateContractOptions, type SimulateContractQueryFnData, type SimulateContractQueryKey, simulateContractQueryOptions, } from '@wagmi/core/query' import type { Abi, ContractFunctionArgs, ContractFunctionName } from 'viem' import { computed, type MaybeRef } from 'vue' import type { ConfigParameter, QueryParameter } from '../types/properties.js' import type { DeepMaybeRef } from '../types/ref.js' import { deepUnref } from '../utils/cloneDeep.js' import { type UseQueryReturnType, useQuery } from '../utils/query.js' import { useChainId } from './useChainId.js' import { useConfig } from './useConfig.js' import { useConnectorClient } from './useConnectorClient.js' export type UseSimulateContractParameters< abi extends Abi | readonly unknown[] = Abi, functionName extends ContractFunctionName< abi, 'nonpayable' | 'payable' > = ContractFunctionName<abi, 'nonpayable' | 'payable'>, args extends ContractFunctionArgs< abi, 'nonpayable' | 'payable', functionName > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>, config extends Config = Config, chainId extends config['chains'][number]['id'] | undefined = undefined, selectData = SimulateContractData<abi, functionName, args, config, chainId>, > = MaybeRef< DeepMaybeRef< SimulateContractOptions<abi, functionName, args, config, chainId> > & ConfigParameter<config> & QueryParameter< SimulateContractQueryFnData<abi, functionName, args, config, chainId>, SimulateContractErrorType, selectData, SimulateContractQueryKey<abi, functionName, args, config, chainId> > > export type UseSimulateContractReturnType< abi extends Abi | readonly unknown[] = Abi, functionName extends ContractFunctionName< abi, 'nonpayable' | 'payable' > = ContractFunctionName<abi, 'nonpayable' | 'payable'>, args extends ContractFunctionArgs< abi, 'nonpayable' | 'payable', functionName > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>, config extends Config = Config, chainId extends config['chains'][number]['id'] | undefined = undefined, selectData = SimulateContractData<abi, functionName, args, config, chainId>, > = UseQueryReturnType<selectData, SimulateContractErrorType> /** https://wagmi.sh/vue/api/composables/useSimulateContract */ export function useSimulateContract< const abi extends Abi | readonly unknown[], functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>, args extends ContractFunctionArgs< abi, 'nonpayable' | 'payable', functionName >, config extends Config = ResolvedRegister['config'], chainId extends config['chains'][number]['id'] | undefined = undefined, selectData = SimulateContractData<abi, functionName, args, config, chainId>, >( parameters_: UseSimulateContractParameters< abi, functionName, args, config, chainId, selectData > = {} as any, ): UseSimulateContractReturnType< abi, functionName, args, config, chainId, selectData > { const parameters = computed(() => deepUnref(parameters_)) as any const config = useConfig(parameters) const { data: connectorClient } = useConnectorClient( computed(() => ({ connector: parameters.value.connector, query: { enabled: parameters.value.account === undefined }, })), ) const configChainId = useChainId({ config }) const queryOptions = computed(() => { const { abi, account = connectorClient?.value?.account, address, chainId = configChainId.value, functionName, query = {}, } = parameters.value const options = simulateContractQueryOptions< config, abi, functionName, args, chainId >(config as any, { ...parameters.value, account, chainId, }) const enabled = Boolean( abi && address && functionName && (query.enabled ?? true), ) return { ...query, ...options, enabled, } }) return useQuery(queryOptions as any) as UseSimulateContractReturnType< abi, functionName, args, config, chainId, selectData > }