diff --git a/core/config-toggles/src/main/assets/configs/feature_toggles_config.json b/core/config-toggles/src/main/assets/configs/feature_toggles_config.json index 343e7ec65d..71ae6b7be1 100644 --- a/core/config-toggles/src/main/assets/configs/feature_toggles_config.json +++ b/core/config-toggles/src/main/assets/configs/feature_toggles_config.json @@ -35,10 +35,6 @@ "name": "STAKING_CARDANO_ENABLED", "version": "undefined" }, - { - "name": "TX_HISTORY_REFACTORING_ENABLED", - "version": "5.22.0" - }, { "name": "NEW_ARTWORK_LOADING", "version": "5.25.0" diff --git a/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/repository/MockQuotesRepository.kt b/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/repository/MockQuotesRepository.kt deleted file mode 100644 index 7af246f36c..0000000000 --- a/domain/tokens/src/test/kotlin/com/tangem/domain/tokens/repository/MockQuotesRepository.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.tangem.domain.tokens.repository - -import arrow.core.Either -import arrow.core.getOrElse -import com.tangem.domain.core.error.DataError -import com.tangem.domain.models.currency.CryptoCurrency -import com.tangem.domain.tokens.model.Quote -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.flow.map - -internal class MockQuotesRepository( - private val quotes: Flow>>, -) : QuotesRepository { - - override fun getQuotesUpdates(currenciesIds: Set): Flow> { - return quotes.map { it.getOrElse { e -> throw e } } - } - - override suspend fun fetchQuotes(currenciesIds: Set, refresh: Boolean) { - /* no-op */ - } - - override fun getQuotesUpdatesLegacy(currenciesIds: Set, refresh: Boolean): Flow> { - return quotes.map { it.getOrElse { e -> throw e } } - } - - override suspend fun getQuotesSync(currenciesIds: Set, refresh: Boolean): Set { - return getQuotesUpdatesLegacy(currenciesIds).first() - } - - override suspend fun getQuoteSync(currencyId: CryptoCurrency.RawID): Quote { - return quotes.map { it.getOrElse { e -> throw e } }.first() - .first { it.rawCurrencyId == currencyId } - } -} \ No newline at end of file diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/common/SendBalanceUpdater.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/common/SendBalanceUpdater.kt index 4d982cc974..f1b847e681 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/common/SendBalanceUpdater.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/common/SendBalanceUpdater.kt @@ -5,9 +5,7 @@ import com.tangem.domain.nft.RefreshAllNFTUseCase import com.tangem.domain.tokens.FetchPendingTransactionsUseCase import com.tangem.domain.tokens.UpdateDelayedNetworkStatusUseCase import com.tangem.domain.txhistory.usecase.GetTxHistoryItemsCountUseCase -import com.tangem.domain.txhistory.usecase.GetTxHistoryItemsUseCase import com.tangem.domain.wallets.models.UserWallet -import com.tangem.features.txhistory.TxHistoryFeatureToggles import com.tangem.features.txhistory.entity.TxHistoryContentUpdateEmitter import com.tangem.utils.coroutines.DelayedWork import dagger.assisted.Assisted @@ -20,8 +18,6 @@ internal class SendBalanceUpdater @AssistedInject constructor( private val fetchPendingTransactionsUseCase: FetchPendingTransactionsUseCase, private val updateDelayedNetworkStatusUseCase: UpdateDelayedNetworkStatusUseCase, private val getTxHistoryItemsCountUseCase: GetTxHistoryItemsCountUseCase, - private val getTxHistoryItemsUseCase: GetTxHistoryItemsUseCase, - private val txHistoryFeatureToggles: TxHistoryFeatureToggles, private val txHistoryContentUpdateEmitter: TxHistoryContentUpdateEmitter, private val refreshAllNFTUseCase: RefreshAllNFTUseCase, @DelayedWork private val coroutineScope: CoroutineScope, @@ -75,15 +71,7 @@ internal class SendBalanceUpdater @AssistedInject constructor( ) txHistoryItemsCountEither.onRight { - if (txHistoryFeatureToggles.isFeatureEnabled) { - txHistoryContentUpdateEmitter.triggerUpdate() - } else { - getTxHistoryItemsUseCase( - userWalletId = userWallet.walletId, - currency = cryptoCurrency, - refresh = true, - ) - } + txHistoryContentUpdateEmitter.triggerUpdate() } } diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/model/SendModel.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/model/SendModel.kt index 29d669c62a..a331811946 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/model/SendModel.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/model/SendModel.kt @@ -45,7 +45,6 @@ import com.tangem.domain.transaction.usecase.* import com.tangem.domain.txhistory.usecase.GetExplorerTransactionUrlUseCase import com.tangem.domain.txhistory.usecase.GetFixedTxHistoryItemsUseCase import com.tangem.domain.txhistory.usecase.GetTxHistoryItemsCountUseCase -import com.tangem.domain.txhistory.usecase.GetTxHistoryItemsUseCase import com.tangem.domain.utils.convertToSdkAmount import com.tangem.domain.wallets.models.UserWallet import com.tangem.domain.wallets.models.UserWalletId @@ -66,7 +65,6 @@ import com.tangem.features.send.impl.presentation.state.amount.AmountStateFactor import com.tangem.features.send.impl.presentation.state.confirm.SendNotificationFactory import com.tangem.features.send.impl.presentation.state.fee.* import com.tangem.features.send.impl.presentation.state.recipient.RecipientSendFactory -import com.tangem.features.txhistory.TxHistoryFeatureToggles import com.tangem.features.txhistory.entity.TxHistoryContentUpdateEmitter import com.tangem.lib.crypto.BlockchainUtils import com.tangem.utils.Provider @@ -95,7 +93,6 @@ internal class SendModel @Inject constructor( private val getCryptoCurrencyUseCase: GetCryptoCurrencyUseCase, private val getNetworkAddressesUseCase: GetNetworkAddressesUseCase, private val getTxHistoryItemsCountUseCase: GetTxHistoryItemsCountUseCase, - private val getTxHistoryItemsUseCase: GetTxHistoryItemsUseCase, private val getFixedTxHistoryItemsUseCase: GetFixedTxHistoryItemsUseCase, private val sendTransactionUseCase: SendTransactionUseCase, private val createTransferTransactionUseCase: CreateTransferTransactionUseCase, @@ -118,7 +115,6 @@ internal class SendModel @Inject constructor( private val getCardInfoUseCase: GetCardInfoUseCase, private val sendFeedbackEmailUseCase: SendFeedbackEmailUseCase, private val shareManager: ShareManager, - private val txHistoryFeatureToggles: TxHistoryFeatureToggles, private val txHistoryContentUpdateEmitter: TxHistoryContentUpdateEmitter, private val incrementNotificationsShowCountUseCase: IncrementNotificationsShowCountUseCase, @DelayedWork private val coroutineScope: CoroutineScope, @@ -1076,15 +1072,7 @@ internal class SendModel @Inject constructor( ) txHistoryItemsCountEither.onRight { - if (txHistoryFeatureToggles.isFeatureEnabled) { - txHistoryContentUpdateEmitter.triggerUpdate() - } else { - getTxHistoryItemsUseCase( - userWalletId = userWalletId, - currency = cryptoCurrency, - refresh = true, - ) - } + txHistoryContentUpdateEmitter.triggerUpdate() } } diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakingBalanceUpdater.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakingBalanceUpdater.kt index e3593afffa..dfeecbeb92 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakingBalanceUpdater.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakingBalanceUpdater.kt @@ -9,9 +9,7 @@ import com.tangem.domain.tokens.TokensFeatureToggles import com.tangem.domain.tokens.UpdateDelayedNetworkStatusUseCase import com.tangem.domain.tokens.model.CryptoCurrencyStatus import com.tangem.domain.txhistory.usecase.GetTxHistoryItemsCountUseCase -import com.tangem.domain.txhistory.usecase.GetTxHistoryItemsUseCase import com.tangem.domain.wallets.models.UserWallet -import com.tangem.features.txhistory.TxHistoryFeatureToggles import com.tangem.features.txhistory.entity.TxHistoryContentUpdateEmitter import com.tangem.utils.coroutines.DelayedWork import dagger.assisted.Assisted @@ -25,9 +23,7 @@ internal class StakingBalanceUpdater @AssistedInject constructor( private val updateDelayedNetworkStatusUseCase: UpdateDelayedNetworkStatusUseCase, private val stakingYieldBalanceUseCase: FetchStakingYieldBalanceUseCase, private val getTxHistoryItemsCountUseCase: GetTxHistoryItemsCountUseCase, - private val getTxHistoryItemsUseCase: GetTxHistoryItemsUseCase, private val fetchActionsUseCase: FetchActionsUseCase, - private val txHistoryFeatureToggles: TxHistoryFeatureToggles, private val txHistoryContentUpdateEmitter: TxHistoryContentUpdateEmitter, private val tokensFeatureToggles: TokensFeatureToggles, @DelayedWork private val coroutineScope: CoroutineScope, @@ -103,15 +99,7 @@ internal class StakingBalanceUpdater @AssistedInject constructor( ) txHistoryItemsCountEither.onRight { - if (txHistoryFeatureToggles.isFeatureEnabled) { - txHistoryContentUpdateEmitter.triggerUpdate() - } else { - getTxHistoryItemsUseCase( - userWalletId = userWallet.walletId, - currency = cryptoCurrencyStatus.currency, - refresh = true, - ) - } + txHistoryContentUpdateEmitter.triggerUpdate() } } diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/DefaultTokenDetailsComponent.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/DefaultTokenDetailsComponent.kt index ef46e4df1e..32de241dee 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/DefaultTokenDetailsComponent.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/DefaultTokenDetailsComponent.kt @@ -19,7 +19,6 @@ import com.tangem.feature.tokendetails.presentation.tokendetails.ui.TokenDetails import com.tangem.features.markets.token.block.TokenMarketBlockComponent import com.tangem.features.onramp.OnrampFeatureToggles import com.tangem.features.tokendetails.TokenDetailsComponent -import com.tangem.features.txhistory.TxHistoryFeatureToggles import com.tangem.features.txhistory.component.TxHistoryComponent import dagger.assisted.Assisted import dagger.assisted.AssistedFactory @@ -31,7 +30,6 @@ internal class DefaultTokenDetailsComponent @AssistedInject constructor( @Assisted params: TokenDetailsComponent.Params, tokenMarketBlockComponentFactory: TokenMarketBlockComponent.Factory, txHistoryComponentFactory: TxHistoryComponent.Factory, - txHistoryFeatureToggles: TxHistoryFeatureToggles, onrampFeatureToggles: OnrampFeatureToggles, routingFeatureToggle: RoutingFeatureToggle, deepLinksRegistry: DeepLinksRegistry, @@ -43,9 +41,9 @@ internal class DefaultTokenDetailsComponent @AssistedInject constructor( params = TxHistoryComponent.Params( userWalletId = params.userWalletId, currency = params.currency, - openExplorer = { model.onExploreClick() }, + openExplorer = model::onExploreClick, ), - ).takeIf { txHistoryFeatureToggles.isFeatureEnabled } + ) init { lifecycle.subscribe( diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt index c80b1c3bd7..976ace101c 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt @@ -78,7 +78,6 @@ import com.tangem.feature.tokendetails.presentation.tokendetails.state.factory.e import com.tangem.features.onramp.OnrampFeatureToggles import com.tangem.features.tokendetails.TokenDetailsComponent import com.tangem.features.tokendetails.impl.R -import com.tangem.features.txhistory.TxHistoryFeatureToggles import com.tangem.features.txhistory.entity.TxHistoryContentUpdateEmitter import com.tangem.utils.Provider import com.tangem.utils.coroutines.* @@ -125,7 +124,6 @@ internal class TokenDetailsModel @Inject constructor( private val onrampFeatureToggles: OnrampFeatureToggles, private val shareManager: ShareManager, @GlobalUiMessageSender private val uiMessageSender: UiMessageSender, - private val txHistoryFeatureToggles: TxHistoryFeatureToggles, private val txHistoryContentUpdateEmitter: TxHistoryContentUpdateEmitter, paramsContainer: ParamsContainer, expressStatusFactory: ExpressStatusFactory.Factory, @@ -379,10 +377,10 @@ internal class TokenDetailsModel @Inject constructor( * @param showItemsLoading - show loading items placeholder. */ private fun updateTxHistory(refresh: Boolean, showItemsLoading: Boolean, initialUpdating: Boolean = false) { - if (txHistoryFeatureToggles.isFeatureEnabled && !initialUpdating) { - modelScope.launch { txHistoryContentUpdateEmitter.triggerUpdate() } - } else { - modelScope.launch(dispatchers.main) { + modelScope.launch { + if (!initialUpdating) { + txHistoryContentUpdateEmitter.triggerUpdate() + } else { val txHistoryItemsCountEither = txHistoryItemsCountUseCase( userWalletId = userWalletId, currency = cryptoCurrency, diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/TokenDetailsScreen.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/TokenDetailsScreen.kt index 93cf9bb969..beafb5b029 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/TokenDetailsScreen.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/TokenDetailsScreen.kt @@ -15,12 +15,12 @@ import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameter import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.paging.compose.LazyPagingItems import androidx.paging.compose.collectAsLazyPagingItems -import com.tangem.common.ui.expressStatus.ExpressStatusBottomSheetConfig -import com.tangem.common.ui.expressStatus.expressTransactionsItems import com.tangem.common.ui.bottomsheet.chooseaddress.ChooseAddressBottomSheet import com.tangem.common.ui.bottomsheet.chooseaddress.ChooseAddressBottomSheetConfig import com.tangem.common.ui.bottomsheet.receive.TokenReceiveBottomSheet import com.tangem.common.ui.bottomsheet.receive.TokenReceiveBottomSheetConfig +import com.tangem.common.ui.expressStatus.ExpressStatusBottomSheetConfig +import com.tangem.common.ui.expressStatus.expressTransactionsItems import com.tangem.core.ui.components.containers.pullToRefresh.TangemPullToRefreshContainer import com.tangem.core.ui.components.marketprice.MarketPriceBlock import com.tangem.core.ui.components.marketprice.MarketPriceBlockState @@ -42,6 +42,8 @@ import com.tangem.feature.tokendetails.presentation.tokendetails.ui.components.s import com.tangem.features.markets.token.block.TokenMarketBlockComponent import com.tangem.features.txhistory.component.TxHistoryComponent import com.tangem.features.txhistory.entity.TxHistoryUM +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow import kotlin.reflect.KProperty // TODO: Split to blocks [REDACTED_JIRA] @@ -50,7 +52,7 @@ import kotlin.reflect.KProperty internal fun TokenDetailsScreen( state: TokenDetailsState, tokenMarketBlockComponent: TokenMarketBlockComponent?, - txHistoryComponent: TxHistoryComponent?, + txHistoryComponent: TxHistoryComponent, ) { val bottomBarHeight = with(LocalDensity.current) { WindowInsets.systemBars.getBottom(this).toDp() } @@ -65,7 +67,7 @@ internal fun TokenDetailsScreen( null } val listState = rememberLazyListState() - val txHistoryComponentState by txHistoryComponent?.txHistoryState?.collectAsStateWithLifecycle() + val txHistoryComponentState by txHistoryComponent.txHistoryState.collectAsStateWithLifecycle() val betweenItemsPadding = TangemTheme.dimens.spacing12 val horizontalPadding = TangemTheme.dimens.spacing16 val itemModifier = Modifier @@ -186,13 +188,13 @@ internal fun TokenDetailsScreen( @Suppress("LongParameterList") private fun LazyListScope.txHistoryItems( listState: LazyListState, - txHistoryComponent: TxHistoryComponent?, + txHistoryComponent: TxHistoryComponent, txHistoryComponentState: TxHistoryUM?, txHistoryState: TxHistoryState, txHistoryItems: LazyPagingItems?, isBalanceHidden: Boolean, ) { - if (txHistoryComponent != null && txHistoryComponentState != null) { + if (txHistoryComponentState != null) { with(txHistoryComponent) { txHistoryContent(listState = listState, state = txHistoryComponentState) } } else { txHistoryItems( @@ -216,7 +218,13 @@ private fun TokenDetailsScreenPreview( TokenDetailsScreen( state = state, tokenMarketBlockComponent = null, - txHistoryComponent = null, + txHistoryComponent = object : TxHistoryComponent { + override val txHistoryState: StateFlow = MutableStateFlow( + value = TxHistoryUM.Empty(isBalanceHidden = false, onExploreClick = {}), + ) + + override fun LazyListScope.txHistoryContent(listState: LazyListState, state: TxHistoryUM) = Unit + }, ) } } diff --git a/features/txhistory/api/src/main/kotlin/com/tangem/features/txhistory/TxHistoryFeatureToggles.kt b/features/txhistory/api/src/main/kotlin/com/tangem/features/txhistory/TxHistoryFeatureToggles.kt deleted file mode 100644 index a0cb28761f..0000000000 --- a/features/txhistory/api/src/main/kotlin/com/tangem/features/txhistory/TxHistoryFeatureToggles.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.tangem.features.txhistory - -interface TxHistoryFeatureToggles { - val isFeatureEnabled: Boolean -} \ No newline at end of file diff --git a/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/DefaultTxHistoryFeatureToggles.kt b/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/DefaultTxHistoryFeatureToggles.kt deleted file mode 100644 index 862db63ebb..0000000000 --- a/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/DefaultTxHistoryFeatureToggles.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.tangem.features.txhistory - -import com.tangem.core.configtoggle.feature.FeatureTogglesManager -import javax.inject.Inject - -internal class DefaultTxHistoryFeatureToggles @Inject constructor( - private val featureTogglesManager: FeatureTogglesManager, -) : TxHistoryFeatureToggles { - override val isFeatureEnabled: Boolean - get() = featureTogglesManager.isFeatureEnabled("TX_HISTORY_REFACTORING_ENABLED") -} \ No newline at end of file diff --git a/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/di/TxHistoryFeatureModule.kt b/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/di/TxHistoryFeatureModule.kt index 7ea832e433..c3d8ea1955 100644 --- a/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/di/TxHistoryFeatureModule.kt +++ b/features/txhistory/impl/src/main/kotlin/com/tangem/features/txhistory/di/TxHistoryFeatureModule.kt @@ -1,7 +1,5 @@ package com.tangem.features.txhistory.di -import com.tangem.features.txhistory.DefaultTxHistoryFeatureToggles -import com.tangem.features.txhistory.TxHistoryFeatureToggles import com.tangem.features.txhistory.component.DefaultTxHistoryComponent import com.tangem.features.txhistory.component.TxHistoryComponent import dagger.Binds @@ -13,9 +11,6 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) internal interface TxHistoryFeatureModule { - @Binds - @Singleton - fun provideFeatureToggles(featureToggles: DefaultTxHistoryFeatureToggles): TxHistoryFeatureToggles @Binds @Singleton