Updated on 2026-08-14
This commit is contained in:
parent
a0f1a6591c
commit
e993dc0647
119 changed files with 4449 additions and 720 deletions
|
|
@ -22,4 +22,6 @@ data class UserWallet(
|
|||
) {
|
||||
val cardId: String
|
||||
get() = scanResponse.card.cardId
|
||||
|
||||
internal var isSaved: Boolean = true
|
||||
}
|
||||
|
|
@ -35,6 +35,12 @@ data class WalletDataModel(
|
|||
open val pendingTransactions: List<PendingTransaction> = emptyList()
|
||||
open val errorMessage: String? = null
|
||||
open val isErrorStatus: Boolean = false
|
||||
|
||||
fun asRefreshing() = Refreshing(
|
||||
amount = amount,
|
||||
pendingTransactions = pendingTransactions,
|
||||
errorMessage = errorMessage,
|
||||
)
|
||||
}
|
||||
|
||||
object Loading : Status()
|
||||
|
|
|
|||
|
|
@ -10,7 +10,8 @@ import java.math.BigDecimal
|
|||
* Contains info about the blockchain and its currencies
|
||||
* @param userWalletId ID of the [UserWallet] which uses that store
|
||||
* @param blockchainNetwork Store's [BlockchainNetwork]
|
||||
* @param walletManager Store's [WalletManager], may be null if it fails to create this manager
|
||||
* @param walletManager Store's [WalletManager], may be null if it fails to create this manager. TODO: Remove after
|
||||
* WalletMiddleware refactoring
|
||||
* @param walletsData List of [WalletDataModel] which represents store's blockchain currency and tokens currencies
|
||||
* @param walletRent Store's [WalletRent], null if store has no rent or currency balance is greater then
|
||||
* [WalletRent.exemptionAmount]
|
||||
|
|
@ -18,6 +19,7 @@ import java.math.BigDecimal
|
|||
data class WalletStoreModel(
|
||||
val userWalletId: UserWalletId,
|
||||
val blockchainNetwork: BlockchainNetwork,
|
||||
@Deprecated("Don't use it, will be removed")
|
||||
val walletManager: WalletManager?,
|
||||
val walletsData: List<WalletDataModel>,
|
||||
val walletRent: WalletRent?,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,77 @@
|
|||
package com.tangem.tap.domain.model.builders
|
||||
|
||||
import com.tangem.blockchain.blockchains.polkadot.ExistentialDepositProvider
|
||||
import com.tangem.blockchain.common.WalletManager
|
||||
import com.tangem.tap.domain.model.UserWallet
|
||||
import com.tangem.tap.domain.model.WalletDataModel
|
||||
import com.tangem.tap.domain.model.WalletStoreModel
|
||||
import com.tangem.tap.domain.tokens.models.BlockchainNetwork
|
||||
import com.tangem.tap.features.wallet.models.Currency
|
||||
import com.tangem.tap.features.wallet.redux.reducers.createAddressesData
|
||||
import java.math.BigDecimal
|
||||
|
||||
class WalletStoreBuilder(
|
||||
private val userWallet: UserWallet,
|
||||
) {
|
||||
private var walletManager: WalletManager? = null
|
||||
private var blockchainNetwork: BlockchainNetwork? = null
|
||||
|
||||
fun setWalletManager(walletManager: WalletManager?) = this.apply {
|
||||
this.walletManager = walletManager
|
||||
}
|
||||
|
||||
fun setBlockchainNetwork(blockchainNetwork: BlockchainNetwork?) = this.apply {
|
||||
this.blockchainNetwork = blockchainNetwork
|
||||
}
|
||||
|
||||
fun build(): WalletStoreModel {
|
||||
val blockchainNetwork = this.blockchainNetwork
|
||||
?: walletManager?.let(BlockchainNetwork::fromWalletManager)
|
||||
?: error("Blockchain network and wallet manager must not be null")
|
||||
|
||||
val blockchainWalletData = blockchainNetwork.getBlockchainWalletData(walletManager)
|
||||
val tokensWalletsData = blockchainNetwork.getTokensWalletsData(walletManager)
|
||||
|
||||
return WalletStoreModel(
|
||||
userWalletId = userWallet.walletId,
|
||||
blockchainNetwork = blockchainNetwork,
|
||||
walletManager = walletManager,
|
||||
walletsData = (listOf(blockchainWalletData) + tokensWalletsData),
|
||||
walletRent = null,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun BlockchainNetwork.getBlockchainWalletData(walletManager: WalletManager?): WalletDataModel {
|
||||
return WalletDataModel(
|
||||
currency = Currency.Blockchain(
|
||||
blockchain = blockchain,
|
||||
derivationPath = derivationPath,
|
||||
),
|
||||
status = WalletDataModel.Loading,
|
||||
walletAddresses = walletManager?.wallet?.createAddressesData().orEmpty(),
|
||||
existentialDeposit = getExistentialDeposit(walletManager),
|
||||
fiatRate = null,
|
||||
)
|
||||
}
|
||||
|
||||
private fun BlockchainNetwork.getTokensWalletsData(walletManager: WalletManager?): List<WalletDataModel> {
|
||||
return this.tokens
|
||||
.map { token ->
|
||||
WalletDataModel(
|
||||
currency = Currency.Token(
|
||||
token = token,
|
||||
blockchain = blockchain,
|
||||
derivationPath = derivationPath,
|
||||
),
|
||||
status = WalletDataModel.Loading,
|
||||
walletAddresses = walletManager?.wallet?.createAddressesData().orEmpty(),
|
||||
existentialDeposit = getExistentialDeposit(walletManager),
|
||||
fiatRate = null,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getExistentialDeposit(walletManager: WalletManager?): BigDecimal? {
|
||||
return (walletManager as? ExistentialDepositProvider)?.getExistentialDeposit()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue