@sky-mavis/tanto-widget
Version:
Tanto Widget
85 lines (81 loc) • 2.26 kB
JavaScript
;
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;