Updated on 2026-08-14

This commit is contained in:
Tangem 2026-01-15 12:01:25 +05:00
parent 2a5fca2b17
commit 417b2f0906
26 changed files with 313 additions and 32 deletions

View file

@ -77,6 +77,7 @@ sealed class AnalyticsParam {
data object Backup : ScreensSources("Backup")
data object Onboarding : ScreensSources("Onboarding")
data object LongTap : ScreensSources("Long Tap")
data object Market : ScreensSources("Market")
data object Markets : ScreensSources("Markets")
data object MarketPulse : ScreensSources("Market Pulse")
data object TangemPay : ScreensSources("Tangem Pay")
@ -87,6 +88,9 @@ sealed class AnalyticsParam {
data object CreateWalletIntro : ScreensSources("Create Wallet Intro")
data object AddNewWallet : ScreensSources("Add New Wallet")
data object CreateWallet : ScreensSources("Create Wallet")
data object NewsList : ScreensSources("News List")
data object NewsLink : ScreensSources("News Link")
data object NewsPage : ScreensSources("News Page")
}
sealed class TxSentFrom(val value: String) {

View file

@ -3,6 +3,8 @@ package com.tangem.datasource.di
import com.tangem.datasource.local.datastore.RuntimeSharedStore
import com.tangem.datasource.local.news.details.DefaultNewsDetailsStore
import com.tangem.datasource.local.news.details.NewsDetailsStore
import com.tangem.datasource.local.news.liked.DefaultNewsLikedStore
import com.tangem.datasource.local.news.liked.NewsLikedStore
import com.tangem.datasource.local.news.trending.DefaultTrendingNewsStore
import com.tangem.datasource.local.news.trending.TrendingNewsStore
import com.tangem.datasource.local.news.viewed.DefaultNewsViewedStore
@ -34,4 +36,10 @@ internal object NewsStoreModule {
fun provideNewsViewedStore(): NewsViewedStore {
return DefaultNewsViewedStore(store = RuntimeSharedStore())
}
@Provides
@Singleton
fun provideNewsLikedStore(): NewsLikedStore {
return DefaultNewsLikedStore(store = RuntimeSharedStore())
}
}

View file

@ -0,0 +1,32 @@
package com.tangem.datasource.local.news.liked
import com.tangem.datasource.local.datastore.RuntimeSharedStore
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.onStart
private typealias NewsLikedCache = Map<Int, Boolean>
internal class DefaultNewsLikedStore(
private val store: RuntimeSharedStore<NewsLikedCache>,
) : NewsLikedStore {
override fun getAll(): Flow<Map<Int, Boolean>> {
return store.get().onStart { emit(emptyMap()) }
}
override suspend fun getSync(): Map<Int, Boolean> {
return store.getSyncOrNull().orEmpty()
}
override suspend fun updateLiked(articleIds: Collection<Int>, liked: Boolean) {
if (articleIds.isEmpty()) return
store.update(emptyMap()) { current ->
val updated = current.toMutableMap()
articleIds.forEach { id ->
updated[id] = liked
}
updated
}
}
}

View file

@ -0,0 +1,24 @@
package com.tangem.datasource.local.news.liked
import kotlinx.coroutines.flow.Flow
/**
* Store for news liked flags (runtime only).
*/
interface NewsLikedStore {
/**
* Observes all liked flags.
*/
fun getAll(): Flow<Map<Int, Boolean>>
/**
* Gets liked flags synchronously (returns empty map if no data).
*/
suspend fun getSync(): Map<Int, Boolean>
/**
* Updates liked flags for provided article ids.
*/
suspend fun updateLiked(articleIds: Collection<Int>, liked: Boolean)
}

View file

@ -170,6 +170,8 @@ fun PrimaryButtonIconStart(
modifier: Modifier = Modifier,
showProgress: Boolean = false,
enabled: Boolean = true,
size: TangemButtonSize = TangemButtonSize.Default,
shape: Shape = size.toShape(),
) {
TangemButton(
modifier = modifier,
@ -180,6 +182,8 @@ fun PrimaryButtonIconStart(
enabled = enabled,
showProgress = showProgress,
textStyle = TangemTheme.typography.subtitle1,
size = size,
shape = shape,
)
}
// endregion PrimaryButton