Updated on 2026-08-14

This commit is contained in:
Tangem 2023-12-05 12:47:48 +03:00
parent bdf42f778f
commit f33ada0352
8 changed files with 41 additions and 5 deletions

View file

@ -15,7 +15,7 @@ class DefaultMarketCryptoCurrencyRepository(
return assetsStore.getSyncOrNull(userWalletId)?.find {
it.network == cryptoCurrency.network.backendId &&
it.contractAddress == contractAddress
it.contractAddress.equals(contractAddress, ignoreCase = true)
}?.exchangeAvailable ?: false
}
}

View file

@ -90,4 +90,6 @@ interface SwapInteractor {
initialCryptoCurrency: CryptoCurrency,
state: TokensDataStateExpress,
): CryptoCurrencyStatus?
fun getNativeToken(networkId: String): CryptoCurrency
}

View file

@ -596,6 +596,10 @@ internal class SwapInteractorImpl @Inject constructor(
?: state.toGroup.available.firstOrNull()?.currencyStatus
}
override fun getNativeToken(networkId: String): CryptoCurrency {
return repository.getNativeTokenForNetwork(networkId)
}
@Deprecated("used in old swap mechanism")
private fun getTangemFee(): Double {
return repository.getTangemFee()

View file

@ -12,6 +12,7 @@ dependencies {
implementation(projects.core.analytics)
implementation(projects.core.analytics.models)
implementation(projects.core.featuretoggles)
implementation(projects.core.navigation)
implementation(projects.core.utils)
implementation(projects.core.ui)
implementation(projects.common)
@ -45,6 +46,7 @@ dependencies {
/** Api */
implementation(projects.features.swap.api)
implementation(projects.features.tokendetails.api)
/** Domain */
implementation(projects.features.swap.domain)

View file

@ -5,6 +5,7 @@ import androidx.compose.animation.Crossfade
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.fragment.app.viewModels
import com.tangem.core.navigation.ReduxNavController
import com.tangem.core.ui.components.SystemBarsEffect
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.screen.ComposeFragment
@ -26,6 +27,9 @@ class SwapFragment : ComposeFragment() {
@Inject
override lateinit var appThemeModeHolder: AppThemeModeHolder
@Inject
lateinit var reduxNavController: ReduxNavController
private val viewModel by viewModels<SwapViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
@ -35,6 +39,7 @@ class SwapFragment : ComposeFragment() {
SwapRouter(
fragmentManager = WeakReference(parentFragmentManager),
customTabsManager = CustomTabsManager(WeakReference(context)),
reduxNavController = reduxNavController,
),
)
}

View file

@ -3,12 +3,20 @@ package com.tangem.feature.swap.router
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.core.os.bundleOf
import androidx.fragment.app.FragmentManager
import com.tangem.core.navigation.AppScreen
import com.tangem.core.navigation.NavigationAction
import com.tangem.core.navigation.ReduxNavController
import com.tangem.domain.tokens.model.CryptoCurrency
import com.tangem.domain.wallets.models.UserWalletId
import com.tangem.features.tokendetails.navigation.TokenDetailsRouter
import java.lang.ref.WeakReference
internal class SwapRouter(
private val fragmentManager: WeakReference<FragmentManager>,
private val customTabsManager: CustomTabsManager,
private val reduxNavController: ReduxNavController,
) {
var currentScreen by mutableStateOf(SwapNavScreen.Main)
@ -29,6 +37,18 @@ internal class SwapRouter(
fun openUrl(url: String) {
customTabsManager.openUrl(url)
}
fun openTokenDetails(userWalletId: UserWalletId, currency: CryptoCurrency) {
reduxNavController.navigate(
action = NavigationAction.NavigateTo(
screen = AppScreen.WalletDetails,
bundle = bundleOf(
TokenDetailsRouter.USER_WALLET_ID_KEY to userWalletId.stringValue,
TokenDetailsRouter.CRYPTO_CURRENCY_KEY to currency,
),
),
)
}
}
enum class SwapNavScreen {

View file

@ -222,8 +222,7 @@ internal class StateBuilder(
),
)
}
if (quoteModel.preparedSwapConfigState.isAllowedToSpend &&
!quoteModel.preparedSwapConfigState.isFeeEnough &&
if (!quoteModel.preparedSwapConfigState.isFeeEnough &&
quoteModel.preparedSwapConfigState.isBalanceEnough
) {
warnings.add(
@ -896,7 +895,7 @@ internal class StateBuilder(
),
iconResId = fromToken.networkIconResId,
buttonsState = NotificationConfig.ButtonsState.SecondaryButtonConfig(
text = resourceReference(R.string.common_buy_currency, wrappedList(fromToken.name)),
text = resourceReference(R.string.common_buy_currency, wrappedList(fromToken.network.currencySymbol)),
onClick = onBuyClick,
),
)

View file

@ -748,7 +748,11 @@ internal class SwapViewModel @Inject constructor(
)
}
},
onBuyClick = {},
onBuyClick = {
swapInteractor.getSelectedWallet()?.let {
swapRouter.openTokenDetails(it.walletId, swapInteractor.getNativeToken(dataState.networkId))
}
},
)
}