Updated on 2026-08-14
This commit is contained in:
parent
d64c12eb8e
commit
43c8cb47a4
6 changed files with 99 additions and 62 deletions
|
|
@ -1,11 +1,14 @@
|
|||
package com.tangem.feature.wallet.presentation.wallet.state2
|
||||
|
||||
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfigContent
|
||||
import com.tangem.core.ui.event.consumedEvent
|
||||
import com.tangem.domain.wallets.models.UserWalletId
|
||||
import com.tangem.feature.wallet.presentation.wallet.state.components.WalletTopBarConfig
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.model.NOT_INITIALIZED_WALLET_INDEX
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.model.WalletScreenState
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.model.WalletState
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.transformers.CloseBottomSheetTransformer
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.transformers.OpenBottomSheetTransformer
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.transformers.WalletScreenStateTransformer
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
|
|
@ -47,6 +50,16 @@ internal class WalletStateController @Inject constructor() {
|
|||
return with(value) { wallets[selectedWalletIndex].walletCardState.id }
|
||||
}
|
||||
|
||||
fun showBottomSheet(content: TangemBottomSheetConfigContent, userWalletId: UserWalletId = getSelectedWalletId()) {
|
||||
update(
|
||||
OpenBottomSheetTransformer(
|
||||
userWalletId = userWalletId,
|
||||
content = content,
|
||||
onDismissBottomSheet = { update(CloseBottomSheetTransformer(userWalletId)) },
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private fun getInitialState(): WalletScreenState {
|
||||
return WalletScreenState(
|
||||
onBackClick = {},
|
||||
|
|
|
|||
|
|
@ -1,8 +1,22 @@
|
|||
package com.tangem.feature.wallet.presentation.wallet.viewmodels.intents
|
||||
|
||||
import arrow.core.getOrElse
|
||||
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfigContent
|
||||
import com.tangem.core.ui.components.bottomsheets.tokenreceive.TokenReceiveBottomSheetConfig
|
||||
import com.tangem.core.ui.components.bottomsheets.tokenreceive.mapToAddressModels
|
||||
import com.tangem.core.ui.extensions.stringReference
|
||||
import com.tangem.domain.tokens.GetPrimaryCurrencyStatusUpdatesUseCase
|
||||
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
|
||||
import com.tangem.domain.wallets.models.UserWalletId
|
||||
import com.tangem.feature.wallet.presentation.wallet.state.WalletEvent
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.WalletStateController
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.utils.WalletEventSender
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import dagger.hilt.android.scopes.ViewModelScoped
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
import kotlinx.coroutines.launch
|
||||
import timber.log.Timber
|
||||
import javax.inject.Inject
|
||||
|
||||
internal interface VisaWalletIntents {
|
||||
|
|
@ -12,12 +26,52 @@ internal interface VisaWalletIntents {
|
|||
fun onBalancesAndLimitsClick()
|
||||
}
|
||||
|
||||
@ViewModelScoped
|
||||
internal class VisaWalletIntentsImplementor @Inject constructor(
|
||||
private val eventSender: WalletEventSender,
|
||||
) : VisaWalletIntents {
|
||||
private val stateController: WalletStateController,
|
||||
private val getPrimaryCurrencyUseCase: GetPrimaryCurrencyStatusUpdatesUseCase,
|
||||
private val dispatchers: CoroutineDispatcherProvider,
|
||||
) : BaseWalletClickIntents(), VisaWalletIntents {
|
||||
|
||||
override fun onDepositClick() {
|
||||
eventSender.send(WalletEvent.ShowToast(stringReference(value = "Not implemented yet")))
|
||||
val userWalletId = stateController.getSelectedWalletId()
|
||||
|
||||
viewModelScope.launch(dispatchers.main) {
|
||||
val currencyStatus = getPrimaryCurrencyStatus(userWalletId) ?: return@launch
|
||||
|
||||
createReceiveBottomSheetContent(currencyStatus)?.let { content ->
|
||||
stateController.showBottomSheet(content)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun getPrimaryCurrencyStatus(userWalletId: UserWalletId): CryptoCurrencyStatus? {
|
||||
return getPrimaryCurrencyUseCase(userWalletId)
|
||||
.firstOrNull()
|
||||
?.getOrElse {
|
||||
Timber.e("Failed to get primary currency $it")
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
private fun createReceiveBottomSheetContent(currencyStatus: CryptoCurrencyStatus): TangemBottomSheetConfigContent? {
|
||||
val currency = currencyStatus.currency
|
||||
val addresses = currencyStatus.value.networkAddress?.availableAddresses
|
||||
|
||||
if (addresses == null) {
|
||||
Timber.e("Addresses should not be null")
|
||||
return null
|
||||
}
|
||||
|
||||
return TokenReceiveBottomSheetConfig(
|
||||
name = currency.name,
|
||||
symbol = currency.symbol,
|
||||
network = currency.network.name,
|
||||
addresses = addresses.mapToAddressModels(currency).toImmutableList(),
|
||||
onCopyClick = { /* no-op */ },
|
||||
onShareClick = { /* no-op */ },
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBalancesAndLimitsClick() {
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ internal class WalletClickIntentsV2 @Inject constructor(
|
|||
warningsClickIntentsImplementer.initialize(router, coroutineScope)
|
||||
currencyActionsClickIntentsImplementor.initialize(router, coroutineScope)
|
||||
contentClickIntentsImplementor.initialize(router, coroutineScope)
|
||||
visaWalletIntentsImplementor.initialize(router, coroutineScope)
|
||||
}
|
||||
|
||||
fun onWalletChange(index: Int) {
|
||||
|
|
|
|||
|
|
@ -15,8 +15,6 @@ import com.tangem.feature.wallet.presentation.wallet.analytics.PortfolioEvent
|
|||
import com.tangem.feature.wallet.presentation.wallet.domain.unwrap
|
||||
import com.tangem.feature.wallet.presentation.wallet.state.ActionsBottomSheetConfig
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.WalletStateController
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.transformers.CloseBottomSheetTransformer
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.transformers.OpenBottomSheetTransformer
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.transformers.converter.MultiWalletCurrencyActionsConverter
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import dagger.hilt.android.scopes.ViewModelScoped
|
||||
|
|
@ -89,21 +87,14 @@ internal class WalletContentClickIntentsImplementor @Inject constructor(
|
|||
}
|
||||
|
||||
private fun showActionsBottomSheet(tokenActionsState: TokenActionsState, userWallet: UserWallet) {
|
||||
stateHolder.update(
|
||||
OpenBottomSheetTransformer(
|
||||
userWalletId = userWallet.walletId,
|
||||
content = ActionsBottomSheetConfig(
|
||||
actions = MultiWalletCurrencyActionsConverter(
|
||||
userWallet = userWallet,
|
||||
clickIntents = currencyActionsClickIntentsImplementor,
|
||||
).convert(tokenActionsState),
|
||||
),
|
||||
onDismissBottomSheet = {
|
||||
stateHolder.update(
|
||||
CloseBottomSheetTransformer(userWalletId = userWallet.walletId),
|
||||
)
|
||||
},
|
||||
stateHolder.showBottomSheet(
|
||||
ActionsBottomSheetConfig(
|
||||
actions = MultiWalletCurrencyActionsConverter(
|
||||
userWallet = userWallet,
|
||||
clickIntents = currencyActionsClickIntentsImplementor,
|
||||
).convert(tokenActionsState),
|
||||
),
|
||||
userWallet.walletId,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@ import com.tangem.feature.wallet.presentation.wallet.state.WalletAlertState
|
|||
import com.tangem.feature.wallet.presentation.wallet.state.WalletEvent
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.WalletStateController
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.transformers.CloseBottomSheetTransformer
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.transformers.OpenBottomSheetTransformer
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.utils.WalletEventSender
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import dagger.hilt.android.scopes.ViewModelScoped
|
||||
|
|
@ -141,22 +140,15 @@ internal class WalletCurrencyActionsClickIntentsImplementor @Inject constructor(
|
|||
event = TokenScreenAnalyticsEvent.ButtonReceive(cryptoCurrencyStatus.currency.symbol),
|
||||
)
|
||||
|
||||
viewModelScope.launch(dispatchers.main) {
|
||||
analyticsEventHandler.send(event = TokenReceiveAnalyticsEvent.ReceiveScreenOpened)
|
||||
analyticsEventHandler.send(event = TokenReceiveAnalyticsEvent.ReceiveScreenOpened)
|
||||
|
||||
stateHolder.update(
|
||||
OpenBottomSheetTransformer(
|
||||
userWalletId = userWalletId,
|
||||
content = createReceiveBottomSheetContent(
|
||||
currency = cryptoCurrencyStatus.currency,
|
||||
addresses = cryptoCurrencyStatus.value.networkAddress?.availableAddresses ?: return@launch,
|
||||
),
|
||||
onDismissBottomSheet = {
|
||||
stateHolder.update(CloseBottomSheetTransformer(userWalletId = userWalletId))
|
||||
},
|
||||
),
|
||||
)
|
||||
}
|
||||
stateHolder.showBottomSheet(
|
||||
createReceiveBottomSheetContent(
|
||||
currency = cryptoCurrencyStatus.currency,
|
||||
addresses = cryptoCurrencyStatus.value.networkAddress?.availableAddresses ?: return,
|
||||
),
|
||||
userWalletId,
|
||||
)
|
||||
}
|
||||
|
||||
private fun createReceiveBottomSheetContent(
|
||||
|
|
@ -350,25 +342,18 @@ internal class WalletCurrencyActionsClickIntentsImplementor @Inject constructor(
|
|||
addresses: Set<NetworkAddress.Address>,
|
||||
currency: CryptoCurrency,
|
||||
) {
|
||||
stateHolder.update(
|
||||
OpenBottomSheetTransformer(
|
||||
userWalletId = userWalletId,
|
||||
content = ChooseAddressBottomSheetConfig(
|
||||
addressModels = addresses.mapToAddressModels(currency).toImmutableList(),
|
||||
onClick = {
|
||||
onAddressTypeSelected(
|
||||
userWalletId = userWalletId,
|
||||
currency = currency,
|
||||
addressModel = it,
|
||||
)
|
||||
},
|
||||
),
|
||||
onDismissBottomSheet = {
|
||||
stateHolder.update(
|
||||
CloseBottomSheetTransformer(userWalletId = userWalletId),
|
||||
stateHolder.showBottomSheet(
|
||||
ChooseAddressBottomSheetConfig(
|
||||
addressModels = addresses.mapToAddressModels(currency).toImmutableList(),
|
||||
onClick = {
|
||||
onAddressTypeSelected(
|
||||
userWalletId = userWalletId,
|
||||
currency = currency,
|
||||
addressModel = it,
|
||||
)
|
||||
},
|
||||
),
|
||||
userWalletId,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@ import com.tangem.feature.wallet.presentation.wallet.state.WalletAlertState
|
|||
import com.tangem.feature.wallet.presentation.wallet.state.WalletEvent
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.WalletStateController
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.transformers.CloseBottomSheetTransformer
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.transformers.OpenBottomSheetTransformer
|
||||
import com.tangem.feature.wallet.presentation.wallet.state2.utils.WalletEventSender
|
||||
import com.tangem.operations.derivation.ExtendedPublicKeysMap
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
|
|
@ -212,17 +211,11 @@ internal class WalletWarningsClickIntentsImplementer @Inject constructor(
|
|||
class DerivationData(val derivations: Pair<ByteArrayKey, List<DerivationPath>>)
|
||||
|
||||
override fun onOpenUnlockWalletsBottomSheetClick() {
|
||||
stateHolder.update(
|
||||
OpenBottomSheetTransformer(
|
||||
content = requireNotNull(stateHolder.getSelectedWallet().bottomSheetConfig).content,
|
||||
userWalletId = stateHolder.getSelectedWalletId(),
|
||||
onDismissBottomSheet = {
|
||||
stateHolder.update(
|
||||
CloseBottomSheetTransformer(userWalletId = stateHolder.getSelectedWalletId()),
|
||||
)
|
||||
},
|
||||
),
|
||||
)
|
||||
val config = requireNotNull(stateHolder.getSelectedWallet().bottomSheetConfig) {
|
||||
"Impossible to open unlock wallet bottom sheet if it's null"
|
||||
}
|
||||
|
||||
stateHolder.showBottomSheet(config.content)
|
||||
}
|
||||
|
||||
override fun onUnlockWalletClick() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue