Skip to content

Commit 0c8fd71

Browse files
authored
Merge pull request #91 from synonymdev/feat/navigate-send-detail
Navigate to Send Detail Screen
2 parents a595577 + 1eee6a9 commit 0c8fd71

File tree

4 files changed

+67
-4
lines changed

4 files changed

+67
-4
lines changed

app/src/main/java/to/bitkit/models/NewTransactionSheetDetails.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import kotlinx.serialization.Serializable
66
import to.bitkit.data.APP_PREFS
77
import to.bitkit.di.json
88
import to.bitkit.utils.Logger
9+
import uniffi.bitkitcore.ActivityFilter
10+
import uniffi.bitkitcore.PaymentType
911

1012
@Serializable
1113
data class NewTransactionSheetDetails(
@@ -60,3 +62,20 @@ enum class NewTransactionSheetType {
6062
enum class NewTransactionSheetDirection {
6163
SENT, RECEIVED
6264
}
65+
66+
fun NewTransactionSheetDirection.toTxType(): PaymentType {
67+
return if (this == NewTransactionSheetDirection.SENT) {
68+
PaymentType.SENT
69+
} else {
70+
PaymentType.RECEIVED
71+
}
72+
}
73+
74+
fun NewTransactionSheetType.toActivityFilter(): ActivityFilter {
75+
return if (this == NewTransactionSheetType.ONCHAIN) {
76+
ActivityFilter.ONCHAIN
77+
} else {
78+
ActivityFilter.LIGHTNING
79+
}
80+
}
81+

app/src/main/java/to/bitkit/ui/ContentView.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ import to.bitkit.viewmodels.AppViewModel
8181
import to.bitkit.viewmodels.BlocktankViewModel
8282
import to.bitkit.viewmodels.CurrencyViewModel
8383
import to.bitkit.viewmodels.ExternalNodeViewModel
84+
import to.bitkit.viewmodels.MainScreenEffect
8485
import to.bitkit.viewmodels.TransferViewModel
8586
import to.bitkit.viewmodels.WalletViewModel
8687

@@ -138,6 +139,14 @@ fun ContentView(
138139
walletViewModel.observeLdkWallet()
139140
}
140141

142+
LaunchedEffect(appViewModel) {
143+
appViewModel.mainScreenEffect.collect {
144+
when (it) {
145+
is MainScreenEffect.NavigateActivityDetail -> navController.navigate(Routes.ActivityItem(it.activityId))
146+
}
147+
}
148+
}
149+
141150
val walletUiState by walletViewModel.uiState.collectAsState()
142151
val nodeLifecycleState = walletUiState.nodeLifecycleState
143152

app/src/main/java/to/bitkit/ui/screens/wallets/sheets/NewTransactionSheet.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import androidx.compose.ui.res.stringResource
2626
import androidx.compose.ui.tooling.preview.Preview
2727
import androidx.compose.ui.unit.dp
2828
import com.airbnb.lottie.compose.LottieAnimation
29-
import com.airbnb.lottie.compose.LottieClipSpec
3029
import com.airbnb.lottie.compose.LottieCompositionSpec
3130
import com.airbnb.lottie.compose.rememberLottieComposition
3231
import to.bitkit.R
@@ -51,7 +50,11 @@ fun NewTransactionSheet(
5150
NewTransactionSheet(
5251
onDismissRequest = { appViewModel.hideNewTransactionSheet() },
5352
details = appViewModel.newTransaction,
54-
onCloseClick = { appViewModel.hideNewTransactionSheet() }
53+
onCloseClick = { appViewModel.hideNewTransactionSheet() },
54+
onDetailClick = {
55+
appViewModel.hideNewTransactionSheet()
56+
appViewModel.onClickActivityDetail()
57+
},
5558
)
5659
}
5760

@@ -60,7 +63,8 @@ fun NewTransactionSheet(
6063
fun NewTransactionSheet(
6164
onDismissRequest: () -> Unit,
6265
details: NewTransactionSheetDetails,
63-
onCloseClick: () -> Unit
66+
onCloseClick: () -> Unit,
67+
onDetailClick: () -> Unit
6468
) {
6569
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
6670

@@ -77,7 +81,7 @@ fun NewTransactionSheet(
7781
NewTransactionSheetView(
7882
details = details,
7983
onCloseClick = onCloseClick,
80-
onDetailClick = onCloseClick //TODO IMPLEMENT
84+
onDetailClick = onDetailClick
8185
)
8286
}
8387
}

app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ import to.bitkit.models.NewTransactionSheetDetails
2929
import to.bitkit.models.NewTransactionSheetDirection
3030
import to.bitkit.models.NewTransactionSheetType
3131
import to.bitkit.models.Toast
32+
import to.bitkit.models.toActivityFilter
33+
import to.bitkit.models.toTxType
3234
import to.bitkit.services.CoreService
3335
import to.bitkit.services.LdkNodeEventBus
3436
import to.bitkit.services.LightningService
@@ -69,6 +71,10 @@ class AppViewModel @Inject constructor(
6971
val sendEffect = _sendEffect.asSharedFlow()
7072
private fun setSendEffect(effect: SendEffect) = viewModelScope.launch { _sendEffect.emit(effect) }
7173

74+
private val _mainScreenEffect = MutableSharedFlow<MainScreenEffect>(replay = 0, extraBufferCapacity = 1)
75+
val mainScreenEffect = _mainScreenEffect.asSharedFlow()
76+
private fun mainScreenEffect(effect: MainScreenEffect) = viewModelScope.launch { _mainScreenEffect.emit(effect) }
77+
7278
private val sendEvents = MutableSharedFlow<SendEvent>()
7379
fun setSendEvent(event: SendEvent) = viewModelScope.launch { sendEvents.emit(event) }
7480

@@ -505,6 +511,27 @@ class AppViewModel @Inject constructor(
505511
}
506512
}
507513

514+
fun onClickActivityDetail() {
515+
val filter = newTransaction.type.toActivityFilter()
516+
val paymentType = newTransaction.direction.toTxType()
517+
518+
viewModelScope.launch(Dispatchers.IO) {
519+
val activity = coreService.activity.get(filter = filter, txType = paymentType, limit = 1u).firstOrNull()
520+
521+
if (activity == null) {
522+
Logger.error(msg = "Activity not found")
523+
return@launch
524+
}
525+
526+
val id = when(activity) {
527+
is Activity.Lightning -> activity.v1.id
528+
is Activity.Onchain -> activity.v1.id
529+
}
530+
531+
mainScreenEffect(MainScreenEffect.NavigateActivityDetail(id))
532+
}
533+
}
534+
508535
private fun attachTagsToActivity(paymentHashOrTxId: String?, type: ActivityFilter) {
509536
val tags = _sendUiState.value.selectedTags
510537
Logger.debug("attachTagsToActivity $tags")
@@ -730,6 +757,10 @@ sealed class SendEffect {
730757
data class PaymentSuccess(val sheet: NewTransactionSheetDetails? = null) : SendEffect()
731758
}
732759

760+
sealed class MainScreenEffect {
761+
data class NavigateActivityDetail(val activityId: String) : MainScreenEffect()
762+
}
763+
733764
sealed class SendEvent {
734765
data object EnterManually : SendEvent()
735766
data class Paste(val data: String) : SendEvent()

0 commit comments

Comments
 (0)