UNPKG

@sky-mavis/tanto-widget

Version:
85 lines (81 loc) 2.26 kB
'use strict'; var react = require('react'); var wagmi = require('wagmi'); var analytic = require('../analytic.cjs'); var useAuth = require('../contexts/auth/useAuth.cjs'); var connect = require('../types/connect.cjs'); var useConnect = require('./useConnect.cjs'); var useUnmount = require('./useUnmount.cjs'); function useConnectAndAuth({ connector }) { const { signIn, isSigningIn, enable: enableAuth, error: authError, reset: resetAuth } = useAuth.useAuth(); const { disconnect } = wagmi.useDisconnect(); const { status: connectStatus, connect: baseConnect, error: connectError } = useConnect.useConnect({ connector, onError: error => { console.debug('Connect error:', error); }, onSuccess: () => { if (enableAuth) signIn(); } }); const error = react.useMemo(() => connectError || authError, [connectError, authError]); const status = react.useMemo(() => { if (authError) return connect.ConnectState.FAILED; if (isSigningIn) return connect.ConnectState.AUTHENTICATING; return connectStatus; }, [connectStatus, isSigningIn, authError]); const connect$1 = react.useCallback(() => { if (!connector) return; resetAuth(); analytic.analytic.sendEvent('wallet_connect_attempt', { chain_id: connector.chainId, wallet_type: connector.name }); baseConnect(); }, [connector, resetAuth, baseConnect]); react.useEffect(() => { resetAuth(); }, [resetAuth]); react.useEffect(() => { if (status === connect.ConnectState.FAILED && error && connector) { analytic.analytic.sendEvent('wallet_connect_fail', { chain_id: connector.chainId, wallet_type: connector.name, error_reason: error.message }); } if (status === connect.ConnectState.AUTHENTICATING && connector) { analytic.analytic.sendEvent('wallet_authenticating', { chain_id: connector.chainId, wallet_type: connector.name }); } }, [status, error, connector]); useUnmount.useUnmount(() => { resetAuth(); if (isSigningIn) { disconnect(); } }); return { status, connector, connect: connect$1, error }; } exports.useConnectAndAuth = useConnectAndAuth;