From f941f6f1b9e0446e5fa73244ab70e59d6e6a2dee Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 5 Dec 2024 16:41:05 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../data/onramp/DefaultOnrampRepository.kt | 16 +++++++++++----- .../onramp/GetOnrampPaymentMethodsUseCase.kt | 4 ++-- .../onramp/repositories/OnrampRepository.kt | 2 +- .../entity/ProviderListPaymentMethodUM.kt | 1 + .../providers/model/SelectProviderModel.kt | 11 +++++++++-- .../providers/ui/SelectProviderBottomSheet.kt | 7 +++++-- 6 files changed, 29 insertions(+), 12 deletions(-) diff --git a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt index 672b0f07ac..7227a919f3 100644 --- a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt +++ b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt @@ -319,11 +319,11 @@ internal class DefaultOnrampRepository( } } - override suspend fun getPaymentMethods(): List { - val paymentMethods = requireNotNull(paymentMethodsStore.getSyncOrNull(PAYMENT_METHODS_KEY)) { - "Onramp payment methods is absent in storage" - } - return paymentMethodsConverter.convertList(paymentMethods) + override suspend fun getAvailablePaymentMethods(): Set { + val quotes = requireNotNull(quotesStore.getSyncOrNull(QUOTES_KEY)) { "Quotes must not be null" } + return quotes + .filterIsInstance() + .mapTo(hashSetOf(), OnrampQuote.Data::paymentMethod) } override suspend fun saveSelectedPaymentMethod(paymentMethod: OnrampPaymentMethod) { @@ -364,6 +364,12 @@ internal class DefaultOnrampRepository( pairsStore.store(PAIRS_KEY, onrampPairs) } + private suspend fun getPaymentMethods(): List { + return requireNotNull(paymentMethodsStore.getSyncOrNull(PAYMENT_METHODS_KEY)) { + "Onramp payment methods is absent in storage" + }.let(paymentMethodsConverter::convertList) + } + private fun createOnrampTransaction( txId: String, quote: OnrampProviderWithQuote.Data, diff --git a/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampPaymentMethodsUseCase.kt b/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampPaymentMethodsUseCase.kt index 898bf3be19..31b15f8c92 100644 --- a/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampPaymentMethodsUseCase.kt +++ b/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampPaymentMethodsUseCase.kt @@ -6,7 +6,7 @@ import com.tangem.domain.onramp.repositories.OnrampRepository class GetOnrampPaymentMethodsUseCase(private val repository: OnrampRepository) { - suspend operator fun invoke(): Either> { - return Either.catch { repository.getPaymentMethods() } + suspend operator fun invoke(): Either> { + return Either.catch { repository.getAvailablePaymentMethods() } } } \ No newline at end of file diff --git a/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampRepository.kt b/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampRepository.kt index 313e735b18..7ead04a301 100644 --- a/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampRepository.kt +++ b/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampRepository.kt @@ -30,7 +30,7 @@ interface OnrampRepository { suspend fun saveDefaultCountry(country: OnrampCountry) suspend fun getDefaultCountrySync(): OnrampCountry? fun getDefaultCountry(): Flow - suspend fun getPaymentMethods(): List + suspend fun getAvailablePaymentMethods(): Set suspend fun saveSelectedPaymentMethod(paymentMethod: OnrampPaymentMethod) fun getSelectedPaymentMethod(): Flow fun getQuotes(): Flow> diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/entity/ProviderListPaymentMethodUM.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/entity/ProviderListPaymentMethodUM.kt index ab8e11e89c..08d293987e 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/entity/ProviderListPaymentMethodUM.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/entity/ProviderListPaymentMethodUM.kt @@ -4,5 +4,6 @@ internal data class ProviderListPaymentMethodUM( val id: String, val name: String, val imageUrl: String, + val enabled: Boolean, val onClick: () -> Unit, ) \ No newline at end of file diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/model/SelectProviderModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/model/SelectProviderModel.kt index df9a610646..30f11109d9 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/model/SelectProviderModel.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/model/SelectProviderModel.kt @@ -70,7 +70,13 @@ internal class SelectProviderModel @Inject constructor( modelScope.launch { getOnrampProviderWithQuoteUseCase.invoke(paymentMethod) .onRight { quotes -> - _state.update { state -> state.copy(providers = quotes.toProvidersListItems()) } + val hasQuotesData = quotes.any { it is OnrampProviderWithQuote.Data } + _state.update { state -> + state.copy( + paymentMethod = state.paymentMethod.copy(enabled = hasQuotesData), + providers = quotes.toProvidersListItems(), + ) + } } .onLeft { Timber.e(it) } } @@ -82,6 +88,7 @@ internal class SelectProviderModel @Inject constructor( id = params.selectedPaymentMethod.id, name = params.selectedPaymentMethod.name, imageUrl = params.selectedPaymentMethod.imageUrl, + enabled = false, onClick = ::openPaymentMethods, ), providers = emptyList().toImmutableList(), @@ -101,7 +108,7 @@ internal class SelectProviderModel @Inject constructor( } } - private fun List.toPaymentUMList(): List = map { method -> + private fun Set.toPaymentUMList(): List = map { method -> PaymentMethodUM( id = method.id, imageUrl = method.imageUrl, diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/ui/SelectProviderBottomSheet.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/ui/SelectProviderBottomSheet.kt index 952221d9c2..53aaec57c9 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/ui/SelectProviderBottomSheet.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/ui/SelectProviderBottomSheet.kt @@ -1,9 +1,12 @@ package com.tangem.features.onramp.providers.ui import android.content.res.Configuration -import androidx.compose.foundation.* +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -82,7 +85,7 @@ private fun PaymentMethodBlock(state: ProviderListPaymentMethodUM, modifier: Mod color = TangemTheme.colors.stroke.secondary, shape = RoundedCornerShape(TangemTheme.dimens.radius16), ) - .clickable(onClick = state.onClick) + .clickable(enabled = state.enabled, onClick = state.onClick) .padding(all = TangemTheme.dimens.spacing12), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing12),