'use client' // Almost identical implementation to `useConnectorClient` (except for return type) // Should update both in tandem import { useQueryClient } from '@tanstack/vue-query' import type { Config, GetWalletClientErrorType, ResolvedRegister, } from '@wagmi/core' import { type Evaluate, type Omit } from '@wagmi/core/internal' import { type GetWalletClientData, type GetWalletClientOptions, type GetWalletClientQueryFnData, type GetWalletClientQueryKey, getWalletClientQueryOptions, } from '@wagmi/core/query' import { computed, unref, watch } from 'vue-demi' import type { ConfigParameter, DeepUnwrapRef, MaybeRefDeep } from '../types.js' import { cloneDeepUnref } from '../utils/cloneDeepUnref.js' import { type UseQueryParameters, type UseQueryReturnType, useQuery, } from '../utils/query.js' import { useAccount } from './useAccount.js' import { useChainId } from './useChainId.js' import { useConfig } from './useConfig.js' export type UseWalletClientParameters< config extends Config = Config, chainId extends config['chains'][number]['id'] = config['chains'][number]['id'], selectData = GetWalletClientData, > = MaybeRefDeep< Evaluate< GetWalletClientOptions & ConfigParameter & { query?: | Evaluate< Omit< DeepUnwrapRef< UseQueryParameters< GetWalletClientQueryFnData, GetWalletClientErrorType, selectData, GetWalletClientQueryKey > >, 'gcTime' | 'staleTime' > > | undefined } > > export type UseWalletClientReturnType< config extends Config = Config, chainId extends config['chains'][number]['id'] = config['chains'][number]['id'], selectData = GetWalletClientData, > = UseQueryReturnType /** https://wagmi.sh/react/api/hooks/useWalletClient */ export function useWalletClient< config extends Config = ResolvedRegister['config'], chainId extends config['chains'][number]['id'] = config['chains'][number]['id'], selectData = GetWalletClientData, >( parameters: UseWalletClientParameters = {}, ): UseWalletClientReturnType { const config = useConfig(parameters) const queryClient = useQueryClient() const { address, connector, status } = useAccount() const chainId = useChainId() const queryOptions = computed(() => { const _parameters = cloneDeepUnref< DeepUnwrapRef> >(parameters as any) const { query = {} } = _parameters const { queryKey, ...options } = getWalletClientQueryOptions< config, chainId >(config, { ..._parameters, chainId: _parameters.chainId ?? chainId.value, connector: _parameters.connector ?? connector.value, } as GetWalletClientOptions) const enabled = Boolean( status.value !== 'disconnected' && (query.enabled ?? true), ) return { ...query, ...options, queryKey, enabled, staleTime: Infinity, } }) watch([address, queryClient], () => { // invalidate when address changes if (unref(address)) queryClient.invalidateQueries({ queryKey: queryOptions.value.queryKey }) else queryClient.removeQueries({ queryKey: queryOptions.value.queryKey }) // remove when account is disconnected }) return useQuery(queryOptions as any) as UseWalletClientReturnType< config, chainId, selectData > }