Skip to content

Commit

Permalink
feat(superapp): AND-6808 Fiat balances (#4150)
Browse files Browse the repository at this point in the history
* add todo for errors

* fiat balance

* pubkeys fix]🍒

* fiat assets

* uncomment

* κτλιντ
  • Loading branch information
antonis-bc committed Nov 24, 2022
1 parent b3cde6f commit f09a95f
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 24 deletions.
Expand Up @@ -68,6 +68,14 @@ fun <T> Flow<DataResource<T>>.doOnData(f: (T) -> Unit): Flow<DataResource<T>> {
}
}

fun <T> Flow<DataResource<T>>.doOnError(f: (Exception) -> Unit): Flow<DataResource<T>> {
return map { dataResource ->
dataResource.also {
if (it is DataResource.Error) f(it.error)
}
}
}

fun <T> DataResource<T>.doOnError(f: (Exception) -> Unit): DataResource<T> {
return also {
if (this is DataResource.Error) f(this.error)
Expand Down
Expand Up @@ -23,7 +23,7 @@ class HomeAccountsRepository(
}.onStart {
emit(DataResource.Loading)
}.catch {
DataResource.Error(it as Exception)
emit(DataResource.Error(it as Exception))
}
}
}
Expand Down
Expand Up @@ -3,6 +3,7 @@ package com.blockchain.home.presentation.allassets
import androidx.lifecycle.viewModelScope
import com.blockchain.coincore.AccountBalance
import com.blockchain.coincore.CryptoAccount
import com.blockchain.coincore.FiatAccount
import com.blockchain.coincore.SingleAccount
import com.blockchain.commonarch.presentation.mvi_v2.ModelConfigArgs
import com.blockchain.commonarch.presentation.mvi_v2.MviViewModel
Expand All @@ -13,6 +14,7 @@ import com.blockchain.data.DataResource
import com.blockchain.data.anyError
import com.blockchain.data.anyLoading
import com.blockchain.data.combineDataResources
import com.blockchain.data.doOnError
import com.blockchain.data.filter
import com.blockchain.data.flatMap
import com.blockchain.data.getFirstError
Expand All @@ -29,6 +31,7 @@ import info.blockchain.balance.ExchangeRate
import info.blockchain.balance.FiatCurrency
import info.blockchain.balance.Money
import info.blockchain.balance.percentageDelta
import java.math.BigInteger
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.catch
Expand Down Expand Up @@ -105,17 +108,36 @@ class AssetsViewModel(
// filter accounts matching the search and custom filters predicate
searchTermPredicate && filtersPredicate
}
.toHomeCryptoAssets()
.let { accounts ->
accounts.take(state.sectionSize.size)
}
.toHomeCryptoAssets().take(state.sectionSize.size)
},
fiatAssets = state.accounts.map { accounts ->
accounts.filter { it.singleAccount is FiatAccount }.toHomeFiatAssets()
},
fiatAssets = DataResource.Data(emptyList()),
filters = filters
)
}
}

private fun List<ModelAccount>.toHomeFiatAssets(): List<FiatAssetState> {
return sortedWith(
compareByDescending<ModelAccount> {
it.singleAccount.currency.networkTicker ==
currencyPrefs.selectedFiatCurrency.networkTicker
}
.thenByDescending {
(it.balance as? DataResource.Data)?.data?.toBigInteger() ?: BigInteger.ZERO
}.thenBy {
it.singleAccount.label
}
).map {
FiatAssetState(
balance = it.balance,
icon = it.singleAccount.currency.logo,
name = it.singleAccount.label
)
}
}

private fun List<ModelAccount>.toHomeCryptoAssets(): List<CryptoAssetState> {
val grouped = sortedWith(
compareByDescending<ModelAccount> { it.singleAccount.currency.index }
Expand Down Expand Up @@ -189,6 +211,11 @@ class AssetsViewModel(
accounts = DataResource.Loading
)
}
}.doOnError {
/**
* TODO Handle error for fetching accounts for wallet mode
*/
println("Handling exception $it")
}
.filterIsInstance<DataResource.Data<List<SingleAccount>>>()
.distinctUntilChanged { old, new ->
Expand Down
Expand Up @@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Card
import androidx.compose.material.Divider
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
Expand All @@ -17,6 +18,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import com.blockchain.componentlib.R
Expand Down Expand Up @@ -131,26 +133,26 @@ fun HomeAssetsScreen(
is DataResource.Data -> {
if (fiatAssets.data.isNotEmpty()) {
Spacer(modifier = Modifier.size(AppTheme.dimensions.smallSpacing))

Column(
modifier = Modifier.background(
color = AppTheme.colors.background,
shape = RoundedCornerShape(AppTheme.dimensions.smallSpacing)
)
Card(
backgroundColor = AppTheme.colors.background,
shape = RoundedCornerShape(AppTheme.dimensions.mediumSpacing),
elevation = 0.dp
) {
fiatAssets.data.forEachIndexed { index, fiatAsset ->
BalanceChangeTableRow(
name = fiatAsset.name,
value = fiatAsset.balance.map {
it.toStringWithSymbol()
},
icon = ImageResource.Remote(fiatAsset.icon),
onClick = {
Column {
fiatAssets.data.forEachIndexed { index, fiatAsset ->
BalanceChangeTableRow(
name = fiatAsset.name,
value = fiatAsset.balance.map {
it.toStringWithSymbol()
},
icon = ImageResource.Remote(fiatAsset.icon),
onClick = {
}
)

if (index < fiatAssets.data.lastIndex) {
Divider()
}
)

if (index < fiatAssets.data.lastIndex) {
Divider()
}
}
}
Expand Down

0 comments on commit f09a95f

Please sign in to comment.