'use client' import { useQueryClient } from '@tanstack/react-query' import type { Config, GetConnectorClientErrorType, ResolvedRegister, } from '@wagmi/core' import type { Compute, ConfigParameter } from '@wagmi/core/internal' import { type GetConnectorClientData, type GetConnectorClientOptions, getConnectorClientQueryOptions, } from '@wagmi/core/query' import { useEffect, useRef } from 'react' import { type UseQueryReturnType, useQuery } from '../utils/query.js' import { useChainId } from './useChainId.js' import { useConfig } from './useConfig.js' import { useConnection } from './useConnection.js' export type UseConnectorClientParameters< config extends Config = Config, chainId extends config['chains'][number]['id'] = config['chains'][number]['id'], selectData = GetConnectorClientData, > = Compute< GetConnectorClientOptions & ConfigParameter > export type UseConnectorClientReturnType< config extends Config = Config, chainId extends config['chains'][number]['id'] = config['chains'][number]['id'], selectData = GetConnectorClientData, > = UseQueryReturnType /** https://wagmi.sh/react/api/hooks/useConnectorClient */ export function useConnectorClient< config extends Config = ResolvedRegister['config'], chainId extends config['chains'][number]['id'] = config['chains'][number]['id'], selectData = GetConnectorClientData, >( parameters: UseConnectorClientParameters = {}, ): UseConnectorClientReturnType { const config = useConfig(parameters) const chainId = useChainId({ config }) const { address, connector } = useConnection({ config }) const options = getConnectorClientQueryOptions(config, { ...parameters, chainId: parameters.chainId ?? chainId, connector: parameters.connector ?? connector, query: parameters.query as any, }) const addressRef = useRef(address) const queryClient = useQueryClient() // biome-ignore lint/correctness/useExhaustiveDependencies: `queryKey` not required useEffect(() => { const previousAddress = addressRef.current if (!address && previousAddress) { // remove when account is disconnected queryClient.removeQueries({ queryKey: options.queryKey }) addressRef.current = undefined } else if (address !== previousAddress) { // invalidate when address changes queryClient.invalidateQueries({ queryKey: options.queryKey }) addressRef.current = address } }, [address, queryClient]) return useQuery(options) as any }