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 callback: SendDestinationComponent.ModelCallback,
override val isAllowSelfSend: Boolean = false,
val isInitialRoute: Boolean = false,
) : SendDestinationComponentParams()
data class DestinationBlockParams(

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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