leumas-private-shared
Version:
Private React JSX Package For Leumas Shared Components, Headers, Footers, Asides, Login Pages, API Key Manager and much more. Styles and everything reusable to avoid DRY code across all of our subdomains
29 lines (21 loc) • 991 B
JSX
import { useEffect } from 'react';
const useMetaMaskEffect = (account, tokenContract, setUserBalance, onDataChange = () => {}, web3) => {
useEffect(() => {
if(account && tokenContract) {
const fetchBalance = async () => {
const balance = await tokenContract.methods.balanceOf(account).call();
setUserBalance(balance);
};
fetchBalance();
const handleAccountsChanged = async (accounts) => {
const balance = await tokenContract.methods.balanceOf(accounts[0]).call();
setUserBalance(balance);
onDataChange({ account, balance: web3.utils.fromWei(balance, 'ether') });
};
window.ethereum.on('accountsChanged', handleAccountsChanged);
// Cleanup to remove listener
return () => window.ethereum.removeListener('accountsChanged', handleAccountsChanged);
}
}, [account, tokenContract, web3, setUserBalance, onDataChange]);
};
export default useMetaMaskEffect;