'use client' import { useMutation } from '@tanstack/vue-query' import { type Config, type ConnectErrorType, type ResolvedRegister, } from '@wagmi/core' import type { Evaluate } from '@wagmi/core/internal' import { type ConnectData, type ConnectMutate, type ConnectMutateAsync, type ConnectVariables, connectMutationOptions, } from '@wagmi/core/query' import { watchEffect } from 'vue-demi' import type { ConfigParameter, MaybeRefDeep } from '../types.js' import type { UseMutationParameters, UseMutationReturnType, } from '../utils/query.js' import { useConfig } from './useConfig.js' import { type UseConnectorsReturnType, useConnectors } from './useConnectors.js' export type UseConnectParameters< config extends Config = Config, context = unknown, > = Evaluate< MaybeRefDeep> & { mutation?: | UseMutationParameters< ConnectData, ConnectErrorType, ConnectVariables, context > | undefined } > export type UseConnectReturnType< config extends Config = Config, context = unknown, > = Evaluate< UseMutationReturnType< ConnectData, ConnectErrorType, ConnectVariables, context > & { connect: ConnectMutate connectAsync: ConnectMutateAsync connectors: UseConnectorsReturnType } > export function useConnect< config extends Config = ResolvedRegister['config'], context = unknown, >( parameters: UseConnectParameters = {}, ): UseConnectReturnType { const { mutation } = parameters const config = useConfig(parameters) const connectors = useConnectors({ config }) const mutationOptions = connectMutationOptions(config) const { mutate, mutateAsync, ...result } = useMutation({ ...mutation, ...mutationOptions, }) watchEffect((onCleanup) => { const unsubscribe = config.subscribe( ({ status }) => status, (status, previousStatus) => { if (previousStatus === 'connected' && status === 'disconnected') result.reset() }, ) onCleanup(unsubscribe) }) return { ...result, connect: mutate, connectAsync: mutateAsync, connectors, } }