Updated on 2026-08-14

This commit is contained in:
Tangem 2024-12-05 16:41:05 +05:00
parent a9ed9d7776
commit f941f6f1b9
6 changed files with 29 additions and 12 deletions

View file

@ -319,11 +319,11 @@ internal class DefaultOnrampRepository(
}
}
override suspend fun getPaymentMethods(): List<OnrampPaymentMethod> {
val paymentMethods = requireNotNull(paymentMethodsStore.getSyncOrNull(PAYMENT_METHODS_KEY)) {
"Onramp payment methods is absent in storage"
}
return paymentMethodsConverter.convertList(paymentMethods)
override suspend fun getAvailablePaymentMethods(): Set<OnrampPaymentMethod> {
val quotes = requireNotNull(quotesStore.getSyncOrNull(QUOTES_KEY)) { "Quotes must not be null" }
return quotes
.filterIsInstance<OnrampQuote.Data>()
.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<OnrampPaymentMethod> {
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,

View file

@ -6,7 +6,7 @@ import com.tangem.domain.onramp.repositories.OnrampRepository
class GetOnrampPaymentMethodsUseCase(private val repository: OnrampRepository) {
suspend operator fun invoke(): Either<Throwable, List<OnrampPaymentMethod>> {
return Either.catch { repository.getPaymentMethods() }
suspend operator fun invoke(): Either<Throwable, Set<OnrampPaymentMethod>> {
return Either.catch { repository.getAvailablePaymentMethods() }
}
}

View file

@ -30,7 +30,7 @@ interface OnrampRepository {
suspend fun saveDefaultCountry(country: OnrampCountry)
suspend fun getDefaultCountrySync(): OnrampCountry?
fun getDefaultCountry(): Flow<OnrampCountry?>
suspend fun getPaymentMethods(): List<OnrampPaymentMethod>
suspend fun getAvailablePaymentMethods(): Set<OnrampPaymentMethod>
suspend fun saveSelectedPaymentMethod(paymentMethod: OnrampPaymentMethod)
fun getSelectedPaymentMethod(): Flow<OnrampPaymentMethod>
fun getQuotes(): Flow<List<OnrampQuote>>

View file

@ -4,5 +4,6 @@ internal data class ProviderListPaymentMethodUM(
val id: String,
val name: String,
val imageUrl: String,
val enabled: Boolean,
val onClick: () -> Unit,
)

View file

@ -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<ProviderListItemUM>().toImmutableList(),
@ -101,7 +108,7 @@ internal class SelectProviderModel @Inject constructor(
}
}
private fun List<OnrampPaymentMethod>.toPaymentUMList(): List<PaymentMethodUM> = map { method ->
private fun Set<OnrampPaymentMethod>.toPaymentUMList(): List<PaymentMethodUM> = map { method ->
PaymentMethodUM(
id = method.id,
imageUrl = method.imageUrl,

View file

@ -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),