@sky-mavis/tanto-widget
Version:
Tanto Widget
72 lines • 2.1 kB
JavaScript
import {useMemo,useCallback,useEffect}from'react';import {useDisconnect}from'wagmi';import {analytic}from'../analytic.mjs';import {useAuth}from'../contexts/auth/useAuth.mjs';import {ConnectState}from'../types/connect.mjs';import {useConnect}from'./useConnect.mjs';import {useUnmount}from'./useUnmount.mjs';function useConnectAndAuth({
connector
}) {
const {
signIn,
isSigningIn,
enable: enableAuth,
error: authError,
reset: resetAuth
} = useAuth();
const {
disconnect
} = useDisconnect();
const {
status: connectStatus,
connect: baseConnect,
error: connectError
} = useConnect({
connector,
onError: error => {
console.debug('Connect error:', error);
},
onSuccess: () => {
if (enableAuth) signIn();
}
});
const error = useMemo(() => connectError || authError, [connectError, authError]);
const status = useMemo(() => {
if (authError) return ConnectState.FAILED;
if (isSigningIn) return ConnectState.AUTHENTICATING;
return connectStatus;
}, [connectStatus, isSigningIn, authError]);
const connect = useCallback(() => {
if (!connector) return;
resetAuth();
analytic.sendEvent('wallet_connect_attempt', {
chain_id: connector.chainId,
wallet_type: connector.name
});
baseConnect();
}, [connector, resetAuth, baseConnect]);
useEffect(() => {
resetAuth();
}, [resetAuth]);
useEffect(() => {
if (status === ConnectState.FAILED && error && connector) {
analytic.sendEvent('wallet_connect_fail', {
chain_id: connector.chainId,
wallet_type: connector.name,
error_reason: error.message
});
}
if (status === ConnectState.AUTHENTICATING && connector) {
analytic.sendEvent('wallet_authenticating', {
chain_id: connector.chainId,
wallet_type: connector.name
});
}
}, [status, error, connector]);
useUnmount(() => {
resetAuth();
if (isSigningIn) {
disconnect();
}
});
return {
status,
connector,
connect,
error
};
}export{useConnectAndAuth};