Updated on 2026-08-14
This commit is contained in:
parent
7fcabe68fa
commit
71a0fd5567
6 changed files with 27 additions and 15 deletions
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
},
|
||||
),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,5 +6,5 @@ import kotlinx.serialization.Serializable
|
|||
internal sealed class ConfirmResidencyBottomSheetConfig {
|
||||
|
||||
@Serializable
|
||||
data object SelectCountry : ConfirmResidencyBottomSheetConfig()
|
||||
data class SelectCountry(val onDismiss: () -> Unit) : ConfirmResidencyBottomSheetConfig()
|
||||
}
|
||||
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
@ -58,7 +58,7 @@ internal class DefaultOnrampMainComponent @AssistedInject constructor(
|
|||
country = config.country,
|
||||
onDismiss = {
|
||||
model.bottomSheetNavigation.dismiss()
|
||||
model.handleOnrampAvailable(it.defaultCurrency)
|
||||
model.handleOnrampAvailable()
|
||||
},
|
||||
),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
},
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue