Updated on 2026-08-14
This commit is contained in:
parent
8a46d815b9
commit
7872d47eda
9 changed files with 59 additions and 8 deletions
|
|
@ -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,
|
||||
) {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
) {
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@ internal class TokenStatusOperations(
|
|||
name = token.name,
|
||||
symbol = token.symbol,
|
||||
isCoin = token.isCoin,
|
||||
decimals = token.decimals,
|
||||
iconUrl = token.iconUrl,
|
||||
value = createStatus(),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue