Updated on 2026-08-14

This commit is contained in:
Tangem 2026-07-30 17:20:32 +05:00
parent 430eced63a
commit 3c5a7ca00c
7 changed files with 27 additions and 22 deletions

View file

@ -28,6 +28,7 @@ sealed class SendDestinationComponentParams {
val route: DestinationRoute, val route: DestinationRoute,
val callback: SendDestinationComponent.ModelCallback, val callback: SendDestinationComponent.ModelCallback,
override val isAllowSelfSend: Boolean = false, override val isAllowSelfSend: Boolean = false,
val isInitialRoute: Boolean = false,
) : SendDestinationComponentParams() ) : SendDestinationComponentParams()
data class DestinationBlockParams( data class DestinationBlockParams(

View file

@ -148,6 +148,7 @@ internal class DefaultNFTSendComponent @AssistedInject constructor(
userWalletId = params.userWalletId, userWalletId = params.userWalletId,
cryptoCurrency = model.cryptoCurrency, cryptoCurrency = model.cryptoCurrency,
callback = model, callback = model,
isInitialRoute = true,
), ),
) )

View file

@ -402,9 +402,9 @@ internal class NFTSendConfirmModel @Inject constructor(
is ConfirmUM.Success -> { is ConfirmUM.Success -> {
modelScope.launch { modelScope.launch {
nftSendSuccessTrigger.triggerSuccessNFTSend() nftSendSuccessTrigger.triggerSuccessNFTSend()
}
appRouter.pop() appRouter.pop()
} }
}
is ConfirmUM.Content -> if (confirmUM.isSending) { is ConfirmUM.Content -> if (confirmUM.isSending) {
return@NavigationButton return@NavigationButton
} else { } else {

View file

@ -1,5 +1,6 @@
package com.tangem.features.send.sendnft.success package com.tangem.features.send.sendnft.success
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
@ -82,10 +83,7 @@ internal class NFTSendSuccessComponent @AssistedInject constructor(
@Composable @Composable
override fun Title() { override fun Title() {
AppBarWithBackButtonAndIcon( AppBarWithBackButtonAndIcon(
onBackClick = { onBackClick = model::onBackClick,
model.onBackClick()
router.pop()
},
backIconRes = R.drawable.ic_close_24, backIconRes = R.drawable.ic_close_24,
backgroundColor = TangemTheme.colors.background.tertiary, backgroundColor = TangemTheme.colors.background.tertiary,
modifier = Modifier.height(TangemTheme.dimens.size56), modifier = Modifier.height(TangemTheme.dimens.size56),
@ -95,6 +93,7 @@ internal class NFTSendSuccessComponent @AssistedInject constructor(
@Composable @Composable
override fun Content(modifier: Modifier) { override fun Content(modifier: Modifier) {
val state by model.uiState.collectAsStateWithLifecycle() val state by model.uiState.collectAsStateWithLifecycle()
BackHandler(onBack = model::onBackClick)
NFTSendSuccessContent( NFTSendSuccessContent(
nftSendUM = state, nftSendUM = state,
destinationBlockComponent = sendDestinationBlockComponent, destinationBlockComponent = sendDestinationBlockComponent,
@ -127,7 +126,7 @@ internal class NFTSendSuccessComponent @AssistedInject constructor(
) )
PrimaryButton( PrimaryButton(
text = stringResourceSafe(R.string.common_close), text = stringResourceSafe(R.string.common_close),
onClick = router::pop, onClick = model::onBackClick,
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
) )
} }

View file

@ -5,29 +5,37 @@ import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.decompose.di.ModelScoped import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.decompose.navigation.Router
import com.tangem.core.navigation.share.ShareManager import com.tangem.core.navigation.share.ShareManager
import com.tangem.core.navigation.url.UrlOpener import com.tangem.core.navigation.url.UrlOpener
import com.tangem.features.nft.entity.NFTSendSuccessTrigger
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents.SendScreenSource import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents.SendScreenSource
import com.tangem.features.send.send.ui.state.SendUM
import com.tangem.features.send.sendnft.success.NFTSendSuccessComponent import com.tangem.features.send.sendnft.success.NFTSendSuccessComponent
import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject
@Suppress("LongParameterList")
@Stable @Stable
@ModelScoped @ModelScoped
internal class NFTSendSuccessModel @Inject constructor( internal class NFTSendSuccessModel @Inject constructor(
paramsContainer: ParamsContainer, paramsContainer: ParamsContainer,
override val dispatchers: CoroutineDispatcherProvider, override val dispatchers: CoroutineDispatcherProvider,
private val router: Router,
private val analyticsEventHandler: AnalyticsEventHandler, private val analyticsEventHandler: AnalyticsEventHandler,
private val urlOpener: UrlOpener, private val urlOpener: UrlOpener,
private val shareManager: ShareManager, private val shareManager: ShareManager,
private val nftSendSuccessTrigger: NFTSendSuccessTrigger,
) : Model() { ) : Model() {
private val params: NFTSendSuccessComponent.Params = paramsContainer.require() private val params: NFTSendSuccessComponent.Params = paramsContainer.require()
val uiState = params.nftSendUMFlow val uiState = params.nftSendUMFlow
fun onBackClick() { fun onBackClick() {
modelScope.launch {
nftSendSuccessTrigger.triggerSuccessNFTSend()
router.pop()
analyticsEventHandler.send( analyticsEventHandler.send(
CommonSendAnalyticEvents.CloseButtonClicked( CommonSendAnalyticEvents.CloseButtonClicked(
categoryName = params.analyticsCategoryName, categoryName = params.analyticsCategoryName,
@ -37,6 +45,7 @@ internal class NFTSendSuccessModel @Inject constructor(
), ),
) )
} }
}
fun onExploreClick() { fun onExploreClick() {
analyticsEventHandler.send(CommonSendAnalyticEvents.ExploreButtonClicked(params.analyticsCategoryName)) analyticsEventHandler.send(CommonSendAnalyticEvents.ExploreButtonClicked(params.analyticsCategoryName))
@ -47,8 +56,4 @@ internal class NFTSendSuccessModel @Inject constructor(
analyticsEventHandler.send(CommonSendAnalyticEvents.ShareButtonClicked(params.analyticsCategoryName)) analyticsEventHandler.send(CommonSendAnalyticEvents.ShareButtonClicked(params.analyticsCategoryName))
shareManager.shareText(params.txUrl) shareManager.shareText(params.txUrl)
} }
interface ModelCallback {
fun onResult(sendUM: SendUM)
}
} }

View file

@ -85,7 +85,7 @@ internal class DefaultSendDestinationComponent @AssistedInject constructor(
AppBarWithBackButtonAndIcon( AppBarWithBackButtonAndIcon(
text = params.title.resolveReference(), text = params.title.resolveReference(),
onBackClick = model::onBackClick, onBackClick = model::onBackClick,
backIconRes = if (params.route.isEditMode) { backIconRes = if (params.route.isEditMode || !params.isInitialRoute) {
R.drawable.ic_back_24 R.drawable.ic_back_24
} else { } else {
R.drawable.ic_close_24 R.drawable.ic_close_24

View file

@ -118,7 +118,6 @@ private fun ListItemWithIcon(
) )
Column( Column(
modifier = Modifier modifier = Modifier
.height(36.dp)
.padding(start = 12.dp), .padding(start = 12.dp),
verticalArrangement = Arrangement.SpaceBetween, verticalArrangement = Arrangement.SpaceBetween,
) { ) {
@ -210,7 +209,7 @@ private fun ListItemLoading(modifier: Modifier = Modifier) {
// region preview // region preview
@Preview @Preview
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES, fontScale = 2f)
@Composable @Composable
private fun ListItemWithIconPreview( private fun ListItemWithIconPreview(
@PreviewParameter(ListItemWithIconPreviewProvider::class) config: ListItemWithIconPreviewConfig, @PreviewParameter(ListItemWithIconPreviewProvider::class) config: ListItemWithIconPreviewConfig,