diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/model/Token.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/model/Token.kt index cbaa05d20e..4e1a2fba61 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/model/Token.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/model/Token.kt @@ -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, ) { diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/model/TokenStatus.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/model/TokenStatus.kt index 153caf20ba..1ea03d8aa3 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/model/TokenStatus.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/model/TokenStatus.kt @@ -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, ) { diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/utils/TokenListOperations.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/utils/TokenListOperations.kt index eeec365e6b..01a126b942 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/utils/TokenListOperations.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/utils/TokenListOperations.kt @@ -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): NonEmptySet { 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 } } } diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/utils/TokenStatusOperations.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/utils/TokenStatusOperations.kt index 09231e0526..c0ebeeafa7 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/utils/TokenStatusOperations.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/utils/TokenStatusOperations.kt @@ -27,6 +27,8 @@ internal class TokenStatusOperations( name = token.name, symbol = token.symbol, isCoin = token.isCoin, + decimals = token.decimals, + iconUrl = token.iconUrl, value = createStatus(), ) } diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/utils/TokensStatusesOperations.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/utils/TokensStatusesOperations.kt index e301066bc6..0c90a3c80b 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/utils/TokensStatusesOperations.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/utils/TokensStatusesOperations.kt @@ -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) } } diff --git a/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/mock/MockTokenLists.kt b/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/mock/MockTokenLists.kt index 2951fbef39..78b4810d7b 100644 --- a/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/mock/MockTokenLists.kt +++ b/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/mock/MockTokenLists.kt @@ -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, ) } diff --git a/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/mock/MockTokens.kt b/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/mock/MockTokens.kt index e57f0f2471..43f22db152 100644 --- a/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/mock/MockTokens.kt +++ b/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/mock/MockTokens.kt @@ -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, ) diff --git a/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/mock/MockTokensStates.kt b/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/mock/MockTokensStates.kt index 338b4e1698..0b0c9e41ab 100644 --- a/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/mock/MockTokensStates.kt +++ b/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/mock/MockTokensStates.kt @@ -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, ) diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index e7fc8fd730..9b0fbad374 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -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"