Updated on 2026-08-14

This commit is contained in:
Tangem 2024-10-29 14:20:14 +04:00
parent 06f2d51e87
commit 1698771cfd
5 changed files with 119 additions and 0 deletions

View file

@ -0,0 +1,65 @@
package com.tangem.features.onramp.sell
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
import androidx.compose.ui.Modifier
import arrow.core.getOrElse
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.redux.ReduxStateHolder
import com.tangem.domain.tokens.legacy.TradeCryptoAction
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
import com.tangem.features.onramp.component.SellCryptoComponent
import com.tangem.features.onramp.impl.R
import com.tangem.features.onramp.selecttoken.OnrampSelectTokenComponent
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import kotlinx.coroutines.launch
@Stable
internal class DefaultSellCryptoComponent @AssistedInject constructor(
onrampSelectTokenComponentFactory: OnrampSelectTokenComponent.Factory,
@Assisted private val appComponentContext: AppComponentContext,
@Assisted private val params: SellCryptoComponent.Params,
private val reduxStateHolder: ReduxStateHolder,
private val getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase,
) : SellCryptoComponent {
private val selectTokenComponent: OnrampSelectTokenComponent = onrampSelectTokenComponentFactory.create(
context = appComponentContext,
params = OnrampSelectTokenComponent.Params(
hasSearchBar = true,
userWalletId = params.userWalletId,
titleResId = R.string.common_sell,
onTokenClick = ::onTokenClick,
),
)
@Composable
override fun Content(modifier: Modifier) {
selectTokenComponent.Content(modifier = modifier)
}
private fun onTokenClick(status: CryptoCurrencyStatus) {
appComponentContext.componentScope.launch {
reduxStateHolder.dispatch(
TradeCryptoAction.Sell(
cryptoCurrencyStatus = status,
appCurrencyCode = getSelectedAppCurrencyUseCase.invokeSync()
.getOrElse { AppCurrency.Default }.code,
),
)
}
}
@AssistedFactory
interface Factory : SellCryptoComponent.Factory {
override fun create(
context: AppComponentContext,
params: SellCryptoComponent.Params,
): DefaultSellCryptoComponent
}
}

View file

@ -0,0 +1,18 @@
package com.tangem.features.onramp.sell.di
import com.tangem.features.onramp.component.SellCryptoComponent
import com.tangem.features.onramp.sell.DefaultSellCryptoComponent
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
internal interface SellCryptoComponentModule {
@Binds
@Singleton
fun bindSellCryptoComponentFactory(factory: DefaultSellCryptoComponent.Factory): SellCryptoComponent.Factory
}