diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/ConfirmResidencyComponent.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/ConfirmResidencyComponent.kt index feb6cd9c68..7dda243f37 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/ConfirmResidencyComponent.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/ConfirmResidencyComponent.kt @@ -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 diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/DefaultConfirmResidencyComponent.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/DefaultConfirmResidencyComponent.kt index 62dd39d0dd..0a88231cc3 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/DefaultConfirmResidencyComponent.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/DefaultConfirmResidencyComponent.kt @@ -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() + }, ), ) } diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/entity/ConfirmResidencyBottomSheetConfig.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/entity/ConfirmResidencyBottomSheetConfig.kt index baacb6b92a..0900dfebc2 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/entity/ConfirmResidencyBottomSheetConfig.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/entity/ConfirmResidencyBottomSheetConfig.kt @@ -6,5 +6,5 @@ import kotlinx.serialization.Serializable internal sealed class ConfirmResidencyBottomSheetConfig { @Serializable - data object SelectCountry : ConfirmResidencyBottomSheetConfig() + data class SelectCountry(val onDismiss: () -> Unit) : ConfirmResidencyBottomSheetConfig() } \ No newline at end of file diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/model/ConfirmResidencyModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/model/ConfirmResidencyModel.kt index 5237af3c2b..f622253ea1 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/model/ConfirmResidencyModel.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/confirmresidency/model/ConfirmResidencyModel.kt @@ -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)) } } \ No newline at end of file diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/DefaultOnrampMainComponent.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/DefaultOnrampMainComponent.kt index 739d1a4d6e..5164c91d5b 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/DefaultOnrampMainComponent.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/DefaultOnrampMainComponent.kt @@ -58,7 +58,7 @@ internal class DefaultOnrampMainComponent @AssistedInject constructor( country = config.country, onDismiss = { model.bottomSheetNavigation.dismiss() - model.handleOnrampAvailable(it.defaultCurrency) + model.handleOnrampAvailable() }, ), ) diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt index ef27622623..865ec89ec6 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt @@ -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() }, )