Updated on 2026-08-14
This commit is contained in:
parent
e736f86583
commit
82dcb31881
3 changed files with 45 additions and 0 deletions
|
|
@ -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.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
|
|
@ -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() }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue