Updated on 2026-08-14
This commit is contained in:
parent
714eb51ce5
commit
d5ca4e59b5
5 changed files with 49 additions and 14 deletions
|
|
@ -5,6 +5,7 @@ import java.math.BigDecimal
|
|||
data class OnrampOffersBlock(
|
||||
val category: OnrampOfferCategory,
|
||||
val offers: List<OnrampOffer>,
|
||||
val hasMoreOffers: Boolean,
|
||||
)
|
||||
|
||||
data class OnrampOffer(
|
||||
|
|
|
|||
|
|
@ -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<OnrampOffer>,
|
||||
): List<OnrampOffersBlock> {
|
||||
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<OnrampOffer> {
|
||||
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,
|
||||
),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ internal sealed interface OnrampOffersBlockUM {
|
|||
data class Content(
|
||||
val recentOffer: OnrampOfferUM?,
|
||||
val recommended: ImmutableList<OnrampOfferUM>,
|
||||
val onrampAllOffersButtonConfig: OnrampAllOffersButtonConfig,
|
||||
val onrampAllOffersButtonConfig: OnrampAllOffersButtonConfig?,
|
||||
) : OnrampOffersBlockUM
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 -> {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue