Skip to content

Commit

Permalink
Merge branch 'fix/portfolio-view-bugs' into rc/9.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
antonijzelinskij committed Nov 11, 2024
2 parents 68ce270 + ae93275 commit 67ff9c6
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@ fun groupAndSortAssetsByToken(
.map { asset -> AssetWithNetwork(chainsById.getValue(asset.token.configuration.chainId), asset, asset.totalWithOffChain(externalBalances)) }
.groupBy { mapToTokenGroup(it) }
.mapValues { (_, assets) -> assets.sortedWith(assetComparator) }
.mapKeys { (token, assets) ->
.mapKeys { (tokenWrapper, assets) ->
TokenAssetGroup(
token = token,
token = tokenWrapper.token,
groupBalance = assets.fold(AssetBalance.ZERO) { acc, element -> acc + element.balanceWithOffChain },
itemsCount = assets.size
)
Expand All @@ -72,9 +72,23 @@ fun getTokenAssetGroupBaseComparator(
.then(TokenSymbol.defaultComparatorFrom { it.token.symbol })
}

private fun mapToTokenGroup(it: AssetWithNetwork) = TokenAssetGroup.Token(
it.asset.token.configuration.icon,
it.asset.token.configuration.symbol.normalize(),
it.asset.token.currency,
it.asset.token.coinRate
private fun mapToTokenGroup(it: AssetWithNetwork) = TokenGroupWrapper(
TokenAssetGroup.Token(
it.asset.token.configuration.icon,
it.asset.token.configuration.symbol.normalize(),
it.asset.token.currency,
it.asset.token.coinRate
)
)

// Helper class to group items by symbol only
private class TokenGroupWrapper(val token: TokenAssetGroup.Token) {

override fun equals(other: Any?): Boolean {
return other is TokenGroupWrapper && token.symbol == other.token.symbol
}

override fun hashCode(): Int {
return token.symbol.hashCode()
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package io.novafoundation.nova.feature_assets.presentation.balance.common

import io.novafoundation.nova.common.data.model.AssetViewMode
import io.novafoundation.nova.common.utils.combineToPair
import io.novafoundation.nova.common.utils.shareInBackground
import io.novafoundation.nova.common.utils.throttleLast
import io.novafoundation.nova.feature_assets.domain.WalletInteractor
import io.novafoundation.nova.feature_assets.domain.assets.ExternalBalancesInteractor
import io.novafoundation.nova.feature_assets.domain.assets.list.AssetsListInteractor
Expand All @@ -15,6 +17,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.combine
import kotlin.time.Duration.Companion.milliseconds

class AssetListMixinFactory(
private val walletInteractor: WalletInteractor,
Expand Down Expand Up @@ -67,11 +70,13 @@ class RealAssetListMixin(
override val assetsViewModeFlow = assetsListInteractor.assetsViewModeFlow()
.shareInBackground()

private val throttledBalance = combineToPair(filteredAssetsFlow, externalBalancesFlow)
.throttleLast(300.milliseconds)

private val assetsByViewMode = combine(
filteredAssetsFlow,
externalBalancesFlow,
throttledBalance,
assetsViewModeFlow
) { assets, externalBalances, viewMode ->
) { (assets, externalBalances), viewMode ->
when (viewMode) {
AssetViewMode.NETWORKS -> walletInteractor.groupAssetsByNetwork(assets, externalBalances).byNetworks()
AssetViewMode.TOKENS -> walletInteractor.groupAssetsByToken(assets, externalBalances).byTokens()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import io.novafoundation.nova.common.data.model.switch
import io.novafoundation.nova.common.data.repository.AssetsViewModeRepository
import io.novafoundation.nova.common.presentation.AssetIconProvider
import io.novafoundation.nova.common.utils.combineToTriple
import io.novafoundation.nova.common.utils.throttleLast
import io.novafoundation.nova.common.utils.toggle
import io.novafoundation.nova.common.utils.updateValue
import io.novafoundation.nova.feature_assets.domain.assets.models.AssetsByViewModeResult
Expand All @@ -18,7 +17,6 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.mapLatest
import kotlin.time.Duration.Companion.milliseconds

class ExpandableAssetsMixinFactory(
private val assetIconProvider: AssetIconProvider,
Expand Down Expand Up @@ -54,20 +52,19 @@ class RealExpandableAssetsMixin(
private val expandedTokenIdsFlow = MutableStateFlow(setOf<String>())

override val assetModelsFlow: Flow<List<BalanceListRvItem>> = combineToTriple(
assetsFlow.throttleLast(300.milliseconds),
assetsFlow,
expandedTokenIdsFlow,
selectedCurrency
)
.mapLatest { (assetsByViewMode, expandedTokens, currency) ->
when (assetsByViewMode) {
is AssetsByViewModeResult.ByNetworks -> assetsByViewMode.assets.mapGroupedAssetsToUi(amountFormatter, assetIconProvider, currency)
is AssetsByViewModeResult.ByTokens -> assetsByViewMode.tokens.mapGroupedAssetsToUi(
amountFormatter = amountFormatter,
assetIconProvider = assetIconProvider,
assetFilter = { groupId, assetsInGroup -> filterTokens(groupId, assetsInGroup, expandedTokens) }
)
}
).mapLatest { (assetsByViewMode, expandedTokens, currency) ->
when (assetsByViewMode) {
is AssetsByViewModeResult.ByNetworks -> assetsByViewMode.assets.mapGroupedAssetsToUi(amountFormatter, assetIconProvider, currency)
is AssetsByViewModeResult.ByTokens -> assetsByViewMode.tokens.mapGroupedAssetsToUi(
amountFormatter = amountFormatter,
assetIconProvider = assetIconProvider,
assetFilter = { groupId, assetsInGroup -> filterTokens(groupId, assetsInGroup, expandedTokens) }
)
}
}
.distinctUntilChanged()

override fun expandToken(tokenGroupUi: TokenGroupUi) {
Expand Down

0 comments on commit 67ff9c6

Please sign in to comment.