From 17f2a5269aea17ed04a6e173745a7c22589cfd75 Mon Sep 17 00:00:00 2001 From: Rafael Date: Thu, 13 Jun 2024 11:37:43 +0600 Subject: [PATCH] Add rank to Etf items --- .../modules/market/etf/EtfModule.kt | 6 +++++ .../modules/market/etf/EtfViewModel.kt | 27 ++++++++++--------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/etf/EtfModule.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/etf/EtfModule.kt index ccefdbb07d..4c442cd2cf 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/etf/EtfModule.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/etf/EtfModule.kt @@ -12,6 +12,7 @@ import io.horizontalsystems.bankwallet.modules.market.MarketDataValue import io.horizontalsystems.bankwallet.modules.market.TimeDuration import io.horizontalsystems.bankwallet.ui.compose.TranslatableString import io.horizontalsystems.bankwallet.ui.compose.WithTranslatableTitle +import io.horizontalsystems.marketkit.models.Etf import io.horizontalsystems.marketkit.models.EtfPoint object EtfModule { @@ -33,6 +34,11 @@ object EtfModule { val rank: String?, ) + data class RankedEtf( + val etf: Etf, + val rank: Int + ) + @Immutable data class UiState( val viewItems: List, diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/etf/EtfViewModel.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/etf/EtfViewModel.kt index f20804bca1..8185a32fa2 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/etf/EtfViewModel.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/etf/EtfViewModel.kt @@ -11,6 +11,7 @@ import io.horizontalsystems.bankwallet.modules.market.MarketDataValue import io.horizontalsystems.bankwallet.modules.market.TimeDuration import io.horizontalsystems.bankwallet.modules.market.Value import io.horizontalsystems.bankwallet.modules.market.etf.EtfModule.EtfViewItem +import io.horizontalsystems.bankwallet.modules.market.etf.EtfModule.RankedEtf import io.horizontalsystems.marketkit.models.Etf import io.horizontalsystems.marketkit.models.EtfPoint import io.horizontalsystems.marketkit.models.HsTimePeriod @@ -45,7 +46,7 @@ class EtfViewModel( private var marketDataJob: Job? = null private var sortBy: EtfModule.SortBy = sortByOptions.first() private var timeDuration: TimeDuration = timeDurations.first() - private var cachedEtfs: List = listOf() + private var cachedEtfs: List = listOf() private var chartDataLoading = true private var etfPoints = listOf() @@ -88,6 +89,8 @@ class EtfViewModel( marketDataJob = viewModelScope.launch(Dispatchers.IO) { try { cachedEtfs = marketKit.etfs(currencyManager.baseCurrency.code).await() + .sortedByDescending { it.totalAssets } + .mapIndexed{ index, etf -> RankedEtf(etf, index + 1) } updateViewItems() viewState = ViewState.Success @@ -102,36 +105,36 @@ class EtfViewModel( private fun updateViewItems() { val sorted = when (sortBy) { - EtfModule.SortBy.HighestAssets -> cachedEtfs.sortedByDescending { it.totalAssets } - EtfModule.SortBy.LowestAssets -> cachedEtfs.sortedBy { it.totalAssets } + EtfModule.SortBy.HighestAssets -> cachedEtfs.sortedByDescending { it.etf.totalAssets } + EtfModule.SortBy.LowestAssets -> cachedEtfs.sortedBy { it.etf.totalAssets } EtfModule.SortBy.Inflow -> cachedEtfs.sortedByDescending { - it.priceChangeValue( + it.etf.priceChangeValue( timeDuration ) } - EtfModule.SortBy.Outflow -> cachedEtfs.sortedBy { it.priceChangeValue(timeDuration) } + EtfModule.SortBy.Outflow -> cachedEtfs.sortedBy { it.etf.priceChangeValue(timeDuration) } } viewItems = sorted.map { etf -> etfViewItem(etf, timeDuration) } } - private fun etfViewItem(etf: Etf, timeDuration: TimeDuration) = EtfViewItem( - title = etf.ticker, - iconUrl = "https://cdn.blocksdecoded.com/etf-tresuries/${etf.ticker}@3x.png", - subtitle = etf.name, - value = etf.totalAssets?.let { + private fun etfViewItem(rankedEtf: RankedEtf, timeDuration: TimeDuration) = EtfViewItem( + title = rankedEtf.etf.ticker, + iconUrl = "https://cdn.blocksdecoded.com/etf-tresuries/${rankedEtf.etf.ticker}@3x.png", + subtitle = rankedEtf.etf.name, + value = rankedEtf.etf.totalAssets?.let { App.numberFormatter.formatFiatShort(it, currencyManager.baseCurrency.symbol, 0) }, - subvalue = etf.priceChangeValue(timeDuration)?.let { + subvalue = rankedEtf.etf.priceChangeValue(timeDuration)?.let { MarketDataValue.DiffNew( Value.Currency( CurrencyValue(currencyManager.baseCurrency, it) ) ) }, - rank = null + rank = rankedEtf.rank.toString() ) private fun refreshWithMinLoadingSpinnerPeriod() {