11package com.flipcash.app.tokens
22
33import androidx.lifecycle.viewModelScope
4+ import com.flipcash.app.activityfeed.ActivityFeedCoordinator
45import com.flipcash.app.core.extensions.onResult
56import com.flipcash.app.core.extensions.to
67import com.flipcash.app.core.tokens.TokenSwapPurpose
78import com.flipcash.app.core.ui.CurrencyHolder
9+ import com.flipcash.services.controllers.ActivityFeedController
810import com.flipcash.services.user.UserManager
911import com.flipcash.shared.tokens.R
1012import com.getcode.manager.BottomBarManager
@@ -65,11 +67,11 @@ class BuySellSwapTokenViewModel @Inject constructor(
6567 transactionController : TransactionController ,
6668 resources : ResourceHelper ,
6769 tokenController : TokenController ,
70+ feedCoordinator : ActivityFeedCoordinator ,
6871) : BaseViewModel2<BuySellSwapTokenViewModel.State, BuySellSwapTokenViewModel.Event>(
6972 initialState = State (),
7073 updateStateForEvent = updateStateForEvent,
7174) {
72-
7375 private val numberInputHelper = NumberInputHelper ()
7476
7577 data class State (
@@ -93,7 +95,7 @@ class BuySellSwapTokenViewModel @Inject constructor(
9395 val tokenName: String
9496 get() = tokenWithBalance?.token?.name.orEmpty()
9597 val canTransact: Boolean
96- get() = (amountEntryState.amountAnimatedModel.amountData.amount) > 0.00
98+ get() = (amountEntryState.amountAnimatedModel.amountData.amount) > 0.00 && buyProgress.isIdle && sellProgress.isIdle && processingProgress.isIdle
9799
98100 val maxAvailableToSwap: String
99101 get() = when (purpose) {
@@ -475,6 +477,7 @@ class BuySellSwapTokenViewModel @Inject constructor(
475477 )
476478
477479 dispatchEvent(Event .OnAmountAccepted (amountFiat))
480+ dispatchEvent(Event .UpdateBuyState (loading = true ))
478481 dispatchEvent(
479482 Event .CreateAndSendTransactionToWallet (
480483 token = stateFlow.value.tokenWithBalance!! .token,
@@ -509,6 +512,7 @@ class BuySellSwapTokenViewModel @Inject constructor(
509512
510513 eventFlow
511514 .filterIsInstance<Event .ProceedWithPurchase >()
515+ .onEach { dispatchEvent(Event .UpdateBuyState (loading = true )) }
512516 .map { it.amount }
513517 .mapNotNull { amount ->
514518 val owner = userManager.accountCluster ? : return @mapNotNull null
@@ -537,6 +541,7 @@ class BuySellSwapTokenViewModel @Inject constructor(
537541
538542 eventFlow
539543 .filterIsInstance<Event .ProceedWithSale >()
544+ .onEach { dispatchEvent(Event .UpdateSellState (loading = true )) }
540545 .map { it.amount }
541546 .mapNotNull { amount ->
542547 val owner = userManager.accountCluster ? : return @mapNotNull null
@@ -581,6 +586,10 @@ class BuySellSwapTokenViewModel @Inject constructor(
581586 onSuccess = {
582587 val token = stateFlow.value.tokenWithBalance!! .token
583588 viewModelScope.launch { tokenController.updateTokenAccount(token) }
589+ viewModelScope.launch {
590+ // update activity feed to grab the tx as a result of this buy/sell
591+ feedCoordinator.fetchSinceLatest()
592+ }
584593 dispatchEvent(Event .OnTransactionSuccessful )
585594 dispatchEvent(Event .UpdateProcessingState (loading = false , success = true ))
586595 },
0 commit comments