feat: nwc details
This commit is contained in:
@@ -62,6 +62,8 @@ import com.bitcointxoko.gudariwallet.ui.history.HistoryViewModel
|
||||
import com.bitcointxoko.gudariwallet.ui.history.HistoryViewModelFactory
|
||||
import com.bitcointxoko.gudariwallet.ui.history.PaymentDetailScreen
|
||||
import com.bitcointxoko.gudariwallet.ui.nfc.NfcViewModel
|
||||
import com.bitcointxoko.gudariwallet.ui.nwc.ConnectionDetailScreen
|
||||
import com.bitcointxoko.gudariwallet.ui.nwc.ConnectionDetailState
|
||||
import com.bitcointxoko.gudariwallet.ui.nwc.NwcScreen
|
||||
import com.bitcointxoko.gudariwallet.ui.nwc.NwcViewModel
|
||||
import com.bitcointxoko.gudariwallet.ui.receive.ReceiveScreen
|
||||
@@ -84,6 +86,7 @@ private const val ROUTE_SCANNER = "scanner"
|
||||
private const val ROUTE_HISTORY = "history"
|
||||
private const val ROUTE_PAYMENT_DETAIL = "payment_detail/{checkingId}"
|
||||
private const val ROUTE_NWC = "nwc"
|
||||
private const val ROUTE_CONNECTION_DETAIL = "connection_detail/{pubkey}"
|
||||
|
||||
@Composable
|
||||
fun WalletScreen(
|
||||
@@ -134,11 +137,13 @@ fun WalletScreen(
|
||||
&& currentRoute != ROUTE_SCANNER
|
||||
&& currentRoute != ROUTE_HISTORY
|
||||
&& currentRoute != ROUTE_NWC
|
||||
&& currentRoute != ROUTE_CONNECTION_DETAIL
|
||||
|
||||
val isFullScreenDestination = currentRoute == ROUTE_HISTORY
|
||||
|| currentRoute == ROUTE_PAYMENT_DETAIL
|
||||
|| currentRoute == ROUTE_SCANNER
|
||||
|| currentRoute == ROUTE_NWC
|
||||
|| currentRoute == ROUTE_CONNECTION_DETAIL
|
||||
|
||||
// ── Notification tap ──────────────────────────────────────────────────────
|
||||
val hash = pendingPaymentHash.value
|
||||
@@ -437,9 +442,61 @@ fun WalletScreen(
|
||||
viewModel = nwcVm,
|
||||
onBack = {
|
||||
navController.popBackStack(ROUTE_HOME, inclusive = false)
|
||||
},
|
||||
onConnectionClick = { pubkey ->
|
||||
navController.navigate("connection_detail/$pubkey") {
|
||||
launchSingleTop = true
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
composable(
|
||||
route = ROUTE_CONNECTION_DETAIL,
|
||||
arguments = listOf(navArgument("pubkey") { type = NavType.StringType }),
|
||||
enterTransition = { fadeIn(animationSpec = tween(150)) },
|
||||
popExitTransition = { fadeOut(animationSpec = tween(150)) }
|
||||
) { backStackEntry ->
|
||||
val pubkey = backStackEntry.arguments?.getString("pubkey") ?: ""
|
||||
|
||||
val connectionState by nwcVm.connectionDetailState.collectAsStateWithLifecycle()
|
||||
|
||||
LaunchedEffect(pubkey) { nwcVm.loadConnectionDetail(pubkey) }
|
||||
DisposableEffect(Unit) { onDispose { nwcVm.clearConnectionDetail() } }
|
||||
|
||||
when (val state = connectionState) {
|
||||
is ConnectionDetailState.Loading -> {
|
||||
Box(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
contentAlignment = Alignment.Center
|
||||
) { CircularProgressIndicator() }
|
||||
}
|
||||
|
||||
is ConnectionDetailState.Error -> {
|
||||
Box(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
Text(
|
||||
text = state.message,
|
||||
color = MaterialTheme.colorScheme.error,
|
||||
style = MaterialTheme.typography.bodyMedium
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
is ConnectionDetailState.Success -> {
|
||||
ConnectionDetailScreen(
|
||||
connection = state.connection,
|
||||
budgets = state.budgets,
|
||||
onBack = { navController.popBackStack() },
|
||||
onRevoke = {
|
||||
nwcVm.revokeConnection(pubkey)
|
||||
navController.popBackStack()
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ── Clipboard banner — floats over content, slides in from top ────
|
||||
|
||||
Reference in New Issue
Block a user