Updated on 2026-08-14

This commit is contained in:
Tangem 2023-07-13 09:41:25 +03:00
parent 8a46d815b9
commit 7872d47eda
9 changed files with 59 additions and 8 deletions

View file

@ -5,6 +5,8 @@ data class Token(
val networkId: Network.ID,
val name: String,
val symbol: String,
val iconUrl: String?,
val decimals: Int,
val isCustom: Boolean,
val isCoin: Boolean,
) {

View file

@ -7,6 +7,8 @@ data class TokenStatus(
val networkId: Network.ID,
val name: String,
val symbol: String,
val decimals: Int,
val iconUrl: String?,
val isCoin: Boolean,
val value: Status,
) {

View file

@ -86,6 +86,7 @@ internal class TokenListOperations(
.map { group ->
group.copy(tokens = sortTokensByBalance(group.tokens))
}
.toNonEmptySet()
val sortedGroups = if (isAnyTokenLoading) {
groupsWithSortedTokens
} else {
@ -131,7 +132,8 @@ internal class TokenListOperations(
private suspend fun getNetworks(tokens: NonEmptySet<TokenStatus>): NonEmptySet<Network> {
return withContext(dispatchers.io) {
val networks = networksRepository.getNetworks(tokens.map { it.networkId }).bind()
val networksIds = tokens.map { it.networkId }.toNonEmptySet()
val networks = networksRepository.getNetworks(networksIds).bind()
ensureNotNull(networks.toNonEmptySetOrNull()) { TokensError.EmptyNetworks }
}
}

View file

@ -27,6 +27,8 @@ internal class TokenStatusOperations(
name = token.name,
symbol = token.symbol,
isCoin = token.isCoin,
decimals = token.decimals,
iconUrl = token.iconUrl,
value = createStatus(),
)
}

View file

@ -31,7 +31,7 @@ internal class TokensStatusesOperations(
if (tokens == null) {
flowOf(emptySet())
} else {
val tokensIds = tokens.map { token -> token.id }
val tokensIds = tokens.map { token -> token.id }.toNonEmptySet()
val groupedTokens = groupTokens(tokens)
combine(getQuotes(tokensIds), getNetworksStatues(groupedTokens)) { quotes, networksStatuses ->
@ -87,6 +87,7 @@ internal class TokensStatusesOperations(
.mapValues { (_, tokens) ->
tokens.toNonEmptySetOrNull()
?.map { it.id }
?.toNonEmptySet()
?: raise(TokensError.EmptyTokens)
}
}

View file

@ -68,7 +68,7 @@ internal object MockTokenLists {
val loadingUngroupedTokenList = with(ungroupedTokenList) {
copy(
tokens = tokens.map { it.copy(value = TokenStatus.Loading) },
tokens = tokens.map { it.copy(value = TokenStatus.Loading) }.toNonEmptySet(),
totalFiatBalance = TokenList.FiatBalance.Loading,
)
}

View file

@ -11,7 +11,10 @@ internal object MockTokens {
name = "Token 1",
symbol = "T1",
isCustom = false,
decimals = 8,
iconUrl = null,
isCoin = true,
)
val token2 = Token(
id = Token.ID("token2"),
@ -19,6 +22,8 @@ internal object MockTokens {
name = "Token 2",
symbol = "T2",
isCustom = false,
decimals = 8,
iconUrl = null,
isCoin = false,
)
val token3 = Token(
@ -27,6 +32,8 @@ internal object MockTokens {
name = "Token 3",
symbol = "T3",
isCustom = false,
decimals = 8,
iconUrl = null,
isCoin = false,
)
val token4 = Token(
@ -35,7 +42,10 @@ internal object MockTokens {
name = "Token 4",
symbol = "T4",
isCustom = false,
decimals = 8,
iconUrl = null,
isCoin = true,
)
val token5 = Token(
id = Token.ID("token5"),
@ -43,7 +53,9 @@ internal object MockTokens {
name = "Token 5",
symbol = "T5",
isCustom = false,
isCoin = true,
decimals = 8,
iconUrl = null,
isCoin = false,
)
val token6 = Token(
id = Token.ID("token6"),
@ -51,6 +63,8 @@ internal object MockTokens {
name = "Token 6",
symbol = "T6",
isCustom = false,
decimals = 8,
iconUrl = null,
isCoin = false,
)
val token7 = Token(
@ -59,7 +73,9 @@ internal object MockTokens {
name = "Token 7",
symbol = "T7",
isCustom = false,
isCoin = false,
decimals = 8,
iconUrl = null,
isCoin = true,
)
val token8 = Token(
id = Token.ID("token8"),
@ -67,7 +83,9 @@ internal object MockTokens {
name = "Token 8",
symbol = "T8",
isCustom = false,
isCoin = true,
decimals = 8,
iconUrl = null,
isCoin = false,
)
val token9 = Token(
id = Token.ID("token9"),
@ -75,7 +93,9 @@ internal object MockTokens {
name = "Token 9",
symbol = "T9",
isCustom = false,
isCoin = true,
decimals = 8,
iconUrl = null,
isCoin = false,
)
val token10 = Token(
id = Token.ID("token10"),
@ -83,6 +103,8 @@ internal object MockTokens {
name = "Token 10",
symbol = "T10",
isCustom = false,
decimals = 8,
iconUrl = null,
isCoin = false,
)

View file

@ -12,6 +12,8 @@ internal object MockTokensStates {
networkId = MockTokens.token1.networkId,
name = MockTokens.token1.name,
symbol = MockTokens.token1.symbol,
decimals = MockTokens.token1.decimals,
iconUrl = MockTokens.token1.iconUrl,
isCoin = MockTokens.token1.isCoin,
value = TokenStatus.Unreachable,
)
@ -21,6 +23,8 @@ internal object MockTokensStates {
networkId = MockTokens.token2.networkId,
name = MockTokens.token2.name,
symbol = MockTokens.token2.symbol,
decimals = MockTokens.token2.decimals,
iconUrl = MockTokens.token2.iconUrl,
isCoin = MockTokens.token2.isCoin,
value = TokenStatus.Unreachable,
)
@ -30,6 +34,8 @@ internal object MockTokensStates {
networkId = MockTokens.token3.networkId,
name = MockTokens.token3.name,
symbol = MockTokens.token3.symbol,
decimals = MockTokens.token3.decimals,
iconUrl = MockTokens.token3.iconUrl,
isCoin = MockTokens.token3.isCoin,
value = TokenStatus.Unreachable,
)
@ -39,6 +45,8 @@ internal object MockTokensStates {
networkId = MockTokens.token4.networkId,
name = MockTokens.token4.name,
symbol = MockTokens.token4.symbol,
decimals = MockTokens.token4.decimals,
iconUrl = MockTokens.token4.iconUrl,
isCoin = MockTokens.token4.isCoin,
value = TokenStatus.MissedDerivation,
)
@ -48,6 +56,8 @@ internal object MockTokensStates {
networkId = MockTokens.token5.networkId,
name = MockTokens.token5.name,
symbol = MockTokens.token5.symbol,
decimals = MockTokens.token5.decimals,
iconUrl = MockTokens.token5.iconUrl,
isCoin = MockTokens.token5.isCoin,
value = TokenStatus.MissedDerivation,
)
@ -57,6 +67,8 @@ internal object MockTokensStates {
networkId = MockTokens.token6.networkId,
name = MockTokens.token6.name,
symbol = MockTokens.token6.symbol,
decimals = MockTokens.token6.decimals,
iconUrl = MockTokens.token6.iconUrl,
isCoin = MockTokens.token6.isCoin,
value = TokenStatus.MissedDerivation,
)
@ -66,6 +78,8 @@ internal object MockTokensStates {
networkId = MockTokens.token7.networkId,
name = MockTokens.token7.name,
symbol = MockTokens.token7.symbol,
decimals = MockTokens.token7.decimals,
iconUrl = MockTokens.token7.iconUrl,
isCoin = MockTokens.token7.isCoin,
value = TokenStatus.NoAccount,
)
@ -75,6 +89,8 @@ internal object MockTokensStates {
networkId = MockTokens.token8.networkId,
name = MockTokens.token8.name,
symbol = MockTokens.token8.symbol,
decimals = MockTokens.token8.decimals,
iconUrl = MockTokens.token8.iconUrl,
isCoin = MockTokens.token8.isCoin,
value = TokenStatus.NoAccount,
)
@ -84,6 +100,8 @@ internal object MockTokensStates {
networkId = MockTokens.token9.networkId,
name = MockTokens.token9.name,
symbol = MockTokens.token9.symbol,
decimals = MockTokens.token9.decimals,
iconUrl = MockTokens.token9.iconUrl,
isCoin = MockTokens.token9.isCoin,
value = TokenStatus.NoAccount,
)
@ -93,6 +111,8 @@ internal object MockTokensStates {
networkId = MockTokens.token10.networkId,
name = MockTokens.token10.name,
symbol = MockTokens.token10.symbol,
decimals = MockTokens.token10.decimals,
iconUrl = MockTokens.token10.iconUrl,
isCoin = MockTokens.token10.isCoin,
value = TokenStatus.NoAccount,
)

View file

@ -71,7 +71,7 @@ zxingQrBarcodeScanner = "1.9.8"
zxingQrCode = "3.5.1"
mviCore = "1.3.1"
kotlinSerialization = "1.4.1"
arrow = "1.2.0-RC"
arrow = "1.2.0"
reactiveNetwork = "3.0.8"
walletConnectCore = "1.17.0"
walletConnectWeb3 = "1.10.0"