feat(ui): a member on the room's screen opens the profile preview

The member rows on the chat room detail were the last "Profile detail" stub
in the app: each pushed ImplementationPendingRoute. They now push
ProfilePreviewRoute by the member's public key, which the nav host already
serves, so a member arrives with the cached profile at once and the relays
refreshing it, and the bar's action opens the chat that exists with them or
starts one.

The preview rather than the profile detail, because the detail is keyed by a
kind 0's event id and a member whose profile has not arrived yet -- the
"LOADING..." row MemberProfileSync exists for -- has none. The public key is
the one thing every row has. A test pins both members opening the same
screen, the named one and the one still named by its key.

Replayed onto Mantra by docs/curated-to-mantra.md: ChatRoomDetailScreen.kt: the ImplementationPendingRoute import this commit removes is kept -- upstream's file had no other use for it once 808a3459 dropped the library, dialects and projects sections, and Mantra's projects section, which it kept, still routes "Add new project" through it. A semantic conflict rather than a textual one: the pick applied cleanly and the compiler found it; GroupSignedWorkFixtures.kt: the test this commit adds composes the screen against the fork's fixture of that name, which went with lines B, D and H -- it is recreated here reduced to the room alone, under the same names, so the test lands byte for byte.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Pulled-From: curated/curated@272b631633
This commit is contained in:
Kgothatso Ngako
2026-09-13 14:44:57 +02:00
parent e66c174b4f
commit 4899dcbca7
3 changed files with 169 additions and 2 deletions

View File

@@ -67,6 +67,7 @@ import press.mantra.compose.repository.ChatRepository
import press.mantra.compose.repository.MantraRepository
import press.mantra.compose.repository.NostrRepository
import press.mantra.compose.ui.composable.navigation.routes.ImplementationPendingRoute
import press.mantra.compose.ui.composable.navigation.routes.ProfilePreviewRoute
import press.mantra.compose.ui.composable.navigation.routes.Route
import press.mantra.compose.ui.composable.navigation.routes.DkgRitualRoute
import press.mantra.compose.ui.composable.navigation.routes.ProposalListRoute
@@ -693,11 +694,19 @@ fun ChatRoomDetailScreen(
key = { localParticipant -> localParticipant.participant.participantPublicKey}
) { localParticipant ->
// The preview, not the profile detail: the detail is
// keyed by a kind 0's event id, and a member whose
// profile has not arrived yet -- the "LOADING..." row
// the sync exists for -- has none. The preview is
// keyed by the public key, which is the one thing
// every row here has, and it shows the cached
// profile at once while the relays refresh it.
Card(
onClick = {
onNavigateToRoute.invoke(
ImplementationPendingRoute(
"Profile detail"
ProfilePreviewRoute(
activeUserPublicKey = activeUserPublicKey,
profilePublicKey = localParticipant.participant.participantPublicKey
)
)
}