diff --git a/apps/web/src/views/TradingReward/components/Leaderboard/RankingCard.tsx b/apps/web/src/views/TradingReward/components/Leaderboard/RankingCard.tsx index 8d3f22afcff6d..ab518096d60e7 100644 --- a/apps/web/src/views/TradingReward/components/Leaderboard/RankingCard.tsx +++ b/apps/web/src/views/TradingReward/components/Leaderboard/RankingCard.tsx @@ -9,6 +9,7 @@ import { LaurelRightIcon, Text, SubMenu, + Skeleton, } from '@pancakeswap/uikit' import styled from 'styled-components' import { useTranslation } from '@pancakeswap/localization' @@ -51,11 +52,11 @@ const RankingCard: React.FC> = ({ rank const { t } = useTranslation() const rankColor = getRankingColor(rank) const cakePriceBusd = usePriceCakeUSD() - const { profile, isLoading: isProfileLoading } = useProfileForAddress(user.origin) - const { domainName, avatar } = useDomainNameForAddress(user.origin, !profile && !isProfileLoading) + const { profile, isLoading: isProfileLoading } = useProfileForAddress(user?.origin) + const { domainName, avatar } = useDomainNameForAddress(user?.origin, !profile && !isProfileLoading) const cakeAmount = useMemo( - () => new BigNumber(user?.estimateRewardUSD).div(cakePriceBusd).toNumber(), + () => new BigNumber(user?.estimateRewardUSD).div(cakePriceBusd).toNumber() ?? 0, [cakePriceBusd, user?.estimateRewardUSD], ) @@ -87,9 +88,13 @@ const RankingCard: React.FC> = ({ rank - - {profile?.username || domainName || truncateHash(user.origin)} - + {!user ? ( + + ) : ( + + {profile?.username || domainName || truncateHash(user?.origin)} + + )} } options={{ placement: 'bottom' }} @@ -100,21 +105,34 @@ const RankingCard: React.FC> = ({ rank {t('Total Reward')} - - {`$${formatNumber(user.estimateRewardUSD)}`} - - - {`~${formatNumber(cakeAmount)} CAKE`} - + {!user ? ( + <> + + + + ) : ( + <> + + {`$${formatNumber(user?.estimateRewardUSD)}`} + + + {`~${formatNumber(cakeAmount)} CAKE`} + + + )} {t('Trading Volume')} - - {`$${formatNumber(user.volume)}`} - + {!user ? ( + + ) : ( + + {`$${formatNumber(user?.volume)}`} + + )} diff --git a/apps/web/src/views/TradingReward/components/Leaderboard/index.tsx b/apps/web/src/views/TradingReward/components/Leaderboard/index.tsx index f27da2c76fec8..8793743f3b94a 100644 --- a/apps/web/src/views/TradingReward/components/Leaderboard/index.tsx +++ b/apps/web/src/views/TradingReward/components/Leaderboard/index.tsx @@ -144,18 +144,20 @@ const Leaderboard: React.FC> = ({ camp )} {campaignLeaderBoardList.campaignStart > 0 && ( - <> - - - {first && } - {second && } - {third && } - - - + + + {(topTradersArr?.length > 0 || isLoading) && ( + <> + + + + + )} + + )} diff --git a/apps/web/src/views/TradingReward/hooks/useRankList.tsx b/apps/web/src/views/TradingReward/hooks/useRankList.tsx index c15ee78204f19..2ac0f8b1bd80d 100644 --- a/apps/web/src/views/TradingReward/hooks/useRankList.tsx +++ b/apps/web/src/views/TradingReward/hooks/useRankList.tsx @@ -36,6 +36,7 @@ const TOP_RANK_NUMBER = 3 export const useRankList = ({ campaignId, currentPage }: UseRankListProps): RankList => { const [isLoading, setIsLoading] = useState(false) + const [lastCampaignId, setLastCampaignId] = useState('') const [topThreeTraders, setTopThreeTraders] = useState([]) const { data } = useSWR( @@ -43,7 +44,11 @@ export const useRankList = ({ campaignId, currentPage }: UseRankListProps): Rank async () => { try { setIsLoading(true) - setTopThreeTraders([]) + setLastCampaignId(campaignId) + if (campaignId !== lastCampaignId) { + setTopThreeTraders([]) + } + const response = await fetch( `${TRADING_REWARD_API}/rank_list/campaignId/${campaignId}/type/${RewardType.TOP_TRADERS}/page/${currentPage}/size/${MAX_PER_PAGE}`, )