diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/entity/OnrampSuccessClickIntents.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/entity/OnrampSuccessClickIntents.kt index 7c7565aef5..f6c5f62e83 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/entity/OnrampSuccessClickIntents.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/entity/OnrampSuccessClickIntents.kt @@ -2,4 +2,5 @@ package com.tangem.features.onramp.success.entity interface OnrampSuccessClickIntents { fun goToProviderClick(providerLink: String) + fun onCopyClick(copiedText: String) } \ No newline at end of file diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/entity/conterter/SetOnrampSuccessContentConverter.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/entity/conterter/SetOnrampSuccessContentConverter.kt index 424213fc4b..b5d275dac8 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/entity/conterter/SetOnrampSuccessContentConverter.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/entity/conterter/SetOnrampSuccessContentConverter.kt @@ -25,6 +25,7 @@ internal class SetOnrampSuccessContentConverter( private val cryptoCurrency: CryptoCurrency, private val transaction: OnrampTransaction, private val goToProviderClick: (String) -> Unit, + private val onCopyClick: (String) -> Unit, ) : Converter { override fun convert(value: OnrampStatus): OnrampSuccessComponentUM { return OnrampSuccessComponentUM.Content( @@ -46,8 +47,12 @@ internal class SetOnrampSuccessContentConverter( ), providerName = stringReference(transaction.providerName), providerImageUrl = transaction.providerImageUrl, - statusBlock = convertStatuses(value.status, value.externalTxUrl), - notification = getNotification(value.status, value.externalTxUrl), + statusBlock = convertStatuses( + status = value.status, + externalTxId = value.externalTxId, + externalTxUrl = value.externalTxUrl, + ), + notification = getNotification(status = value.status, externalTxUrl = value.externalTxUrl), ) } @@ -73,7 +78,11 @@ internal class SetOnrampSuccessContentConverter( null } - private fun convertStatuses(status: OnrampStatus.Status, externalTxUrl: String?): ExpressStatusUM { + private fun convertStatuses( + status: OnrampStatus.Status, + externalTxId: String?, + externalTxUrl: String?, + ): ExpressStatusUM { val statuses = with(status) { persistentListOf( getAwaitingDepositItem(), @@ -85,7 +94,7 @@ internal class SetOnrampSuccessContentConverter( return ExpressStatusUM( title = resourceReference(R.string.common_transaction_status), - link = getStatusLink(status, externalTxUrl), + link = getStatusLink(status = status, externalTxId = externalTxId, externalTxUrl = externalTxUrl), statuses = statuses, ) } @@ -183,7 +192,11 @@ internal class SetOnrampSuccessContentConverter( state = getStatusState(OnrampStatus.Status.Sending), ) - private fun getStatusLink(status: OnrampStatus.Status, externalTxUrl: String?): ExpressLinkUM { + private fun getStatusLink( + status: OnrampStatus.Status, + externalTxId: String?, + externalTxUrl: String?, + ): ExpressLinkUM { if (externalTxUrl == null) return ExpressLinkUM.Empty return when (status) { OnrampStatus.Status.Verifying, @@ -197,7 +210,15 @@ internal class SetOnrampSuccessContentConverter( }, ) } - else -> ExpressLinkUM.Empty + else -> if (externalTxId != null) { + ExpressLinkUM.Content( + icon = R.drawable.ic_copy_24, + text = resourceReference(R.string.express_transaction_id, wrappedList(externalTxId)), + onClick = { onCopyClick(externalTxId) }, + ) + } else { + ExpressLinkUM.Empty + } } } diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/model/OnrampSuccessComponentModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/model/OnrampSuccessComponentModel.kt index fa74f49da7..80caf88f09 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/model/OnrampSuccessComponentModel.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/model/OnrampSuccessComponentModel.kt @@ -7,6 +7,7 @@ import com.tangem.core.decompose.model.ParamsContainer import com.tangem.core.decompose.navigation.Router import com.tangem.core.decompose.ui.UiMessageSender import com.tangem.core.navigation.url.UrlOpener +import com.tangem.core.ui.clipboard.ClipboardManager import com.tangem.core.ui.extensions.resourceReference import com.tangem.core.ui.extensions.wrappedList import com.tangem.core.ui.message.DialogMessage @@ -46,6 +47,7 @@ internal class OnrampSuccessComponentModel @Inject constructor( private val getUserWalletUseCase: GetUserWalletUseCase, private val analyticsEventHandler: AnalyticsEventHandler, private val messageSender: UiMessageSender, + private val clipboardManager: ClipboardManager, private val router: Router, paramsContainer: ParamsContainer, ) : Model(), OnrampSuccessClickIntents { @@ -65,6 +67,10 @@ internal class OnrampSuccessComponentModel @Inject constructor( urlOpener.openUrl(providerLink) } + override fun onCopyClick(copiedText: String) { + clipboardManager.setText(text = copiedText, isSensitive = false) + } + private fun loadData() { modelScope.launch { getOnrampTransactionUseCase(txId = params.txId) @@ -124,6 +130,7 @@ internal class OnrampSuccessComponentModel @Inject constructor( cryptoCurrency = cryptoCurrency, transaction = transaction, goToProviderClick = ::goToProviderClick, + onCopyClick = ::onCopyClick, ).convert(status) } removeTransactionIfTerminalStatus(