Updated on 2026-08-14

This commit is contained in:
Tangem 2025-06-02 14:02:48 +05:00
parent e736f86583
commit 82dcb31881
3 changed files with 45 additions and 0 deletions

View file

@ -19,6 +19,27 @@ import com.tangem.core.ui.message.SnackbarMessage.Duration
@Immutable
sealed interface EventMessage : UiMessage
data class ToastMessage(
val message: TextReference,
val duration: Duration = ToastMessage.Duration.Short,
) : EventMessage {
/**
* The duration of the snackbar.
* */
enum class Duration {
/**
* Shows the toast for a short period of time.
* */
Short,
/**
* Shows the toast for a long period of time.
* */
Long,
}
}
/**
* Shows a snackbar.
*

View file

@ -1,6 +1,7 @@
package com.tangem.core.ui.message
import android.content.Context
import android.widget.Toast
import androidx.compose.material3.SnackbarDuration
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.SnackbarResult
@ -24,6 +25,7 @@ fun EventMessageEffect(
onShowSnackbar: suspend (SnackbarMessage, Context) -> Unit = { message, context ->
showSnackbar(snackbarHostState, message, context)
},
onShowToast: (ToastMessage, Context) -> Unit = { message, context -> showToast(message, context) },
) {
val messageEvent by messageHandler.collectAsState()
val context = LocalContext.current
@ -46,6 +48,9 @@ fun EventMessageEffect(
is BottomSheetMessageV2 -> {
bottomSheetMessageV2 = message
}
is ToastMessage -> {
onShowToast(message, context)
}
}
}
@ -162,4 +167,15 @@ private suspend fun showSnackbar(snackbarHostState: SnackbarHostState, message:
SnackbarResult.Dismissed -> message.onDismissRequest()
SnackbarResult.ActionPerformed -> message.action?.invoke()
}
}
private fun showToast(message: ToastMessage, context: Context) {
Toast.makeText(
/* context = */ context,
/* text = */ message.message.resolveReference(context.resources),
/* duration = */ when (message.duration) {
ToastMessage.Duration.Short -> Toast.LENGTH_SHORT
ToastMessage.Duration.Long -> Toast.LENGTH_LONG
},
).show()
}

View file

@ -9,6 +9,9 @@ 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.decompose.ui.UiMessageSender
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.message.ToastMessage
import com.tangem.domain.models.network.Network
import com.tangem.domain.walletconnect.model.WcPairRequest
import com.tangem.domain.walletconnect.model.WcSessionApprove
@ -42,6 +45,7 @@ internal interface WcPairComponentCallback :
@ModelScoped
internal class WcPairModel @Inject constructor(
private val router: Router,
private val messageSender: UiMessageSender,
override val dispatchers: CoroutineDispatcherProvider,
wcPairUseCaseFactory: WcPairUseCase.Factory,
getWalletsUseCase: GetWalletsUseCase,
@ -87,6 +91,10 @@ internal class WcPairModel @Inject constructor(
router.pop()
}
is WcPairState.Error -> {
appInfoUiState.transformerUpdate(
WcConnectButtonProgressTransformer(showProgress = false),
)
messageSender.send(ToastMessage(message = stringReference(pairState.error.message)))
Timber.e(pairState.error)
}
is WcPairState.Loading -> appInfoUiState.update { createLoadingState() }