import Select from '@components/forms/Select' import AcornIcon from '@components/icons/AcornIcon' import MangoIcon from '@components/icons/MangoIcon' import RobotIcon from '@components/icons/RobotIcon' import WhaleIcon from '@components/icons/WhaleIcon' import Button from '@components/shared/Button' import SheenLoader from '@components/shared/SheenLoader' import { ClockIcon } from '@heroicons/react/20/solid' import { useWallet } from '@solana/wallet-adapter-react' import { PublicKey } from '@solana/web3.js' import useMangoAccount from 'hooks/useMangoAccount' import { useCurrentSeason, useAccountTier, useWalletPoints, useTopAccountsLeaderBoard, } from 'hooks/useRewards' import { RefObject, useState, useEffect, useMemo } from 'react' import { useTranslation } from 'react-i18next' import { abbreviateAddress } from 'utils/formatting' import { formatNumericValue } from 'utils/numbers' import { tiers } from './RewardsPage' import RewardsTierCard from './RewardsTierCard' import Faqs from './Faqs' import dayjs from 'dayjs' import relativeTime from 'dayjs/plugin/relativeTime' dayjs.extend(relativeTime) import MedalIcon from '@components/icons/MedalIcon' const Season = ({ faqRef, setShowLeaderboards, }: { faqRef: RefObject setShowLeaderboards: (x: string) => void }) => { const { t } = useTranslation(['common', 'rewards']) const { wallet } = useWallet() const [topAccountsTier, setTopAccountsTier] = useState('mango') const { mangoAccountAddress } = useMangoAccount() const { data: seasonData, isLoading: loadingSeasonData } = useCurrentSeason() const { data: accountTier } = useAccountTier( mangoAccountAddress, seasonData?.season_id, ) const { data: walletPoints, isFetching: fetchingWalletRewardsData, isLoading: loadingWalletRewardsData, refetch, } = useWalletPoints(mangoAccountAddress, seasonData?.season_id, wallet) const seasonEndsIn = useMemo(() => { if (!seasonData?.season_end) return return dayjs().to(seasonData.season_end) }, [seasonData]) const { data: topAccountsLeaderboardData, isFetching: fetchingTopAccountsLeaderboardData, isLoading: loadingTopAccountsLeaderboardData, } = useTopAccountsLeaderBoard(seasonData?.season_id) const leadersForTier = topAccountsLeaderboardData?.find((x) => x.tier === topAccountsTier) ?.leaderboard || [] const isLoadingWalletData = fetchingWalletRewardsData || loadingWalletRewardsData const isLoadingLeaderboardData = fetchingTopAccountsLeaderboardData || loadingTopAccountsLeaderboardData useEffect(() => { if (mangoAccountAddress) { refetch() } }, [mangoAccountAddress]) return ( <>
Season {seasonData?.season_id} ends {seasonEndsIn ? ( seasonEndsIn ) : loadingSeasonData ? (
) : ( '–' )}

Rewards Tiers

} name="seed" desc="All new participants start here" setShowLeaderboards={setShowLeaderboards} status={ accountTier?.mango_account === 'seed' ? 'Your Tier' : '' } /> } name="mango" desc="Average swap/trade value less than $1,000" setShowLeaderboards={setShowLeaderboards} status={ accountTier?.mango_account === 'mango' ? 'Your Tier' : '' } /> } name="whale" desc="Average swap/trade value greater than $1,000" setShowLeaderboards={setShowLeaderboards} status={ accountTier?.mango_account === 'whale' ? 'Your Tier' : '' } /> } name="bot" desc="All bots" setShowLeaderboards={setShowLeaderboards} status={accountTier?.mango_account === 'bot' ? 'Your Tier' : ''} />

Your Points

{!isLoadingWalletData ? ( walletPoints ? ( {formatNumericValue(walletPoints)} ) : wallet?.adapter.publicKey ? ( 0 ) : ( {t('connect-wallet')} ) ) : (
)}

Points Earned

{!isLoadingWalletData ? ( walletPoints ? ( formatNumericValue(walletPoints) ) : wallet?.adapter.publicKey ? ( 0 ) : ( '–' ) ) : (
)}

Streak Bonus

0x

Rewards Tier

{!isLoadingWalletData ? ( accountTier?.mango_account ? ( {accountTier?.mango_account} ) : ( '–' ) ) : (
)}

Rank

Top Accounts

{!isLoadingLeaderboardData ? ( leadersForTier && leadersForTier.length ? ( leadersForTier.slice(0, 5).map((user, i: number) => { const rank = i + 1 return (

{rank}

{rank < 4 ? ( ) : null}
{abbreviateAddress( new PublicKey(user.mango_account), )}
{formatNumericValue(user.total_points, 0)}
) }) ) : (
Leaderboard not available
) ) : (
{[...Array(5)].map((x, i) => (
))}
)}
) } export default Season