Commit 51fe44d5 authored by Jack Short's avatar Jack Short Committed by GitHub

fix: no price adjustment popups for pooled assets (#5322)

* fix: no price adjustment popups for pooled assets

* refactoring for readability
parent edf67e8e
import { BuyItem, GenieAsset, PriceInfo, RoutingItem, UpdatedGenieAsset } from 'nft/types' import { BuyItem, GenieAsset, isPooledMarket, Markets, PriceInfo, RoutingItem, UpdatedGenieAsset } from 'nft/types'
import { formatWeiToDecimal } from 'nft/utils/currency' import {
calcAvgGroupPoolPrice,
formatWeiToDecimal,
isInSameMarketplaceCollection,
isInSameSudoSwapPool,
} from 'nft/utils'
const isTheSame = (item: GenieAsset, routeAsset: BuyItem | PriceInfo) => { const isTheSame = (item: GenieAsset, routeAsset: BuyItem | PriceInfo) => {
// if route asset has id, match by id // if route asset has id, match by id
...@@ -18,12 +23,60 @@ const isPriceDiff = (oldPrice: string, newPrice: string) => { ...@@ -18,12 +23,60 @@ const isPriceDiff = (oldPrice: string, newPrice: string) => {
return formatWeiToDecimal(oldPrice) !== formatWeiToDecimal(newPrice) return formatWeiToDecimal(oldPrice) !== formatWeiToDecimal(newPrice)
} }
const isAveragePriceOfPooledAssets = (
asset: GenieAsset,
numberOfAssetsInPool: number,
expectedPrice: string
): boolean => {
return !isPriceDiff(calcAvgGroupPoolPrice(asset, numberOfAssetsInPool), expectedPrice)
}
const isAveragedPrice = (
item: UpdatedGenieAsset,
items: UpdatedGenieAsset[],
route: RoutingItem,
txRoute?: RoutingItem[]
): boolean => {
if (!(route && 'priceInfo' in route.assetOut)) return false
return (
!!item.marketplace &&
isPooledMarket(item.marketplace) &&
isAveragePriceOfPooledAssets(
item,
items.filter((routeItem) => itemInRouteAndSamePool(item, routeItem, txRoute)).length,
route.assetOut.priceInfo.basePrice
)
)
}
const getRouteForItem = (item: UpdatedGenieAsset, txRoute?: RoutingItem[]): RoutingItem | undefined => {
return txRoute && txRoute.find((r) => r.action === 'Buy' && isTheSame(item, r.assetOut))
}
const itemHasRoute = (item: UpdatedGenieAsset, txRoute?: RoutingItem[]): boolean => {
return !!getRouteForItem(item, txRoute)
}
const itemInRouteAndSamePool = (
item: UpdatedGenieAsset,
routeItem: UpdatedGenieAsset,
txRoute?: RoutingItem[]
): boolean => {
return (
itemHasRoute(routeItem, txRoute) &&
(item.marketplace === Markets.Sudoswap
? isInSameSudoSwapPool(item, routeItem)
: isInSameMarketplaceCollection(item, routeItem))
)
}
export const combineBuyItemsWithTxRoute = ( export const combineBuyItemsWithTxRoute = (
items: UpdatedGenieAsset[], items: UpdatedGenieAsset[],
txRoute?: RoutingItem[] txRoute?: RoutingItem[]
): UpdatedGenieAsset[] => { ): UpdatedGenieAsset[] => {
return items.map((item) => { return items.map((item) => {
const route = txRoute && txRoute.find((r) => r.action === 'Buy' && isTheSame(item, r.assetOut)) const route = getRouteForItem(item, txRoute)
// if the item is not found in txRoute, it means it's no longer for sale // if the item is not found in txRoute, it means it's no longer for sale
if (txRoute && !route) { if (txRoute && !route) {
...@@ -36,14 +89,14 @@ export const combineBuyItemsWithTxRoute = ( ...@@ -36,14 +89,14 @@ export const combineBuyItemsWithTxRoute = (
const newPriceInfo = item.updatedPriceInfo ? item.updatedPriceInfo : item.priceInfo const newPriceInfo = item.updatedPriceInfo ? item.updatedPriceInfo : item.priceInfo
// if the price changed // if the price changed
if ( if (route && 'priceInfo' in route.assetOut) {
route && if (isPriceDiff(newPriceInfo.basePrice, route.assetOut.priceInfo.basePrice)) {
'priceInfo' in route.assetOut && if (!isAveragedPrice(item, items, route, txRoute)) {
isPriceDiff(newPriceInfo.basePrice, route.assetOut.priceInfo.basePrice) return {
) { ...item,
return { updatedPriceInfo: route.assetOut.priceInfo,
...item, }
updatedPriceInfo: route.assetOut.priceInfo, }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment