mirror of
https://github.com/kremalicious/asi-calculator.git
synced 2024-12-22 01:13:17 +01:00
more safeguards
This commit is contained in:
parent
ca9a2c37f9
commit
92c53bb068
@ -16,7 +16,7 @@ export function Price({ price }: { price: PriceCoingecko }) {
|
|||||||
return (
|
return (
|
||||||
<p className={styles.price}>
|
<p className={styles.price}>
|
||||||
<span className={`${styles.fiat} ${feedbackClasses}`}>
|
<span className={`${styles.fiat} ${feedbackClasses}`}>
|
||||||
{formatFiat(price.usd, 'USD', locale)}
|
{formatFiat(price?.usd, 'USD', locale)}
|
||||||
</span>
|
</span>
|
||||||
{price?.usd_24h_change ? (
|
{price?.usd_24h_change ? (
|
||||||
<PriceChange priceChange={price.usd_24h_change} />
|
<PriceChange priceChange={price.usd_24h_change} />
|
||||||
|
@ -24,7 +24,7 @@ export function usePrices(): {
|
|||||||
isValidating: boolean
|
isValidating: boolean
|
||||||
isLoading: boolean
|
isLoading: boolean
|
||||||
} {
|
} {
|
||||||
const { data, isValidating, isLoading } = useSWR(
|
const { data, error, isValidating, isLoading } = useSWR(
|
||||||
`/api/prices?tokens=${tokenAddresses}`,
|
`/api/prices?tokens=${tokenAddresses}`,
|
||||||
fetcher
|
fetcher
|
||||||
)
|
)
|
||||||
@ -34,24 +34,33 @@ export function usePrices(): {
|
|||||||
const agixAddress = getTokenAddressBySymbol('AGIX')
|
const agixAddress = getTokenAddressBySymbol('AGIX')
|
||||||
const cudosAddress = getTokenAddressBySymbol('CUDOS')
|
const cudosAddress = getTokenAddressBySymbol('CUDOS')
|
||||||
|
|
||||||
if (!data || !oceanAddress || !fetAddress || !agixAddress || !cudosAddress)
|
const pricesEmpty = {
|
||||||
return {
|
ocean: { usd: 0, usd_24h_change: 0 },
|
||||||
prices: {
|
fet: { usd: 0, usd_24h_change: 0 },
|
||||||
ocean: { usd: 0, usd_24h_change: 0 },
|
agix: { usd: 0, usd_24h_change: 0 },
|
||||||
fet: { usd: 0, usd_24h_change: 0 },
|
cudos: { usd: 0, usd_24h_change: 0 },
|
||||||
agix: { usd: 0, usd_24h_change: 0 },
|
asi: { usd: 0, usd_24h_change: 0 }
|
||||||
cudos: { usd: 0, usd_24h_change: 0 },
|
}
|
||||||
asi: { usd: 0, usd_24h_change: 0 }
|
|
||||||
},
|
|
||||||
isValidating,
|
|
||||||
isLoading
|
|
||||||
}
|
|
||||||
|
|
||||||
const ocean = data[oceanAddress]
|
const isError =
|
||||||
const fet = data[fetAddress]
|
!data ||
|
||||||
const agix = data[agixAddress]
|
error ||
|
||||||
const cudos = data[cudosAddress]
|
!oceanAddress ||
|
||||||
const asi = fet
|
!fetAddress ||
|
||||||
|
!agixAddress ||
|
||||||
|
!cudosAddress
|
||||||
|
|
||||||
return { prices: { ocean, fet, agix, cudos, asi }, isValidating, isLoading }
|
return {
|
||||||
|
prices: isError
|
||||||
|
? pricesEmpty
|
||||||
|
: {
|
||||||
|
ocean: data[oceanAddress],
|
||||||
|
fet: data[fetAddress],
|
||||||
|
agix: data[agixAddress],
|
||||||
|
cudos: data[cudosAddress],
|
||||||
|
asi: data[fetAddress]
|
||||||
|
},
|
||||||
|
isValidating,
|
||||||
|
isLoading
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,44 +26,46 @@ export function Buy() {
|
|||||||
</h3>
|
</h3>
|
||||||
<Result
|
<Result
|
||||||
token={getTokenBySymbol('OCEAN')}
|
token={getTokenBySymbol('OCEAN')}
|
||||||
amount={debouncedAmount / prices.ocean.usd}
|
amount={debouncedAmount / prices.ocean?.usd}
|
||||||
amountAsi={(debouncedAmount / prices.ocean.usd) * ratioOceanToAsi}
|
amountAsi={(debouncedAmount / prices.ocean?.usd) * ratioOceanToAsi}
|
||||||
amountFiat={
|
amountFiat={
|
||||||
(debouncedAmount / prices.ocean.usd) *
|
(debouncedAmount / prices.ocean?.usd) *
|
||||||
ratioOceanToAsi *
|
ratioOceanToAsi *
|
||||||
prices.asi.usd
|
prices.asi?.usd
|
||||||
}
|
}
|
||||||
isValidating={isValidating}
|
isValidating={isValidating}
|
||||||
isLoading={isLoading}
|
isLoading={isLoading}
|
||||||
/>
|
/>
|
||||||
<Result
|
<Result
|
||||||
token={getTokenBySymbol('AGIX')}
|
token={getTokenBySymbol('AGIX')}
|
||||||
amount={debouncedAmount / prices.agix.usd}
|
amount={debouncedAmount / prices.agix?.usd}
|
||||||
amountAsi={(debouncedAmount / prices.agix.usd) * ratioAgixToAsi}
|
amountAsi={(debouncedAmount / prices.agix?.usd) * ratioAgixToAsi}
|
||||||
amountFiat={
|
amountFiat={
|
||||||
(debouncedAmount / prices.agix.usd) * ratioAgixToAsi * prices.asi.usd
|
(debouncedAmount / prices.agix?.usd) *
|
||||||
|
ratioAgixToAsi *
|
||||||
|
prices.asi?.usd
|
||||||
}
|
}
|
||||||
isValidating={isValidating}
|
isValidating={isValidating}
|
||||||
isLoading={isLoading}
|
isLoading={isLoading}
|
||||||
/>
|
/>
|
||||||
<Result
|
<Result
|
||||||
token={getTokenBySymbol('CUDOS')}
|
token={getTokenBySymbol('CUDOS')}
|
||||||
amount={debouncedAmount / prices.cudos.usd}
|
amount={debouncedAmount / prices.cudos?.usd}
|
||||||
amountAsi={(debouncedAmount / prices.cudos.usd) * ratioCudosToAsi}
|
amountAsi={(debouncedAmount / prices.cudos?.usd) * ratioCudosToAsi}
|
||||||
amountFiat={
|
amountFiat={
|
||||||
(debouncedAmount / prices.cudos.usd) *
|
(debouncedAmount / prices.cudos?.usd) *
|
||||||
ratioCudosToAsi *
|
ratioCudosToAsi *
|
||||||
prices.asi.usd
|
prices.asi?.usd
|
||||||
}
|
}
|
||||||
isValidating={isValidating}
|
isValidating={isValidating}
|
||||||
isLoading={isLoading}
|
isLoading={isLoading}
|
||||||
/>
|
/>
|
||||||
<Result
|
<Result
|
||||||
token={getTokenBySymbol('FET')}
|
token={getTokenBySymbol('FET')}
|
||||||
amount={debouncedAmount / prices.fet.usd}
|
amount={debouncedAmount / prices.fet?.usd}
|
||||||
amountAsi={(debouncedAmount / prices.fet.usd) * ratioFetToAsi}
|
amountAsi={(debouncedAmount / prices.fet?.usd) * ratioFetToAsi}
|
||||||
amountFiat={
|
amountFiat={
|
||||||
(debouncedAmount / prices.fet.usd) * ratioFetToAsi * prices.asi.usd
|
(debouncedAmount / prices.fet?.usd) * ratioFetToAsi * prices.asi?.usd
|
||||||
}
|
}
|
||||||
isValidating={isValidating}
|
isValidating={isValidating}
|
||||||
isLoading={isLoading}
|
isLoading={isLoading}
|
||||||
|
@ -46,9 +46,9 @@ export function SwapResults({
|
|||||||
const tokenSelected = tokenSymbol.toLowerCase() as keyof Prices
|
const tokenSelected = tokenSymbol.toLowerCase() as keyof Prices
|
||||||
|
|
||||||
const amountInUsd = amount * prices[tokenSelected]?.usd
|
const amountInUsd = amount * prices[tokenSelected]?.usd
|
||||||
const amountToOcean = amountInUsd / prices.ocean.usd
|
const amountToOcean = amountInUsd / prices.ocean?.usd
|
||||||
const amountToAgix = amountInUsd / prices.agix.usd
|
const amountToAgix = amountInUsd / prices.agix?.usd
|
||||||
const amountToCudos = amountInUsd / prices.cudos.usd
|
const amountToCudos = amountInUsd / prices.cudos?.usd
|
||||||
|
|
||||||
// As of July 1st, use fixed ratios instead of FET market price
|
// As of July 1st, use fixed ratios instead of FET market price
|
||||||
// for Migration Tool scenario
|
// for Migration Tool scenario
|
||||||
@ -60,7 +60,7 @@ export function SwapResults({
|
|||||||
: tokenSelected === 'cudos'
|
: tokenSelected === 'cudos'
|
||||||
? amount * ratioCudosToAsi
|
? amount * ratioCudosToAsi
|
||||||
: amount
|
: amount
|
||||||
: amountInUsd / prices.fet.usd
|
: amountInUsd / prices.fet?.usd
|
||||||
|
|
||||||
const showOcean = !isMigration || (isMigration && tokenSelected === 'ocean')
|
const showOcean = !isMigration || (isMigration && tokenSelected === 'ocean')
|
||||||
const showAgix = !isMigration || (isMigration && tokenSelected === 'agix')
|
const showAgix = !isMigration || (isMigration && tokenSelected === 'agix')
|
||||||
@ -77,10 +77,10 @@ export function SwapResults({
|
|||||||
amountFiat={
|
amountFiat={
|
||||||
(amountToOceanUniswap || amountToOcean) *
|
(amountToOceanUniswap || amountToOcean) *
|
||||||
ratioOceanToAsi *
|
ratioOceanToAsi *
|
||||||
prices.asi.usd
|
prices.asi?.usd
|
||||||
}
|
}
|
||||||
amountOriginalFiat={
|
amountOriginalFiat={
|
||||||
(amountToOceanUniswap || amountToOcean) * prices.ocean.usd
|
(amountToOceanUniswap || amountToOcean) * prices.ocean?.usd
|
||||||
}
|
}
|
||||||
isValidating={isValidatingToOcean || isValidatingPrices}
|
isValidating={isValidatingToOcean || isValidatingPrices}
|
||||||
isLoading={isLoadingToOcean || isLoadingPrices}
|
isLoading={isLoadingToOcean || isLoadingPrices}
|
||||||
@ -95,10 +95,10 @@ export function SwapResults({
|
|||||||
amountFiat={
|
amountFiat={
|
||||||
(amountToAgixUniswap || amountToAgix) *
|
(amountToAgixUniswap || amountToAgix) *
|
||||||
ratioAgixToAsi *
|
ratioAgixToAsi *
|
||||||
prices.asi.usd
|
prices.asi?.usd
|
||||||
}
|
}
|
||||||
amountOriginalFiat={
|
amountOriginalFiat={
|
||||||
(amountToAgixUniswap || amountToAgix) * prices.agix.usd
|
(amountToAgixUniswap || amountToAgix) * prices.agix?.usd
|
||||||
}
|
}
|
||||||
isValidating={isValidatingToAgix || isValidatingPrices}
|
isValidating={isValidatingToAgix || isValidatingPrices}
|
||||||
isLoading={isLoadingToAgix || isLoadingPrices}
|
isLoading={isLoadingToAgix || isLoadingPrices}
|
||||||
@ -113,10 +113,10 @@ export function SwapResults({
|
|||||||
amountFiat={
|
amountFiat={
|
||||||
(amountToCudosUniswap || amountToCudos) *
|
(amountToCudosUniswap || amountToCudos) *
|
||||||
ratioCudosToAsi *
|
ratioCudosToAsi *
|
||||||
prices.asi.usd
|
prices.asi?.usd
|
||||||
}
|
}
|
||||||
amountOriginalFiat={
|
amountOriginalFiat={
|
||||||
(amountToCudosUniswap || amountToCudos) * prices.cudos.usd
|
(amountToCudosUniswap || amountToCudos) * prices.cudos?.usd
|
||||||
}
|
}
|
||||||
isValidating={isValidatingToCudos || isValidatingPrices}
|
isValidating={isValidatingToCudos || isValidatingPrices}
|
||||||
isLoading={isLoadingToCudos || isLoadingPrices}
|
isLoading={isLoadingToCudos || isLoadingPrices}
|
||||||
@ -128,9 +128,9 @@ export function SwapResults({
|
|||||||
token={getTokenBySymbol('FET')}
|
token={getTokenBySymbol('FET')}
|
||||||
amount={amountToFetUniswap || amountToFet}
|
amount={amountToFetUniswap || amountToFet}
|
||||||
amountAsi={(amountToFetUniswap || amountToFet) * ratioFetToAsi}
|
amountAsi={(amountToFetUniswap || amountToFet) * ratioFetToAsi}
|
||||||
amountFiat={(amountToFetUniswap || amountToFet) * prices.asi.usd}
|
amountFiat={(amountToFetUniswap || amountToFet) * prices.asi?.usd}
|
||||||
amountOriginalFiat={
|
amountOriginalFiat={
|
||||||
(amountToFetUniswap || amountToFet) * prices.asi.usd
|
(amountToFetUniswap || amountToFet) * prices.asi?.usd
|
||||||
}
|
}
|
||||||
isValidating={isValidatingToFet || isValidatingPrices}
|
isValidating={isValidatingToFet || isValidatingPrices}
|
||||||
isLoading={isLoadingToFet || isLoadingPrices}
|
isLoading={isLoadingToFet || isLoadingPrices}
|
||||||
|
Loading…
Reference in New Issue
Block a user