Updated on 2026-08-14
This commit is contained in:
parent
a9ed9d7776
commit
f941f6f1b9
6 changed files with 29 additions and 12 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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() }
|
||||
}
|
||||
}
|
||||
|
|
@ -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>>
|
||||
|
|
|
|||
|
|
@ -4,5 +4,6 @@ internal data class ProviderListPaymentMethodUM(
|
|||
val id: String,
|
||||
val name: String,
|
||||
val imageUrl: String,
|
||||
val enabled: Boolean,
|
||||
val onClick: () -> Unit,
|
||||
)
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue