Updated on 2026-08-14
This commit is contained in:
parent
8a9547827b
commit
cb5f018d2a
11 changed files with 91 additions and 54 deletions
|
|
@ -29,6 +29,7 @@ internal object CoinsResponseConverter : Converter<CoinsResponse, List<Token>> {
|
|||
blockchain = blockchain,
|
||||
address = network.contractAddress,
|
||||
iconUrl = getIconUrl(network.networkId, value.imageHost),
|
||||
decimalCount = network.decimalCount?.toInt(),
|
||||
)
|
||||
},
|
||||
)
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ internal object TestnetTokensConfigConverter : Converter<TestnetTokensConfig, Li
|
|||
blockchain = blockchain,
|
||||
address = network.address,
|
||||
iconUrl = getIconUrl(id = network.id, imageHost = null),
|
||||
decimalCount = network.decimalCount,
|
||||
)
|
||||
}.orEmpty(),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
package com.tangem.tap.features.tokens.di
|
||||
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.datasource.local.testnet.TestnetTokensStorage
|
||||
import com.tangem.tap.features.tokens.data.DefaultTokensListRepository
|
||||
import com.tangem.tap.features.tokens.domain.DefaultTokensListInteractor
|
||||
import com.tangem.tap.features.tokens.domain.TokensListInteractor
|
||||
import com.tangem.tap.proxy.AppStateHolder
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.components.ViewModelComponent
|
||||
import dagger.hilt.android.scopes.ViewModelScoped
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
@Module
|
||||
@InstallIn(ViewModelComponent::class)
|
||||
internal object TokensListInteractorModule {
|
||||
|
||||
@Provides
|
||||
@ViewModelScoped
|
||||
fun provideTokensListInteractor(
|
||||
tangemTechApi: TangemTechApi,
|
||||
dispatchers: CoroutineDispatcherProvider,
|
||||
reduxStateHolder: AppStateHolder,
|
||||
testnetTokensStorage: TestnetTokensStorage,
|
||||
): TokensListInteractor {
|
||||
return DefaultTokensListInteractor(
|
||||
repository = DefaultTokensListRepository(
|
||||
tangemTechApi = tangemTechApi,
|
||||
dispatchers = dispatchers,
|
||||
reduxStateHolder = reduxStateHolder,
|
||||
testnetTokensStorage = testnetTokensStorage,
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
package com.tangem.tap.features.tokens.di
|
||||
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.datasource.local.testnet.TestnetTokensStorage
|
||||
import com.tangem.tap.features.tokens.data.DefaultTokensListRepository
|
||||
import com.tangem.tap.features.tokens.domain.TokensListRepository
|
||||
import com.tangem.tap.proxy.AppStateHolder
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import javax.inject.Singleton
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
@Module
|
||||
@InstallIn(SingletonComponent::class)
|
||||
internal object TokensListRepositoryModule {
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun providesTokensListRepository(
|
||||
tangemTechApi: TangemTechApi,
|
||||
dispatchers: CoroutineDispatcherProvider,
|
||||
reduxStateHolder: AppStateHolder,
|
||||
testnetTokensStorage: TestnetTokensStorage,
|
||||
): TokensListRepository {
|
||||
return DefaultTokensListRepository(
|
||||
tangemTechApi = tangemTechApi,
|
||||
dispatchers = dispatchers,
|
||||
reduxStateHolder = reduxStateHolder,
|
||||
testnetTokensStorage = testnetTokensStorage,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package com.tangem.tap.features.tokens.di
|
||||
|
||||
import com.tangem.tap.features.tokens.presentation.router.AddTokensRouter
|
||||
import com.tangem.tap.features.tokens.presentation.router.DefaultAddTokensRouter
|
||||
import com.tangem.tap.features.tokens.presentation.router.DefaultTokensListRouter
|
||||
import com.tangem.tap.features.tokens.presentation.router.TokensListRouter
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
|
|
@ -13,9 +13,9 @@ import dagger.hilt.android.scopes.ViewModelScoped
|
|||
*/
|
||||
@Module
|
||||
@InstallIn(ViewModelComponent::class)
|
||||
internal object AddTokensRouterModule {
|
||||
internal object TokensListRouterModule {
|
||||
|
||||
@Provides
|
||||
@ViewModelScoped
|
||||
fun provideAddTokensRouter(): AddTokensRouter = DefaultAddTokensRouter()
|
||||
fun provideTokensListRouter(): TokensListRouter = DefaultTokensListRouter()
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package com.tangem.tap.features.tokens.domain
|
||||
|
||||
import androidx.paging.PagingData
|
||||
import com.tangem.tap.features.tokens.domain.models.Token
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
/**
|
||||
* Default implementation of tokens list interactor
|
||||
*
|
||||
* @property repository repository of tokens list feature
|
||||
*/
|
||||
internal class DefaultTokensListInteractor(private val repository: TokensListRepository) : TokensListInteractor {
|
||||
|
||||
override fun getTokensList(searchText: String): Flow<PagingData<Token>> {
|
||||
return repository.getAvailableTokens(searchText = searchText.ifBlank(defaultValue = { null }))
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package com.tangem.tap.features.tokens.domain
|
||||
|
||||
import androidx.paging.PagingData
|
||||
import com.tangem.tap.features.tokens.domain.models.Token
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
/**
|
||||
* Interactor of tokens list feature
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
internal interface TokensListInteractor {
|
||||
|
||||
/** Get tokens list using filter by text [searchText] */
|
||||
fun getTokensList(searchText: String): Flow<PagingData<Token>>
|
||||
}
|
||||
|
|
@ -24,10 +24,11 @@ internal data class Token(
|
|||
/**
|
||||
* Domain model of network for tokens list screen
|
||||
*
|
||||
* @property id network id
|
||||
* @property blockchain blockchain
|
||||
* @property address address. If address equals null, it means it is the main network of token
|
||||
* @property iconUrl network icon url
|
||||
* @property id network id
|
||||
* @property blockchain blockchain
|
||||
* @property address address. If address equals null, it means it is the main network of token
|
||||
* @property iconUrl network icon url
|
||||
* @property decimalCount decimal count
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
|
|
@ -36,5 +37,6 @@ internal data class Token(
|
|||
val blockchain: Blockchain,
|
||||
val address: String?,
|
||||
val iconUrl: String,
|
||||
val decimalCount: Int?,
|
||||
)
|
||||
}
|
||||
|
|
@ -1,17 +1,15 @@
|
|||
package com.tangem.tap.features.tokens.presentation.router
|
||||
|
||||
import com.tangem.core.analytics.Analytics
|
||||
import com.tangem.tap.common.analytics.events.ManageTokens
|
||||
import com.tangem.tap.common.redux.navigation.NavigationAction
|
||||
import com.tangem.tap.features.tokens.redux.TokensAction
|
||||
import com.tangem.tap.store
|
||||
|
||||
/**
|
||||
* Router implementation for add tokens feature
|
||||
* Default implementation of tokens list router
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
internal class DefaultAddTokensRouter : AddTokensRouter {
|
||||
internal class DefaultTokensListRouter : TokensListRouter {
|
||||
|
||||
override fun popBackStack() {
|
||||
store.dispatch(NavigationAction.PopBackTo())
|
||||
|
|
@ -19,7 +17,6 @@ internal class DefaultAddTokensRouter : AddTokensRouter {
|
|||
}
|
||||
|
||||
override fun openAddCustomTokenScreen() {
|
||||
Analytics.send(ManageTokens.ButtonCustomToken())
|
||||
store.dispatch(TokensAction.PrepareAndNavigateToAddCustomToken)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package com.tangem.tap.features.tokens.presentation.router
|
||||
|
||||
/** Add tokens feature router */
|
||||
internal interface AddTokensRouter {
|
||||
/** Tokens list feature router */
|
||||
internal interface TokensListRouter {
|
||||
|
||||
/** Return to last screen */
|
||||
fun popBackStack()
|
||||
|
|
@ -24,7 +24,7 @@ import com.tangem.tap.common.redux.AppDialog
|
|||
import com.tangem.tap.common.redux.AppState
|
||||
import com.tangem.tap.domain.tokens.Contract
|
||||
import com.tangem.tap.domain.tokens.Currency
|
||||
import com.tangem.tap.features.tokens.presentation.router.AddTokensRouter
|
||||
import com.tangem.tap.features.tokens.presentation.router.TokensListRouter
|
||||
import com.tangem.tap.features.tokens.presentation.states.NetworkItemState
|
||||
import com.tangem.tap.features.tokens.presentation.states.TokenItemState
|
||||
import com.tangem.tap.features.tokens.presentation.states.TokensListStateHolder
|
||||
|
|
@ -55,7 +55,7 @@ import javax.inject.Inject
|
|||
*/
|
||||
@HiltViewModel
|
||||
internal class TokensListViewModel @Inject constructor(
|
||||
private val router: AddTokensRouter,
|
||||
private val router: TokensListRouter,
|
||||
private val dispatchers: AppCoroutineDispatcherProvider,
|
||||
) : ViewModel() {
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue