import { ref, reactive, computed } from 'vue'; import { getAccount, getBalance, watchAccount, watchChainId, type Config } from '@wagmi/core'; import { type WatchAccountReturnType, type GetAccountReturnType, type GetBalanceReturnType } from '@wagmi/core'; import { config } from '@/wagmi'; import { getAllowance, HarbContract, getNonce } from '@/contracts/harb'; import logger from '@/utils/logger'; import { setHarbContract } from '@/contracts/harb'; import { setStakeContract } from '@/contracts/stake'; import { chainsData, DEFAULT_CHAIN_ID } from '@/config'; const balance = ref({ value: 0n, decimals: 0, symbol: '', formatted: '', }); const account = ref(getAccount(config as Config)); if (!account.value.chainId) { account.value.chainId = DEFAULT_CHAIN_ID; } const selectedChainId = computed(() => account.value.chainId ?? DEFAULT_CHAIN_ID); export const chainData = computed(() => { return chainsData.find(obj => obj.id === selectedChainId.value); }); let unwatch: WatchAccountReturnType | null = null; let unwatchChain: WatchAccountReturnType | null = null; export function useWallet() { async function loadBalance() { logger.contract('loadBalance'); if (account.value.address) { // console.log("HarbContract",HarbContract ); balance.value = await getBalance(config as Config, { address: account.value.address, token: HarbContract.contractAddress, }); // console.log("balance.value", balance.value); return balance.value; } else { return 0n; } } if (!unwatch) { // console.log("useWallet function"); unwatch = watchAccount(config as Config, { async onChange(data) { // console.log("watchaccount-useWallet", data); if (!data.address) { logger.info(`disconnected`); balance.value = { value: 0n, decimals: 0, symbol: '', formatted: '', }; } else if (account.value.address !== data.address || account.value.chainId !== data.chainId) { logger.info(`Account changed!:`, data.address); account.value = data; await loadBalance(); await getAllowance(); // await loadPositions(); await getNonce(); setHarbContract(); setStakeContract(); } }, }); } //funzt nicht mehr-> library Änderung? if (!unwatchChain) { // console.log("unwatchChain"); unwatchChain = watchChainId(config as Config, { async onChange(_chainId) { await loadBalance(); await getAllowance(); await getNonce(); }, }); } return reactive({ balance, account, loadBalance }); }