From d76d36fac95216038069e01ded4022af1b57b59c Mon Sep 17 00:00:00 2001 From: Kgothatso Ngako Date: Sun, 3 May 2026 23:05:49 +0200 Subject: [PATCH] RichContent on note preview --- .../model/intermdiate/LocalNostrEvent.kt | 15 ++++++++++----- .../ui/composable/WriteNewNoteScreen.kt | 18 ++++++++++++++---- .../ui/composable/navigation/AuxNavHost.kt | 7 +++++++ .../widgets/detail/TextNoteEventDetail.kt | 4 +++- 4 files changed, 34 insertions(+), 10 deletions(-) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalNostrEvent.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalNostrEvent.kt index 675a3b55..04083719 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalNostrEvent.kt +++ b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/model/intermdiate/LocalNostrEvent.kt @@ -7,6 +7,7 @@ import ac.cord.auxiliary.compose.database.model.Profile import ac.cord.auxiliary.compose.database.model.QuotedRelation import ac.cord.auxiliary.compose.database.model.RepostedRelation import ac.cord.auxiliary.compose.extensions.toFormattedTimeAndDateString +import ac.cord.auxiliary.compose.ui.composable.widgets.content.RichContent import ac.cord.auxiliary.compose.ui.composable.widgets.profile.ProfileAvatar import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -25,6 +26,7 @@ import androidx.room3.Embedded import androidx.room3.Ignore import androidx.room3.Junction import androidx.room3.Relation +import com.vitorpamplona.quartz.nip01Core.core.HexKey data class LocalNostrEvent( @Embedded val nostrEvent: NostrEvent, @@ -64,7 +66,9 @@ data class LocalNostrEvent( val mentionedProfiles: List = emptyList(), ) { @Composable - fun RenderNotePreview() { + fun RenderNotePreview( + onNavigateToEvent: (HexKey) -> Unit + ) { Column { Row( modifier = Modifier.fillMaxWidth().padding(12.dp), @@ -94,14 +98,15 @@ data class LocalNostrEvent( } } } - Text( + RichContent( modifier = Modifier.fillMaxWidth().padding( horizontal = 20.dp ), style = MaterialTheme.typography.labelSmall, - textAlign = TextAlign.Start, - overflow = TextOverflow.Ellipsis, - text = nostrEvent.content + nostrEvent = nostrEvent, + localQuotedNostrEvent = localQuotedNostrEvent, + mentionedProfiles = mentionedProfiles, + onNavigateToEvent = onNavigateToEvent ) Row( modifier = Modifier.fillMaxWidth().padding(20.dp), diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/WriteNewNoteScreen.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/WriteNewNoteScreen.kt index 04cc8f10..56802be5 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/WriteNewNoteScreen.kt +++ b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/WriteNewNoteScreen.kt @@ -67,6 +67,7 @@ fun WriteNewNoteScreen( replyToNostrEventId: HexKey?, quotedNostrEventId: HexKey?, onNostrEventPublished: () -> Unit, + onNavigateToNostrEvent: (HexKey) -> Unit, nostrRepository: NostrRepository ) { val writeNewNoteViewModel: WriteNewNoteViewModel = viewModel ( @@ -106,7 +107,9 @@ fun WriteNewNoteScreen( item { if (writeNewNoteUIState.inReplyToNostrEvent?.nostrEvent?.kind == TextNoteEvent.KIND) { - writeNewNoteUIState.inReplyToNostrEvent.RenderNotePreview() + writeNewNoteUIState.inReplyToNostrEvent.RenderNotePreview( + onNavigateToEvent = onNavigateToNostrEvent + ) } else { Spacer( modifier = Modifier.height(1.dp) @@ -248,7 +251,9 @@ fun WriteNewNoteScreen( top = 10.dp ) ) { - writeNewNoteUIState.quotedNostrEvent.RenderNotePreview() + writeNewNoteUIState.quotedNostrEvent.RenderNotePreview( + onNavigateToEvent = onNavigateToNostrEvent + ) } } } @@ -295,7 +300,9 @@ fun WriteNewNoteScreen( if (writeNewNoteUIState.inReplyToNostrEvent?.nostrEvent?.kind == TextNoteEvent.KIND) { Card { - writeNewNoteUIState.inReplyToNostrEvent.RenderNotePreview() + writeNewNoteUIState.inReplyToNostrEvent.RenderNotePreview( + onNavigateToEvent = onNavigateToNostrEvent + ) } @@ -375,7 +382,9 @@ fun WriteNewNoteScreen( if (writeNewNoteUIState.quotedNostrEvent?.nostrEvent?.kind == TextNoteEvent.KIND) { Card { - writeNewNoteUIState.quotedNostrEvent.RenderNotePreview() + writeNewNoteUIState.quotedNostrEvent.RenderNotePreview( + onNavigateToEvent = onNavigateToNostrEvent + ) } } @@ -499,6 +508,7 @@ It has survived not only five centuries, but also the leap into electronic types ) ), onNostrEventPublished = {}, + onNavigateToNostrEvent = {}, nostrRepository = NostrRepository.NO_OP_NOSTR_REPOSITORY) } } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/AuxNavHost.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/AuxNavHost.kt index 4b0eb473..dbbb6c38 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/AuxNavHost.kt +++ b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/navigation/AuxNavHost.kt @@ -251,6 +251,13 @@ fun AuxNavHost( navController.popBackStack() } }, + onNavigateToNostrEvent = { hexKey -> + navController.navigate( + route = NostrEventDetailRoute( + nostrEventId = hexKey + ) + ) + }, nostrRepository = databaseNostrRepository ) } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/detail/TextNoteEventDetail.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/detail/TextNoteEventDetail.kt index 0a8d327e..2d56e6b3 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/detail/TextNoteEventDetail.kt +++ b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/composable/widgets/detail/TextNoteEventDetail.kt @@ -364,7 +364,9 @@ fun TextNoteEventDetail( items = inReplyToFeedListUIState.localNostrEvents, key = { e -> "reply-${e.nostrEvent.id}" } ) { localNostrEvent -> - localNostrEvent.RenderNotePreview() + localNostrEvent.RenderNotePreview( + onNavigateToEvent = onNavigateToNostrEvent + ) } } }