mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-10 16:33:27 +00:00
fix(nwc): scope Send/Receive/Transactions to the wallet shown in the detail screen
The wallet detail screen's Send, Receive and Transactions buttons navigated to parameterless routes. Each destination created a fresh WalletViewModel with no selection, so the action ran against `_defaultWalletId` (the account default) instead of the wallet being viewed. Paying, invoicing, and listing transactions could therefore go to the wrong wallet. Parameterize WalletSend/WalletReceive/WalletTransactions with `walletId`, plumb it through AppNavigation, pass it from WalletDetailScreen, and have each screen call `selectWallet(walletId)` before operating.
This commit is contained in:
@@ -285,9 +285,9 @@ fun BuildNavigation(
|
||||
composable<Route.Chess> { ChessLobbyScreen(accountViewModel, nav) }
|
||||
|
||||
composableFromEnd<Route.Wallet> { WalletScreen(accountViewModel, nav) }
|
||||
composableFromEnd<Route.WalletSend> { WalletSendScreen(accountViewModel, nav) }
|
||||
composableFromEnd<Route.WalletReceive> { WalletReceiveScreen(accountViewModel, nav) }
|
||||
composableFromEnd<Route.WalletTransactions> { WalletTransactionsScreen(accountViewModel, nav) }
|
||||
composableFromEndArgs<Route.WalletSend> { WalletSendScreen(it.walletId, accountViewModel, nav) }
|
||||
composableFromEndArgs<Route.WalletReceive> { WalletReceiveScreen(it.walletId, accountViewModel, nav) }
|
||||
composableFromEndArgs<Route.WalletTransactions> { WalletTransactionsScreen(it.walletId, accountViewModel, nav) }
|
||||
composableFromEnd<Route.OnchainTransactions> { OnchainTransactionsScreen(accountViewModel, nav) }
|
||||
composableFromEndArgs<Route.WalletDetail> { WalletDetailScreen(it.walletId, accountViewModel, nav) }
|
||||
composableFromEnd<Route.WalletAdd> { AddWalletScreen(accountViewModel, nav) }
|
||||
|
||||
@@ -146,11 +146,20 @@ sealed class Route {
|
||||
|
||||
@Serializable object Wallet : Route()
|
||||
|
||||
@Serializable object WalletSend : Route()
|
||||
@Serializable
|
||||
data class WalletSend(
|
||||
val walletId: String,
|
||||
) : Route()
|
||||
|
||||
@Serializable object WalletReceive : Route()
|
||||
@Serializable
|
||||
data class WalletReceive(
|
||||
val walletId: String,
|
||||
) : Route()
|
||||
|
||||
@Serializable object WalletTransactions : Route()
|
||||
@Serializable
|
||||
data class WalletTransactions(
|
||||
val walletId: String,
|
||||
) : Route()
|
||||
|
||||
@Serializable object OnchainTransactions : Route()
|
||||
|
||||
|
||||
+3
-3
@@ -149,7 +149,7 @@ fun WalletDetailScreen(
|
||||
horizontalArrangement = Arrangement.spacedBy(16.dp),
|
||||
) {
|
||||
Button(
|
||||
onClick = { nav.nav(Route.WalletReceive) },
|
||||
onClick = { nav.nav(Route.WalletReceive(walletId)) },
|
||||
modifier =
|
||||
Modifier
|
||||
.weight(1f)
|
||||
@@ -171,7 +171,7 @@ fun WalletDetailScreen(
|
||||
}
|
||||
|
||||
Button(
|
||||
onClick = { nav.nav(Route.WalletSend) },
|
||||
onClick = { nav.nav(Route.WalletSend(walletId)) },
|
||||
modifier =
|
||||
Modifier
|
||||
.weight(1f)
|
||||
@@ -192,7 +192,7 @@ fun WalletDetailScreen(
|
||||
|
||||
// Transactions button
|
||||
OutlinedButton(
|
||||
onClick = { nav.nav(Route.WalletTransactions) },
|
||||
onClick = { nav.nav(Route.WalletTransactions(walletId)) },
|
||||
modifier =
|
||||
Modifier
|
||||
.fillMaxWidth()
|
||||
|
||||
+3
-1
@@ -74,13 +74,15 @@ import java.text.NumberFormat
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun WalletReceiveScreen(
|
||||
walletId: String,
|
||||
accountViewModel: AccountViewModel,
|
||||
nav: INav,
|
||||
) {
|
||||
val walletViewModel: WalletViewModel = viewModel()
|
||||
|
||||
LaunchedEffect(accountViewModel) {
|
||||
LaunchedEffect(accountViewModel, walletId) {
|
||||
walletViewModel.init(accountViewModel)
|
||||
walletViewModel.selectWallet(walletId)
|
||||
}
|
||||
|
||||
DisposableEffect(Unit) {
|
||||
|
||||
+3
-1
@@ -64,13 +64,15 @@ import com.vitorpamplona.amethyst.ui.stringRes
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun WalletSendScreen(
|
||||
walletId: String,
|
||||
accountViewModel: AccountViewModel,
|
||||
nav: INav,
|
||||
) {
|
||||
val walletViewModel: WalletViewModel = viewModel()
|
||||
|
||||
LaunchedEffect(accountViewModel) {
|
||||
LaunchedEffect(accountViewModel, walletId) {
|
||||
walletViewModel.init(accountViewModel)
|
||||
walletViewModel.selectWallet(walletId)
|
||||
}
|
||||
|
||||
DisposableEffect(Unit) {
|
||||
|
||||
+3
-1
@@ -73,13 +73,15 @@ import java.util.Locale
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun WalletTransactionsScreen(
|
||||
walletId: String,
|
||||
accountViewModel: AccountViewModel,
|
||||
nav: INav,
|
||||
) {
|
||||
val walletViewModel: WalletViewModel = viewModel()
|
||||
|
||||
LaunchedEffect(accountViewModel) {
|
||||
LaunchedEffect(accountViewModel, walletId) {
|
||||
walletViewModel.init(accountViewModel)
|
||||
walletViewModel.selectWallet(walletId)
|
||||
walletViewModel.fetchTransactions()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user