From b7f6eeed15a7ab576dd4f8c134fd126c3d98ceef Mon Sep 17 00:00:00 2001 From: Leandro Boscariol Date: Tue, 18 Jan 2022 02:44:28 -0800 Subject: [PATCH] Pr2160/follow up (#2176) * Refactored claim type EnhancedUserClaimData * Refactored useUserEnhancedClaimData into smaller pieces Co-authored-by: Leandro --- src/custom/pages/Claim/types.ts | 4 +- src/custom/state/claim/hooks/index.ts | 58 +++++++++++++++------------ 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/src/custom/pages/Claim/types.ts b/src/custom/pages/Claim/types.ts index a9d30e3ea..f38a01c22 100644 --- a/src/custom/pages/Claim/types.ts +++ b/src/custom/pages/Claim/types.ts @@ -12,9 +12,9 @@ export type ClaimCommonTypes = { // Enhanced UserClaimData with useful additional properties export type EnhancedUserClaimData = UserClaimData & { + claimAmount: CurrencyAmount + isFree: boolean currencyAmount?: CurrencyAmount | undefined - claimAmount?: CurrencyAmount | undefined price?: Price | undefined cost?: CurrencyAmount | undefined - isFree: boolean } diff --git a/src/custom/state/claim/hooks/index.ts b/src/custom/state/claim/hooks/index.ts index f9e5cd55e..7ebc4d7c9 100644 --- a/src/custom/state/claim/hooks/index.ts +++ b/src/custom/state/claim/hooks/index.ts @@ -12,7 +12,7 @@ import { useActiveWeb3React } from 'hooks/web3' import { useSingleContractMultipleData } from 'state/multicall/hooks' import { useTransactionAdder } from 'state/enhancedTransactions/hooks' -import { V_COW } from 'constants/tokens' +import { GpEther, V_COW } from 'constants/tokens' import { formatSmart } from 'utils/format' import { calculateGasMargin } from 'utils/calculateGasMargin' @@ -755,36 +755,42 @@ export function useUserEnhancedClaimData(account: Account): EnhancedUserClaimDat const chainId = supportedChainId(preCheckChainId) if (!chainId) return [] - return sorted.map((claim) => { - const claimAmount = CurrencyAmount.fromRawAmount(ONE_VCOW.currency, claim.amount) + return sorted.map((claim) => _enhanceClaimData(claim, chainId)) + }, [preCheckChainId, sorted]) +} - const tokenAndAmount = claimTypeToTokenAmount(claim.type, chainId) +function _sortTypes(a: UserClaimData, b: UserClaimData): number { + return Number(isFreeClaim(b.type)) - Number(isFreeClaim(a.type)) +} - const data: EnhancedUserClaimData = { - ...claim, - isFree: isFreeClaim(claim.type), - claimAmount, - } +function _enhanceClaimData(claim: UserClaimData, chainId: SupportedChainId): EnhancedUserClaimData { + const claimAmount = CurrencyAmount.fromRawAmount(ONE_VCOW.currency, claim.amount) - if (!tokenAndAmount) { - return data - } else { - data.price = new Price({ - baseAmount: ONE_VCOW, - quoteAmount: CurrencyAmount.fromRawAmount(tokenAndAmount.token, tokenAndAmount.amount), - }).invert() - // get the currency amount using the price base currency (remember price was inverted) and claim amount - data.currencyAmount = CurrencyAmount.fromRawAmount(data.price.baseCurrency, claim.amount) + const data: EnhancedUserClaimData = { + ...claim, + isFree: isFreeClaim(claim.type), + claimAmount, + } - // e.g 1000 vCow / 20 GNO = 50 GNO cost - data.cost = data.currencyAmount.divide(data.price) + const tokenAndAmount = claimTypeToTokenAmount(claim.type, chainId) - return data - } - }) - }, [preCheckChainId, sorted]) + // Free claims will have tokenAndAmount === undefined + // If it's not a free claim, store the price and calculate cost in investment token + if (tokenAndAmount) { + data.price = _getPrice(tokenAndAmount) + // get the currency amount using the price base currency (remember price was inverted) + data.currencyAmount = CurrencyAmount.fromRawAmount(data.price.baseCurrency, claim.amount) + + // e.g 1000 vCow / 20 GNO = 50 GNO cost + data.cost = data.currencyAmount.divide(data.price) + } + + return data } -function _sortTypes(a: UserClaimData, b: UserClaimData): number { - return Number(isFreeClaim(b.type)) - Number(isFreeClaim(a.type)) +function _getPrice({ token, amount }: { amount: string; token: Token | GpEther }) { + return new Price({ + baseAmount: ONE_VCOW, + quoteAmount: CurrencyAmount.fromRawAmount(token, amount), + }).invert() }