Updated on 2026-08-14

This commit is contained in:
Tangem 2026-07-01 16:00:26 +05:00
parent 86fca5488d
commit 561d1a185f
5 changed files with 26 additions and 41 deletions

View file

@ -14,12 +14,7 @@ import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.ui.DesignFeatureToggles
import com.tangem.core.ui.ds.image.TangemIconUM
import com.tangem.core.ui.ds.message.TangemMessageEffect
import com.tangem.core.ui.ds.message.TangemMessageUM
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.res.generated.icons.Icons
import com.tangem.core.ui.res.generated.icons.ic_heart_28
import com.tangem.core.ui.utils.DateTimeFormatters
import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase
import com.tangem.domain.appcurrency.model.AppCurrency
@ -281,16 +276,7 @@ internal class FeedComponentModel @Inject constructor(
globalState = GlobalFeedState.Loading,
earnListUM = EarnListUM.Loading,
forYouBannerUM = if (forYouFeatureToggles.isForYouEnabled) {
ForYouBannerUM.Content(
TangemMessageUM(
id = ForYouBannerUM.Content::class.java.simpleName,
title = resourceReference(R.string.for_you_title),
subtitle = resourceReference(R.string.for_you_description),
iconUM = TangemIconUM.Icon(Icons.ic_heart_28), // TODO ForYou update icon,
messageEffect = TangemMessageEffect.Magic,
onClick = params.feedClickIntents::openForYou,
),
)
ForYouBannerUM.Content(onClick = params.feedClickIntents::openForYou)
} else {
ForYouBannerUM.Empty
},

View file

@ -4,9 +4,11 @@ import androidx.compose.animation.AnimatedContent
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.togetherWith
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Icon
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Modifier
@ -16,12 +18,13 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.tangem.core.ui.components.SpacerH
import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.core.ui.ds.message.TangemMessage
import com.tangem.core.ui.res.LocalMainBottomSheetColor
import com.tangem.core.ui.res.LocalRedesignEnabled
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.res.TangemThemePreviewRedesign
import com.tangem.core.ui.ds2.messagebanner.TangemMessageBanner
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.res.*
import com.tangem.core.ui.res.generated.icons.Icons
import com.tangem.core.ui.res.generated.icons.ic_pie_chart_20
import com.tangem.core.ui.test.BaseSearchBarTestTags.SEARCH_BAR
import com.tangem.features.feed.impl.R
import com.tangem.features.feed.model.market.list.state.SortByTypeUM
import com.tangem.features.feed.ui.components.FeedSearchBar
import com.tangem.features.feed.ui.feed.components.*
@ -111,10 +114,20 @@ private fun FeedListContent(
SpacerH(16.dp)
if (state.forYouBannerUM is ForYouBannerUM.Content && LocalRedesignEnabled.current) {
// TODO ForYou replace with message banner
TangemMessage(
messageUM = state.forYouBannerUM.banner,
modifier = Modifier.padding(horizontal = 16.dp),
TangemMessageBanner(
title = resourceReference(R.string.for_you_title),
description = resourceReference(R.string.for_you_description),
variant = TangemMessageBanner.Variant.Default,
slotStart = {
Icon(
imageVector = Icons.ic_pie_chart_20,
tint = TangemTheme.colors3.icon.primary,
contentDescription = null,
)
},
modifier = Modifier
.padding(horizontal = 16.dp)
.clickable(onClick = state.forYouBannerUM.onClick),
)
}

View file

@ -7,15 +7,9 @@ import com.tangem.core.ui.components.currency.icon.CurrencyIconState
import com.tangem.core.ui.components.label.entity.LabelLeadingContentUM
import com.tangem.core.ui.components.label.entity.LabelUM
import com.tangem.core.ui.components.marketprice.PriceChangeType
import com.tangem.core.ui.ds.image.TangemIconUM
import com.tangem.core.ui.ds.message.TangemMessageEffect
import com.tangem.core.ui.ds.message.TangemMessageUM
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.res.TangemColorPalette
import com.tangem.core.ui.res.generated.icons.Icons
import com.tangem.core.ui.res.generated.icons.ic_heart_28
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.earn.EarnType
import com.tangem.features.feed.model.market.list.state.SortByTypeUM
@ -295,14 +289,7 @@ internal object FeedListPreviewDataProvider {
private fun createForYouItem(): ForYouBannerUM {
return ForYouBannerUM.Content(
TangemMessageUM(
id = ForYouBannerUM.Content::class.java.simpleName,
title = resourceReference(R.string.for_you_title),
subtitle = resourceReference(R.string.for_you_description),
iconUM = TangemIconUM.Icon(Icons.ic_heart_28), // TODO ForYou update icon,
messageEffect = TangemMessageEffect.Magic,
onClick = {},
),
onClick = {},
)
}
}

View file

@ -2,7 +2,6 @@ package com.tangem.features.feed.ui.feed.state
import androidx.compose.runtime.Immutable
import com.tangem.common.ui.markets.models.MarketsListItemUM
import com.tangem.core.ui.ds.message.TangemMessageUM
import com.tangem.core.ui.extensions.TextReference
import com.tangem.features.feed.model.market.list.state.SortByTypeUM
import com.tangem.features.feed.ui.earn.state.EarnListUM
@ -86,7 +85,7 @@ internal data class SortChartConfigUM(
internal sealed interface ForYouBannerUM {
data class Content(
val banner: TangemMessageUM,
val onClick: () -> Unit,
) : ForYouBannerUM
data object Empty : ForYouBannerUM

View file

@ -154,7 +154,7 @@ internal class FeedComponentModelTest {
val model = createModel(forYouFeatureToggles = toggles)
advanceUntilIdle()
val banner = model.state.value.forYouBannerUM
(banner as? ForYouBannerUM.Content)?.banner?.onClick?.invoke()
(banner as? ForYouBannerUM.Content)?.onClick?.invoke()
// Assert onClick must be wired to feedClickIntents::openForYou, not just any lambda
assertThat(banner).isInstanceOf(ForYouBannerUM.Content::class.java)