diff --git a/app/src/main/java/com/tangem/tap/features/wallet/models/PendingTransaction.kt b/app/src/main/java/com/tangem/tap/features/wallet/models/PendingTransaction.kt index 62f4f714b1..d24a3ea480 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/models/PendingTransaction.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/models/PendingTransaction.kt @@ -43,6 +43,14 @@ fun List.removeUnknownTransactions(): List.filterByCoin(): List { + return this.filter { it.transactionData.amount.type == AmountType.Coin } +} + +fun List.filterByToken(token: Token): List { + return this.filter { it.currency == token.symbol } +} + fun TransactionData.toPendingTransactionForToken(token: Token, walletAddress: String): PendingTransaction? { if (this.amount.currencySymbol != token.symbol) return null return this.toPendingTransaction(walletAddress) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt index 9d0e40811a..0e4e83be59 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt @@ -357,7 +357,11 @@ data class WalletData( return listOfAddresses.size > 1 } - fun shouldEnableTokenSendButton(): Boolean = !blockchainAmountIsEmpty() || !tokenAmountIsEmpty() + fun shouldEnableTokenSendButton(): Boolean = if (blockchainAmountIsEmpty()) { + false + } else { + !tokenAmountIsEmpty() + } fun assembleWarnings(): List { val blockchain = currency.blockchain @@ -380,10 +384,11 @@ data class WalletData( val fullName = currency.blockchain.fullName walletWarnings.add(WalletWarning.BalanceNotEnoughForFee(fullName)) } + return walletWarnings.sortedBy { it.showingPosition } } - private fun blockchainAmountIsEmpty(): Boolean = currencyData.blockchainAmount?.isZero() ?: false + private fun blockchainAmountIsEmpty(): Boolean = currencyData.blockchainAmount?.isZero() == true private fun tokenAmountIsEmpty(): Boolean = currencyData.amount?.isZero() == true } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt index 643fbe7f71..cf8ca6cf56 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt @@ -8,8 +8,9 @@ import com.tangem.tap.common.extensions.toFiatString import com.tangem.tap.common.extensions.toFormattedCurrencyString import com.tangem.tap.domain.getFirstToken import com.tangem.tap.domain.tokens.BlockchainNetwork +import com.tangem.tap.features.wallet.models.filterByToken +import com.tangem.tap.features.wallet.models.getPendingTransactions import com.tangem.tap.features.wallet.models.removeUnknownTransactions -import com.tangem.tap.features.wallet.models.toPendingTransactions import com.tangem.tap.features.wallet.redux.* import com.tangem.tap.features.wallet.ui.BalanceStatus import com.tangem.tap.features.wallet.ui.BalanceWidgetData @@ -106,10 +107,9 @@ class MultiWalletReducer { throw NullPointerException("MultiWallet.TokenLoaded: WalletManager must be no NULL") } - val pendingTransactions = wallet.recentTransactions.toPendingTransactions(wallet.address) + val pendingTransactions = wallet.getPendingTransactions() val tokenSendButton = action.amount.value?.isZero() == false && pendingTransactions.isEmpty() - val tokenPendingTransactions = pendingTransactions - .filter { it.currency == action.amount.currencySymbol } + val tokenPendingTransactions = pendingTransactions.filterByToken(action.token) val tokenBalanceStatus = when { tokenPendingTransactions.isNotEmpty() -> BalanceStatus.TransactionInProgress pendingTransactions.isNotEmpty() -> BalanceStatus.SameCurrencyTransactionInProgress diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt index 2d3c053dab..79a0545616 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt @@ -9,9 +9,9 @@ import com.tangem.tap.common.extensions.toFormattedCurrencyString import com.tangem.tap.common.extensions.toFormattedFiatValue import com.tangem.tap.domain.getFirstToken import com.tangem.tap.domain.tokens.BlockchainNetwork +import com.tangem.tap.features.wallet.models.filterByToken import com.tangem.tap.features.wallet.models.getPendingTransactions import com.tangem.tap.features.wallet.models.removeUnknownTransactions -import com.tangem.tap.features.wallet.models.toPendingTransactions import com.tangem.tap.features.wallet.redux.* import com.tangem.tap.features.wallet.ui.BalanceStatus import com.tangem.tap.features.wallet.ui.BalanceWidgetData @@ -73,8 +73,7 @@ class OnWalletLoadedReducer { val tokens = wallet.getTokens().mapNotNull { token -> val currency = Currency.fromBlockchainNetwork(blockchainNetwork, token) val tokenWalletData = walletState.getWalletData(currency) - val tokenPendingTransactions = - pendingTransactions.filter { it.currency == token.symbol } + val tokenPendingTransactions = pendingTransactions.filterByToken(token) val tokenBalanceStatus = when { tokenPendingTransactions.isNotEmpty() -> BalanceStatus.TransactionInProgress pendingTransactions.isNotEmpty() -> BalanceStatus.SameCurrencyTransactionInProgress @@ -85,7 +84,7 @@ class OnWalletLoadedReducer { tokenWalletData?.fiatRate?.let { rate -> tokenAmountValue?.toFiatValue(rate) } val tokenSendButton = newWalletData.shouldEnableTokenSendButton() - && tokenPendingTransactions.isEmpty() + && tokenPendingTransactions.isEmpty() tokenWalletData?.copy( currencyData = tokenWalletData.currencyData.copy( status = tokenBalanceStatus, @@ -156,7 +155,7 @@ class OnWalletLoadedReducer { val fiatAmountRaw = fiatRate?.multiply(amount)?.setScale(2, RoundingMode.DOWN) val fiatAmount = fiatRate?.let { amount?.toFiatString(it, fiatCurrencyName) } - val pendingTransactions = wallet.recentTransactions.toPendingTransactions(wallet.address) + val pendingTransactions = wallet.getPendingTransactions() val sendButtonEnabled = amount?.isZero() == false && pendingTransactions.isEmpty() val balanceStatus = if (pendingTransactions.isNotEmpty()) { BalanceStatus.TransactionInProgress