Updated on 2026-08-14

This commit is contained in:
Tangem 2025-10-09 17:48:02 +05:00
parent 2e6647fa50
commit 3bde764060
23 changed files with 65 additions and 150 deletions

View file

@ -1,6 +0,0 @@
package com.tangem.features.yield.supply.impl.main.entity
internal enum class LoadingStatusMode {
Initial,
LoadApy,
}

View file

@ -22,8 +22,6 @@ import com.tangem.domain.yield.supply.usecase.YieldSupplyGetTokenStatusUseCase
import com.tangem.domain.yield.supply.usecase.YieldSupplyIsAvailableUseCase
import com.tangem.features.yield.supply.api.YieldSupplyComponent
import com.tangem.features.yield.supply.impl.main.entity.YieldSupplyUM
import com.tangem.features.yield.supply.impl.main.entity.LoadingStatusMode
import com.tangem.features.yield.supply.impl.main.model.transformers.YieldSupplyTokenStatusFailureTransformer
import com.tangem.features.yield.supply.impl.main.model.transformers.YieldSupplyTokenStatusSuccessTransformer
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import com.tangem.utils.coroutines.DelayedWork
@ -118,7 +116,7 @@ internal class YieldSupplyModel @Inject constructor(
}
}
private fun loadTokenStatus(mode: LoadingStatusMode) {
private fun loadTokenStatus() {
val cryptoCurrencyToken = cryptoCurrency as? CryptoCurrency.Token ?: return
modelScope.launch(dispatchers.default) {
yieldSupplyGetTokenStatusUseCase(cryptoCurrencyToken)
@ -127,11 +125,10 @@ internal class YieldSupplyModel @Inject constructor(
YieldSupplyTokenStatusSuccessTransformer(
tokenStatus = tokenStatus,
onStartEarningClick = ::onStartEarningClick,
mode = mode,
),
)
}.onLeft {
uiState.update(YieldSupplyTokenStatusFailureTransformer(mode))
uiState.update { YieldSupplyUM.Unavailable }
}
}
}
@ -186,14 +183,13 @@ internal class YieldSupplyModel @Inject constructor(
onClick = ::onActiveClick,
isAllowedToSpend = yieldSupplyStatus.isAllowedToSpend,
)
else -> YieldSupplyUM.Loading
else -> YieldSupplyUM.Initial
}
uiState.update { yieldSupplyUM }
when (yieldSupplyUM) {
is YieldSupplyUM.Loading -> loadTokenStatus(LoadingStatusMode.Initial)
is YieldSupplyUM.Content -> loadTokenStatus(LoadingStatusMode.LoadApy)
is YieldSupplyUM.Initial -> loadTokenStatus()
else -> Unit
}
}

View file

@ -1,17 +0,0 @@
package com.tangem.features.yield.supply.impl.main.model.transformers
import com.tangem.features.yield.supply.impl.main.entity.LoadingStatusMode
import com.tangem.features.yield.supply.impl.main.entity.YieldSupplyUM
import com.tangem.utils.transformer.Transformer
internal class YieldSupplyTokenStatusFailureTransformer(
private val mode: LoadingStatusMode,
) : Transformer<YieldSupplyUM> {
override fun transform(prevState: YieldSupplyUM): YieldSupplyUM {
return when (mode) {
LoadingStatusMode.Initial -> YieldSupplyUM.Unavailable
LoadingStatusMode.LoadApy -> prevState // TODO apply correct UI
}
}
}

View file

@ -1,42 +1,26 @@
package com.tangem.features.yield.supply.impl.main.model.transformers
import com.tangem.domain.yield.supply.models.YieldMarketTokenStatus
import com.tangem.features.yield.supply.impl.R
import com.tangem.features.yield.supply.impl.main.entity.LoadingStatusMode
import com.tangem.features.yield.supply.impl.main.entity.YieldSupplyUM
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.domain.yield.supply.models.YieldMarketToken
import com.tangem.utils.transformer.Transformer
internal class YieldSupplyTokenStatusSuccessTransformer(
private val tokenStatus: YieldMarketTokenStatus,
private val tokenStatus: YieldMarketToken,
private val onStartEarningClick: () -> Unit,
private val mode: LoadingStatusMode,
) : Transformer<YieldSupplyUM> {
override fun transform(prevState: YieldSupplyUM): YieldSupplyUM {
if (!tokenStatus.isActive) return YieldSupplyUM.Unavailable
return when (mode) {
LoadingStatusMode.Initial -> {
YieldSupplyUM.Available(
title = resourceReference(
id = R.string.yield_module_token_details_earn_notification_title,
formatArgs = wrappedList(tokenStatus.apy),
),
onClick = onStartEarningClick,
)
}
LoadingStatusMode.LoadApy -> {
if (prevState is YieldSupplyUM.Content) {
prevState.copy(
rewardsApy = stringReference("${tokenStatus.apy}%"),
)
} else {
prevState
}
}
}
return YieldSupplyUM.Available(
title = resourceReference(
id = R.string.yield_module_token_details_earn_notification_title,
formatArgs = wrappedList(tokenStatus.apy),
),
onClick = onStartEarningClick,
)
}
}

View file

@ -208,7 +208,7 @@ internal class YieldSupplyStartEarningModel @Inject constructor(
},
ifRight = {
fetchCurrencyStatusUseCase(userWalletId = userWallet.walletId, cryptoCurrency.id)
yieldSupplyActivateUseCase(cryptoCurrency as CryptoCurrency.Token)
yieldSupplyActivateUseCase(cryptoCurrency)
modelScope.launch {
params.callback.onTransactionSent()
}

View file

@ -136,7 +136,7 @@ internal class YieldSupplyStopEarningModel @Inject constructor(
)
},
ifRight = {
yieldSupplyDeactivateUseCase(cryptoCurrency as CryptoCurrency.Token)
yieldSupplyDeactivateUseCase(cryptoCurrency)
params.callback.onTransactionSent()
},
)