Updated on 2026-08-14

This commit is contained in:
Tangem 2026-04-24 09:59:56 +02:00
parent 3da4771d66
commit 3baed1e815
57 changed files with 1797 additions and 370 deletions

View file

@ -5,9 +5,7 @@ import com.tangem.core.ui.decompose.ComposableBottomSheetComponent
interface AddToPortfolioComponent : ComposableBottomSheetComponent {
data class Params(
val addToPortfolioManager: AddToPortfolioManager,
)
data class Params(val addToPortfolioManager: AddToPortfolioManager)
interface Factory : ComponentFactory<Params, AddToPortfolioComponent>
}

View file

@ -3,6 +3,7 @@ package com.tangem.features.commonfeatures.api.addtoportfolio
import com.tangem.domain.markets.TokenMarketInfo
import com.tangem.domain.markets.TokenMarketParams
import com.tangem.domain.models.account.AccountStatus
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.wallet.UserWallet
import com.tangem.features.commonfeatures.api.portfolioselector.PortfolioFetcher
@ -18,6 +19,7 @@ interface AddToPortfolioManager : AddToPortfolioManagerInternal {
val onDismiss: Channel<Unit>
val onSuccessAdded: Channel<Result>
val onAddedTokenClick: Channel<Result>
val portfolioFetcher: PortfolioFetcher
val state: StateFlow<State>
@ -27,36 +29,34 @@ interface AddToPortfolioManager : AddToPortfolioManagerInternal {
sealed interface State {
data object Loading : State
data class Ready(
val availableToAddData: AvailableToAddData,
) : State {
data class Ready(val availableToAddData: AvailableToAddData) : State {
val isAvailableToAdd: Boolean get() = availableToAddData.isAvailableToAdd
val isSinglePortfolio: Boolean get() = availableToAddData.isSinglePortfolio
}
}
@Serializable
data class AnalyticsParams(
val source: String?,
)
data class AnalyticsParams(val source: String?)
interface Factory {
fun create(scope: CoroutineScope, settings: Settings, analyticsParams: AnalyticsParams): AddToPortfolioManager
}
sealed interface LaunchMode {
data object DirectAdd : LaunchMode
data class ViaUserPortfolio(val rawCurrencyId: CryptoCurrency.RawID) : LaunchMode
}
/**
* Immutable settings
*/
data class Settings(
val shouldSkipTokenActionsScreen: Boolean = false,
val launchMode: LaunchMode = LaunchMode.DirectAdd,
) {
companion object {
val DefaultMarket = Settings(
shouldSkipTokenActionsScreen = false,
)
val ChooseToken = Settings(
shouldSkipTokenActionsScreen = true,
)
val DefaultMarket = Settings(shouldSkipTokenActionsScreen = false)
val ChooseToken = Settings(shouldSkipTokenActionsScreen = true)
}
}
@ -64,10 +64,7 @@ interface AddToPortfolioManager : AddToPortfolioManagerInternal {
* Mutable parameters
* Updates may trigger reload [State]
*/
data class Params(
val networks: List<TokenMarketInfo.Network>,
val token: TokenMarketParams,
)
data class Params(val networks: List<TokenMarketInfo.Network>, val token: TokenMarketParams)
data class Result(
val wallet: UserWallet,
@ -88,4 +85,5 @@ interface AddToPortfolioManagerInternal {
fun onDismiss()
fun onSuccessAdded(result: AddToPortfolioManager.Result)
fun onAddedTokenClick(result: AddToPortfolioManager.Result)
}