Updated on 2026-08-14

This commit is contained in:
Tangem 2024-12-18 22:56:29 +05:00
parent 7fcabe68fa
commit 71a0fd5567
6 changed files with 27 additions and 15 deletions

View file

@ -10,7 +10,7 @@ internal interface ConfirmResidencyComponent : ComposableBottomSheetComponent {
data class Params(
val cryptoCurrency: CryptoCurrency,
val country: OnrampCountry,
val onDismiss: (OnrampCountry) -> Unit,
val onDismiss: () -> Unit,
)
interface Factory : ComponentFactory<Params, ConfirmResidencyComponent>

View file

@ -66,11 +66,17 @@ internal class DefaultConfirmResidencyComponent @AssistedInject constructor(
config: ConfirmResidencyBottomSheetConfig,
componentContext: ComponentContext,
): ComposableBottomSheetComponent = when (config) {
ConfirmResidencyBottomSheetConfig.SelectCountry -> selectCountryComponentFactory.create(
is ConfirmResidencyBottomSheetConfig.SelectCountry -> selectCountryComponentFactory.create(
context = childByContext(componentContext),
params = SelectCountryComponent.Params(
cryptoCurrency = params.cryptoCurrency,
onDismiss = model.bottomSheetNavigation::dismiss,
onDismiss = {
// Dismiss country select sheet
model.bottomSheetNavigation.dismiss()
// Dismiss confirm residency sheet
config.onDismiss()
},
),
)
}

View file

@ -6,5 +6,5 @@ import kotlinx.serialization.Serializable
internal sealed class ConfirmResidencyBottomSheetConfig {
@Serializable
data object SelectCountry : ConfirmResidencyBottomSheetConfig()
data class SelectCountry(val onDismiss: () -> Unit) : ConfirmResidencyBottomSheetConfig()
}

View file

@ -10,6 +10,7 @@ import com.tangem.core.decompose.navigation.Router
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.domain.onramp.OnrampSaveDefaultCountryUseCase
import com.tangem.domain.onramp.analytics.OnrampAnalyticsEvent
import com.tangem.domain.onramp.model.OnrampCountry
import com.tangem.features.onramp.confirmresidency.ConfirmResidencyComponent
import com.tangem.features.onramp.confirmresidency.entity.ConfirmResidencyBottomSheetConfig
import com.tangem.features.onramp.confirmresidency.entity.ConfirmResidencyUM
@ -35,7 +36,7 @@ internal class ConfirmResidencyModel @Inject constructor(
country = params.country.name,
countryFlagUrl = params.country.image,
isCountrySupported = params.country.onrampAvailable,
primaryButtonConfig = getPrimaryButtonConfig(),
primaryButtonConfig = getPrimaryButtonConfig(params.country),
secondaryButtonConfig = ConfirmResidencyUM.ActionButtonConfig(
onClick = ::onChangeClick,
text = resourceReference(R.string.common_change),
@ -47,11 +48,12 @@ internal class ConfirmResidencyModel @Inject constructor(
analyticsEventHandler.send(OnrampAnalyticsEvent.ResidenceConfirmScreenOpened(params.country.name))
}
private fun getPrimaryButtonConfig() = if (params.country.onrampAvailable) {
private fun getPrimaryButtonConfig(country: OnrampCountry) = if (country.onrampAvailable) {
ConfirmResidencyUM.ActionButtonConfig(
onClick = {
analyticsEventHandler.send(OnrampAnalyticsEvent.OnResidenceConfirm(params.country.name))
modelScope.launch { saveDefaultCountryUseCase.invoke(params.country) }
analyticsEventHandler.send(OnrampAnalyticsEvent.OnResidenceConfirm(country.name))
modelScope.launch { saveDefaultCountryUseCase.invoke(country) }
params.onDismiss()
},
text = resourceReference(R.string.common_confirm),
)
@ -67,6 +69,6 @@ internal class ConfirmResidencyModel @Inject constructor(
private fun onChangeClick() {
analyticsEventHandler.send(OnrampAnalyticsEvent.OnResidenceChange)
bottomSheetNavigation.activate(ConfirmResidencyBottomSheetConfig.SelectCountry)
bottomSheetNavigation.activate(ConfirmResidencyBottomSheetConfig.SelectCountry(params.onDismiss))
}
}

View file

@ -58,7 +58,7 @@ internal class DefaultOnrampMainComponent @AssistedInject constructor(
country = config.country,
onDismiss = {
model.bottomSheetNavigation.dismiss()
model.handleOnrampAvailable(it.defaultCurrency)
model.handleOnrampAvailable()
},
),
)

View file

@ -19,7 +19,6 @@ import com.tangem.domain.demo.IsDemoCardUseCase
import com.tangem.domain.onramp.*
import com.tangem.domain.onramp.analytics.OnrampAnalyticsEvent
import com.tangem.domain.onramp.model.OnrampAvailability
import com.tangem.domain.onramp.model.OnrampCurrency
import com.tangem.domain.onramp.model.OnrampProviderWithQuote
import com.tangem.domain.onramp.model.OnrampQuote
import com.tangem.domain.onramp.model.error.OnrampError
@ -105,8 +104,7 @@ internal class OnrampMainComponentModel @Inject constructor(
)
}
fun handleOnrampAvailable(currency: OnrampCurrency) {
_state.update { stateFactory.getReadyState(currency) }
fun handleOnrampAvailable() {
subscribeToCountryAndCurrencyUpdates()
subscribeToQuotesUpdate()
}
@ -125,7 +123,7 @@ internal class OnrampMainComponentModel @Inject constructor(
private fun handleOnrampAvailability(availability: OnrampAvailability) {
when (availability) {
is OnrampAvailability.Available -> handleOnrampAvailable(availability.currency)
is OnrampAvailability.Available -> handleOnrampAvailable()
is OnrampAvailability.ConfirmResidency,
is OnrampAvailability.NotSupported,
-> bottomSheetNavigation.activate(OnrampMainBottomSheetConfig.ConfirmResidency(availability.country))
@ -139,7 +137,13 @@ internal class OnrampMainComponentModel @Inject constructor(
ifLeft = ::handleOnrampError,
ifRight = { country ->
if (country == null) return@onEach
_state.update { amountStateFactory.getUpdatedCurrencyState(country.defaultCurrency) }
_state.update {
if (it is OnrampMainComponentUM.InitialLoading) {
stateFactory.getReadyState(country.defaultCurrency)
} else {
amountStateFactory.getUpdatedCurrencyState(country.defaultCurrency)
}
}
updatePairsAndQuotes()
},
)