diff --git a/src/components/Avatar.tsx b/src/components/Avatar.tsx index b19f43b..d72fc85 100644 --- a/src/components/Avatar.tsx +++ b/src/components/Avatar.tsx @@ -13,7 +13,7 @@ const Avatar = (props: AvatarProps) => { const handleError = () => { setHasError(true); }; - console.log('Avatar', src); + return (
{src === undefined || hasError ? ( diff --git a/src/components/DaoList.tsx b/src/components/DaoList.tsx index 94a31b0..b0f2167 100644 --- a/src/components/DaoList.tsx +++ b/src/components/DaoList.tsx @@ -1,7 +1,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import ProjectCard from './ProjectCard'; import LoadingSpinner from './LoadingSpinner'; -import { BalanceType, ChainPropertiesType, CoreEraStakeInfoType, CoreIndexedRewardsType, LockedType, StakingCore, TotalRewardsCoreClaimedQuery, TotalUserStakedData, UserStakedInfoType, getTotalUserStaked } from '../routes/staking'; +import { ChainPropertiesType, CoreEraStakeInfoType, CoreIndexedRewardsType, StakingCore, TotalRewardsCoreClaimedQuery, TotalUserStakedData, UserStakedInfoType, getTotalUserStaked } from '../routes/staking'; import { AnyJson, Codec } from '@polkadot/types/types'; import { StakedDaoType } from '../routes/overview'; import BigNumber from 'bignumber.js'; @@ -17,6 +17,7 @@ import Input from './Input'; import FilterIcon from '../assets/filter-icon.svg'; import { CHOOSE_ONE, FilterStates, OrderByOption } from '../modals/DaoListFilters'; import { clearFiltersFromLocalStorage } from '../utils/filterStorage'; +import { useBalance } from '../providers/balance'; interface DaoListProps { mini: boolean; isOverview: boolean; } @@ -27,12 +28,12 @@ const DaoList = (props: DaoListProps) => { const descriptionRef = useRef(null); const projectCardRef = useRef(null); const setOpenModal = useModal((state) => state.setOpenModal); + const { availableBalance } = useBalance(); const selectedAccount = useAccount((state) => state.selectedAccount); const [isLoading, setLoading] = useState(true); const [isDataLoaded, setDataLoaded] = useState(false); const [stakedDaos, setStakedDaos] = useState([]); const [stakingCores, setStakingCores] = useState([]); - const [availableBalance, setAvailableBalance] = useState(); const [chainProperties, setChainProperties] = useState(); const [coreEraStakeInfo, setCoreEraStakeInfo] = useState([]); const [coreIndexedRewards, setCoreIndexedRewards] = useState([]); @@ -269,16 +270,6 @@ const DaoList = (props: DaoListProps) => { }); }, [stakingCores, coreEraStakeInfo, userStakedInfo]); - const loadAccountInfo = useCallback(async () => { - if (!selectedAccount) return; - const account = await api.query.system.account(selectedAccount.address); - const balance = account.toPrimitive() as BalanceType; - const locked = (await api.query.ocifStaking.ledger(selectedAccount.address)).toPrimitive() as LockedType; - const currentBalance = new BigNumber(balance.data.free).minus(new BigNumber(locked.locked)); - - setAvailableBalance(currentBalance); - }, [api, selectedAccount]); - const loadStakingConstants = useCallback(async () => { const maxStakersPerCore = api.consts.ocifStaking.maxStakersPerCore.toPrimitive() as number; const inflationErasPerYear = api.consts.checkedInflation.erasPerYear.toPrimitive() as number; @@ -325,7 +316,6 @@ const DaoList = (props: DaoListProps) => { try { if (selectedAccount) { clearFiltersFromLocalStorage(); - await loadAccountInfo(); await loadCores(); await loadStakingConstants(); await loadCoreEraStake(); @@ -338,7 +328,7 @@ const DaoList = (props: DaoListProps) => { setLoading(false); setDataLoaded(true); } - }, [loadAccountInfo, loadCores, loadStakingConstants, loadCoreEraStake, loadStakeRewardMinimum]); + }, [loadCores, loadStakingConstants, loadCoreEraStake, loadStakeRewardMinimum]); const setupSubscriptions = useCallback(async () => { if (!selectedAccount) { diff --git a/src/components/LoginButton.tsx b/src/components/LoginButton.tsx index 09d9f32..bd038fa 100644 --- a/src/components/LoginButton.tsx +++ b/src/components/LoginButton.tsx @@ -2,21 +2,19 @@ import Button from "./Button"; import DisconnectIcon from "../assets/disconnect-icon.svg"; import TinkerYellowIcon from "../assets/tinker-yellow-icon.svg"; import TinkerBlackIcon from "../assets/tinker-black-icon.svg"; -import { useCallback, useEffect, useState } from "react"; -import BigNumber from "bignumber.js"; +import { useEffect, useState } from "react"; import { shallow } from "zustand/shallow"; -import useApi from "../hooks/useApi"; import useConnect from "../hooks/useConnect"; import useAccount from "../stores/account"; import useModal from "../stores/modals"; import { formatBalanceToTwoDecimals } from "../utils/formatNumber"; +import { useBalance } from "../providers/balance"; const LoginButton = () => { - const [balance, setBalance] = useState(); + const { availableBalance } = useBalance(); const [isHovered, setIsHovered] = useState(false); const [showFirstSpan, setShowFirstSpan] = useState(true); const { handleConnect } = useConnect(); - const api = useApi(); const closeCurrentModal = useModal((state) => state.closeCurrentModal); const { selectedAccount, setSelectedAccount } = useAccount( (state) => ({ @@ -31,21 +29,6 @@ const LoginButton = () => { closeCurrentModal(); }; - const loadBalance = useCallback(async () => { - if (!selectedAccount) return; - - await api.query.system.account(selectedAccount.address, ({ data }) => { - const balance = data.toPrimitive() as { - free: string; - reserved: string; - miscFrozen: string; - feeFrozen: string; - }; - - setBalance(new BigNumber(balance.free)); - }); - }, [selectedAccount, api]); - useEffect(() => { const handleResize = () => { setIsHovered(false); @@ -63,10 +46,6 @@ const LoginButton = () => { }; }, []); - useEffect(() => { - loadBalance(); - }, [loadBalance]); - useEffect(() => { const intervalId = setInterval(() => { setShowFirstSpan(prev => !prev); @@ -75,7 +54,7 @@ const LoginButton = () => { return () => clearInterval(intervalId); }, []); - const formattedBalance = balance ? formatBalanceToTwoDecimals(balance) : 0; + const formattedBalance = availableBalance ? formatBalanceToTwoDecimals(availableBalance) : 0; return