Updated on 2026-08-14

This commit is contained in:
Tangem 2026-03-13 12:51:12 +03:00
parent 158fd355de
commit 473aeee675
18 changed files with 1176 additions and 226 deletions

View file

@ -267,29 +267,45 @@ internal class SendModel @Inject constructor(
private suspend fun prepareTransferTransaction(): Either<Throwable, TransactionData> {
val predefinedValues = predefinedValues
val cryptoCurrencyStatus = cryptoCurrencyStatusFlow.value
return if (predefinedValues is PredefinedValues.Content.Deeplink) {
val predefinedAmount = predefinedValues.amount.parseBigDecimalOrNull()
createTransferTransactionUseCase(
amount = predefinedAmount?.convertToSdkAmount(cryptoCurrencyStatus) ?: error("Invalid amount"),
memo = predefinedValues.memo,
destination = predefinedValues.address,
userWalletId = userWallet.walletId,
network = cryptoCurrency.network,
)
} else {
val destinationUM = uiState.value.destinationUM as? DestinationUM.Content ?: error("Invalid destination")
val amountUM = uiState.value.amountUM as? AmountState.Data ?: error("Invalid amount")
val enteredDestinationAddress = destinationUM.addressTextField.actualAddress
val enteredMemo = destinationUM.memoTextField?.value
val enteredAmount = amountUM.amountTextField.cryptoAmount.value ?: error("Invalid amount")
return when (predefinedValues) {
is PredefinedValues.Content.Deeplink -> {
val predefinedAmount = predefinedValues.amount.parseBigDecimalOrNull()
createTransferTransactionUseCase(
amount = predefinedAmount?.convertToSdkAmount(cryptoCurrencyStatus)
?: error("Invalid amount"),
memo = predefinedValues.memo,
destination = predefinedValues.address,
userWalletId = userWallet.walletId,
network = cryptoCurrency.network,
)
}
is PredefinedValues.Content.QrCode -> {
val predefinedAmount = predefinedValues.amount?.parseBigDecimalOrNull()
createTransferTransactionUseCase(
amount = predefinedAmount?.convertToSdkAmount(cryptoCurrencyStatus)
?: error("Invalid amount"),
memo = predefinedValues.memo,
destination = predefinedValues.address,
userWalletId = userWallet.walletId,
network = cryptoCurrency.network,
)
}
PredefinedValues.Empty -> {
val destinationUM = uiState.value.destinationUM as? DestinationUM.Content
?: error("Invalid destination")
val amountUM = uiState.value.amountUM as? AmountState.Data ?: error("Invalid amount")
val enteredDestinationAddress = destinationUM.addressTextField.actualAddress
val enteredMemo = destinationUM.memoTextField?.value
val enteredAmount = amountUM.amountTextField.cryptoAmount.value ?: error("Invalid amount")
createTransferTransactionUseCase(
amount = enteredAmount.convertToSdkAmount(cryptoCurrencyStatus),
memo = enteredMemo,
destination = enteredDestinationAddress,
userWalletId = userWallet.walletId,
network = cryptoCurrency.network,
)
createTransferTransactionUseCase(
amount = enteredAmount.convertToSdkAmount(cryptoCurrencyStatus),
memo = enteredMemo,
destination = enteredDestinationAddress,
userWalletId = userWallet.walletId,
network = cryptoCurrency.network,
)
}
}
}
@ -348,6 +364,12 @@ internal class SendModel @Inject constructor(
memo = params.tag,
transactionId = predefinedTxId,
)
} else if (predefinedAddress != null) {
PredefinedValues.Content.QrCode(
amount = predefinedAmount,
address = predefinedAddress,
memo = params.tag,
)
} else {
PredefinedValues.Empty
}

View file

@ -96,7 +96,7 @@ internal class SendDestinationModel @Inject constructor(
),
)
val params = params as? DestinationBlockParams
val predefinedValues = params?.predefinedValues as? PredefinedValues.Content.Deeplink
val predefinedValues = params?.predefinedValues as? PredefinedValues.Content
if (predefinedValues?.address != null) {
_uiState.update(
SendDestinationPredefinedStateTransformer(