diff --git a/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampOffer.kt b/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampOffer.kt index 06bf7442f2..ff2085d060 100644 --- a/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampOffer.kt +++ b/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampOffer.kt @@ -5,6 +5,7 @@ import java.math.BigDecimal data class OnrampOffersBlock( val category: OnrampOfferCategory, val offers: List, + val hasMoreOffers: Boolean, ) data class OnrampOffer( diff --git a/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampOffersUseCase.kt b/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampOffersUseCase.kt index 1055eb1b8e..ac0f2d94b7 100644 --- a/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampOffersUseCase.kt +++ b/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampOffersUseCase.kt @@ -63,6 +63,7 @@ class GetOnrampOffersUseCase( recentOffer = recentOffer, bestRateOffer = bestRateOffer, fastestOffer = fastestOffer, + allOffers = offers, ) } @@ -142,13 +143,20 @@ class GetOnrampOffersUseCase( recentOffer: OnrampOffer?, bestRateOffer: OnrampOffer?, fastestOffer: OnrampOffer?, + allOffers: List, ): List { + val isSingleOffer = allOffers.size == 1 + val recommendedOffers = buildRecommendedOffers( recentOffer = recentOffer, bestRateOffer = bestRateOffer, fastestOffer = fastestOffer, + isSingleOffer = isSingleOffer, ) + val shownOffersCount = (if (recentOffer != null) 1 else 0) + recommendedOffers.size + val hasMoreOffers = allOffers.size > shownOffersCount + return buildList { if (recentOffer != null) { add( @@ -160,10 +168,12 @@ class GetOnrampOffersUseCase( recentOffer, bestRateOffer, fastestOffer, + isSingleOffer, ), rateDif = if (bestRateOffer != null) recentOffer.rateDif else null, ), ), + hasMoreOffers = false, ), ) } @@ -173,6 +183,7 @@ class GetOnrampOffersUseCase( OnrampOffersBlock( category = OnrampOfferCategory.Recommended, offers = recommendedOffers, + hasMoreOffers = hasMoreOffers, ), ) } @@ -183,7 +194,11 @@ class GetOnrampOffersUseCase( recentOffer: OnrampOffer, bestRateOffer: OnrampOffer?, fastestOffer: OnrampOffer?, + isSingleOffer: Boolean, ): OnrampOfferAdvantages { + if (isSingleOffer) { + return OnrampOfferAdvantages.Default + } if (isSameOffer(recentOffer, bestRateOffer) && isSameOffer(recentOffer, fastestOffer)) { return OnrampOfferAdvantages.GreatRate } @@ -200,13 +215,18 @@ class GetOnrampOffersUseCase( recentOffer: OnrampOffer?, bestRateOffer: OnrampOffer?, fastestOffer: OnrampOffer?, + isSingleOffer: Boolean, ): List { return buildList { if (isSameOffer(bestRateOffer, fastestOffer)) { if (bestRateOffer != null && !isSameOffer(bestRateOffer, recentOffer)) { add( bestRateOffer.copy( - advantages = OnrampOfferAdvantages.GreatRate, + advantages = if (isSingleOffer) { + OnrampOfferAdvantages.Default + } else { + OnrampOfferAdvantages.GreatRate + }, rateDif = null, ), ) @@ -215,7 +235,11 @@ class GetOnrampOffersUseCase( if (bestRateOffer != null && !isSameOffer(bestRateOffer, recentOffer)) { add( bestRateOffer.copy( - advantages = OnrampOfferAdvantages.GreatRate, + advantages = if (isSingleOffer) { + OnrampOfferAdvantages.Default + } else { + OnrampOfferAdvantages.GreatRate + }, rateDif = null, ), ) @@ -226,7 +250,11 @@ class GetOnrampOffersUseCase( ) { add( fastestOffer.copy( - advantages = OnrampOfferAdvantages.Fastest, + advantages = if (isSingleOffer) { + OnrampOfferAdvantages.Default + } else { + OnrampOfferAdvantages.Fastest + }, rateDif = if (bestRateOffer != null) fastestOffer.rateDif else null, ), ) diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/entity/OnrampOfferBlockUM.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/entity/OnrampOfferBlockUM.kt index f731c6e29c..aecbc43ee9 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/entity/OnrampOfferBlockUM.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/entity/OnrampOfferBlockUM.kt @@ -16,7 +16,7 @@ internal sealed interface OnrampOffersBlockUM { data class Content( val recentOffer: OnrampOfferUM?, val recommended: ImmutableList, - val onrampAllOffersButtonConfig: OnrampAllOffersButtonConfig, + val onrampAllOffersButtonConfig: OnrampAllOffersButtonConfig?, ) : OnrampOffersBlockUM } diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/entity/factory/OnrampOffersStateFactory.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/entity/factory/OnrampOffersStateFactory.kt index 92adb96dbd..67f09bf351 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/entity/factory/OnrampOffersStateFactory.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/entity/factory/OnrampOffersStateFactory.kt @@ -76,10 +76,14 @@ internal class OnrampOffersStateFactory( return OnrampOffersBlockUM.Content( recentOffer = allOffersUM.firstOrNull { it.category == OnrampOfferCategoryUM.RecentlyUsed }, recommended = allOffersUM.filter { it.category == OnrampOfferCategoryUM.Recommended }.toPersistentList(), - onrampAllOffersButtonConfig = OnrampAllOffersButtonConfig( - title = TextReference.Res(R.string.onramp_all_offers_button_title), - onClick = { onrampIntents.openProviders() }, - ), + onrampAllOffersButtonConfig = if (offersBlocks.any { it.hasMoreOffers }) { + OnrampAllOffersButtonConfig( + title = TextReference.Res(R.string.onramp_all_offers_button_title), + onClick = { onrampIntents.openProviders() }, + ) + } else { + null + }, ) } diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/ui/OnrampOffersContent.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/ui/OnrampOffersContent.kt index eeb6351799..a99a11e219 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/ui/OnrampOffersContent.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/mainv2/ui/OnrampOffersContent.kt @@ -79,12 +79,14 @@ internal fun OnrampOffersContent(state: OnrampOffersBlockUM) { } } - SpacerH(12.dp) - SecondaryButton( - modifier = Modifier.fillMaxWidth(), - text = state.onrampAllOffersButtonConfig.title.resolveReference(), - onClick = state.onrampAllOffersButtonConfig.onClick, - ) + state.onrampAllOffersButtonConfig?.let { + SpacerH(12.dp) + SecondaryButton( + modifier = Modifier.fillMaxWidth(), + text = it.title.resolveReference(), + onClick = it.onClick, + ) + } } } OnrampOffersBlockUM.Loading -> {