fix flicker when loading claim or season (#353)

This commit is contained in:
saml33 2024-01-02 06:38:33 +11:00 committed by GitHub
parent fbb3862906
commit f876e48aac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 12 deletions

View File

@ -5,6 +5,7 @@ import { useWallet } from '@solana/wallet-adapter-react'
import { useCurrentSeason, useIsAllClaimed } from 'hooks/useRewards' import { useCurrentSeason, useIsAllClaimed } from 'hooks/useRewards'
import Season from './Season' import Season from './Season'
import ClaimPage from './Claim' import ClaimPage from './Claim'
import Loading from '@components/shared/Loading'
export const tiers = ['seed', 'mango', 'whale', 'bot'] export const tiers = ['seed', 'mango', 'whale', 'bot']
@ -15,10 +16,17 @@ const RewardsPage = () => {
const { data: seasonData } = useCurrentSeason() const { data: seasonData } = useCurrentSeason()
const currentSeason = seasonData ? seasonData.season_id : undefined const currentSeason = seasonData ? seasonData.season_id : undefined
const prevSeason = currentSeason ? currentSeason - 1 : undefined const prevSeason = currentSeason ? currentSeason - 1 : undefined
const { showClaim } = useIsAllClaimed(prevSeason, publicKey) const { showClaim, loading: loadingShowClaim } = useIsAllClaimed(
prevSeason,
publicKey,
)
return !showLeaderboards ? ( return !showLeaderboards ? (
showClaim ? ( loadingShowClaim ? (
<div className="flex min-h-[calc(100vh-92px)] items-center justify-center">
<Loading />
</div>
) : showClaim ? (
<ClaimPage /> <ClaimPage />
) : ( ) : (
<Season setShowLeaderboards={setShowLeaderboards} /> <Season setShowLeaderboards={setShowLeaderboards} />

View File

@ -81,10 +81,13 @@ export const useIsAllClaimed = (
prevSeason: number | undefined, prevSeason: number | undefined,
walletPk: PublicKey | null, walletPk: PublicKey | null,
) => { ) => {
const [isAllClaimed, setIsAllCliamed] = useState(true) const [isAllClaimed, setIsAllCliamed] = useState(false)
const [showClaim, setShowClaim] = useState(true) const [showClaim, setShowClaim] = useState(true)
const [loading, setLoading] = useState(true) const [loadingClaimed, setLoadingClaimed] = useState(true)
const { data: distributionDataAndClient } = useDistribution(prevSeason) const {
data: distributionDataAndClient,
isInitialLoading: loadingDistribution,
} = useDistribution(prevSeason)
const distributionData = distributionDataAndClient?.distribution const distributionData = distributionDataAndClient?.distribution
useEffect(() => { useEffect(() => {
@ -95,21 +98,18 @@ export const useIsAllClaimed = (
const claimed = ( const claimed = (
await distributionData?.getClaimed(walletPk) await distributionData?.getClaimed(walletPk)
)?.filter((x) => !x.equals(PublicKey.default))?.length )?.filter((x) => !x.equals(PublicKey.default))?.length
setLoading(false) setLoadingClaimed(false)
setIsAllCliamed(!toClaim || toClaim === claimed) setIsAllCliamed(!!toClaim && toClaim === claimed)
} catch (e) { } catch (e) {
console.log('failed to check claimed rewards', e) console.log('failed to check claimed rewards', e)
setLoading(false)
} }
} else {
setIsAllCliamed(false)
} }
} }
handleGetIsAllClaimed() handleGetIsAllClaimed()
}, [distributionData, walletPk]) }, [distributionData, walletPk])
useEffect(() => { useEffect(() => {
if (distributionData && walletPk) { if (distributionData && walletPk && !loadingClaimed) {
const start = distributionData.start.getTime() const start = distributionData.start.getTime()
const currentTimestamp = new Date().getTime() const currentTimestamp = new Date().getTime()
const isClaimActive = const isClaimActive =
@ -121,6 +121,9 @@ export const useIsAllClaimed = (
} else { } else {
setShowClaim(false) setShowClaim(false)
} }
}, [distributionData, walletPk, isAllClaimed]) }, [distributionData, walletPk, isAllClaimed, loadingClaimed])
const loading = loadingClaimed || loadingDistribution
return { isAllClaimed, showClaim, loading } return { isAllClaimed, showClaim, loading }
} }