enhancement: navigate to contact details from successful send

This commit is contained in:
2026-06-13 20:16:40 +02:00
parent ebeac511b7
commit 0e7469053d
3 changed files with 28 additions and 22 deletions
@@ -382,6 +382,11 @@ fun WalletScreen(
launchSingleTop = true launchSingleTop = true
} }
}, },
onViewContact = { contactId ->
navController.navigate("contacts/$contactId") {
launchSingleTop = true
}
},
sendStrings sendStrings
) )
} }
@@ -42,12 +42,16 @@ fun PaymentSuccessContent(
onSecondary : () -> Unit, onSecondary : () -> Unit,
lnurl : String? = null, lnurl : String? = null,
onSaveContact : ((name: String, addressType: PaymentAddressType?, address: String?) -> Unit)? = null, onSaveContact : ((name: String, addressType: PaymentAddressType?, address: String?) -> Unit)? = null,
onViewContact : ((contactId: String) -> Unit)? = null,
contactId : String? = null,
contactName : String? = null contactName : String? = null
) { ) {
var showSaveSheet by remember { mutableStateOf(false) } var showSaveSheet by remember { mutableStateOf(false) }
Column( Column(
modifier = Modifier.fillMaxSize().padding(24.dp), modifier = Modifier
.fillMaxSize()
.padding(24.dp),
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center verticalArrangement = Arrangement.Center
) { ) {
@@ -69,34 +73,28 @@ fun PaymentSuccessContent(
color = MaterialTheme.colorScheme.onSurfaceVariant color = MaterialTheme.colorScheme.onSurfaceVariant
) )
} }
Spacer(Modifier.height(32.dp))
// ── Save contact affordance (send-side only) ───────────────────────── // ── Save contact affordance (send-side only) ─────────────────────────
when { when {
contactName != null -> { contactName != null -> {
// Contact already known — show their name // Contact already known — show their name
Spacer(Modifier.height(16.dp)) val canNavigate = contactId != null && onViewContact != null
Row( AssistChip(
verticalAlignment = Alignment.CenterVertically, onClick = { if (canNavigate) onViewContact!!(contactId!!) },
horizontalArrangement = Arrangement.Center, label = { Text(contactName) },
) { leadingIcon = {
Icon( Icon(
imageVector = Icons.Filled.Person, imageVector = Icons.Filled.Person,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.primary, modifier = Modifier.size(AssistChipDefaults.IconSize)
modifier = Modifier.size(18.dp) )
) },
Spacer(Modifier.width(6.dp)) enabled = canNavigate
Text( )
text = contactName,
style = MaterialTheme.typography.titleMedium,
color = MaterialTheme.colorScheme.primary,
)
}
} }
lnurl != null && onSaveContact != null -> { lnurl != null && onSaveContact != null -> {
// Unknown sender — offer to save // Unknown sender — offer to save
Spacer(Modifier.height(16.dp))
OutlinedButton( OutlinedButton(
onClick = { showSaveSheet = true }, onClick = { showSaveSheet = true },
modifier = Modifier.fillMaxWidth() modifier = Modifier.fillMaxWidth()
@@ -45,6 +45,7 @@ fun SendScreen(
vm : WalletViewModel, vm : WalletViewModel,
nfcVm : NfcViewModel, nfcVm : NfcViewModel,
onViewDetails: (paymentHash: String, record: PaymentRecord) -> Unit = { _, _ -> }, onViewDetails: (paymentHash: String, record: PaymentRecord) -> Unit = { _, _ -> },
onViewContact: ((contactId: String) -> Unit)? = null,
sendStrings: SendStrings sendStrings: SendStrings
) { ) {
val strings = LocalAppStrings.current val strings = LocalAppStrings.current
@@ -308,7 +309,9 @@ fun SendScreen(
onSecondary = { vm.resetSendState(); input = "" }, onSecondary = { vm.resetSendState(); input = "" },
lnurl = state.lnurl, // null for plain Bolt11 lnurl = state.lnurl, // null for plain Bolt11
onSaveContact = vm::saveContactFromSend, onSaveContact = vm::saveContactFromSend,
contactName = state.contactName contactName = state.contactName,
contactId = state.contactId,
onViewContact = onViewContact
) )
} }