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