import { useCallback, useEffect, useMemo, useState } from 'react' import AssetBalanceRow from 'components/Asset/AssetBalanceRow' import Button from 'components/Button' import DisplayCurrency from 'components/DisplayCurrency' import Divider from 'components/Divider' import { Logo } from 'components/Icons' import Overlay from 'components/Overlay' import Text from 'components/Text' import { ASSETS } from 'constants/assets' import { ORACLE_DENOM } from 'constants/oracle' import useAccountId from 'hooks/useAccountId' import usePrices from 'hooks/usePrices' import useToggle from 'hooks/useToggle' import useUnclaimedRewards from 'hooks/useUnclaimedRewards' import useStore from 'store' import { BNCoin } from 'types/classes/BNCoin' import { byDenom } from 'utils/array' import { defaultFee } from 'utils/constants' import { formatAmountWithSymbol, getCoinValue } from 'utils/formatters' const renderIncentives = (unclaimedRewards: BNCoin[]) => { if (unclaimedRewards.length === 0) return ( You have no claimable rewards. ) return unclaimedRewards.map((reward, index) => { const asset = ASSETS.find(byDenom(reward.denom)) if (!asset) return null return (
{index !== 0 && }
) }) } export default function RewardsCenter() { const accountId = useAccountId() const [isConfirming, setIsConfirming] = useState(false) const [estimatedFee, setEstimatedFee] = useState(defaultFee) const [showRewardsCenter, setShowRewardsCenter] = useToggle() const claimRewards = useStore((s) => s.claimRewards) const { data: prices } = usePrices() const { data: unclaimedRewards } = useUnclaimedRewards() const totalRewardsCoin = useMemo(() => { let total = 0 unclaimedRewards.forEach((reward) => { total = total + getCoinValue(reward, prices).toNumber() }) return new BNCoin({ denom: ORACLE_DENOM, amount: total.toString(), }) }, [prices, unclaimedRewards]) const hasIncentives = unclaimedRewards.length > 0 const claimTx = useMemo(() => { return claimRewards({ accountId: accountId || '', }) }, [accountId, claimRewards]) useEffect(() => { claimTx.estimateFee().then(setEstimatedFee) }, [claimTx]) const handleClaim = useCallback(async () => { if (accountId) { setIsConfirming(true) await claimTx.execute() setIsConfirming(false) } }, [accountId, claimTx]) return (
Rewards Center
{renderIncentives(unclaimedRewards)}
{hasIncentives && ( <>
) }