Merge pull request #2682 from davotoula/claude/add-reply-parent-jump-bpgWO

Jump-to-parent icon on replies in Full UI mode
This commit is contained in:
Vitor Pamplona
2026-05-01 07:45:13 -04:00
committed by GitHub
2 changed files with 42 additions and 0 deletions
@@ -62,11 +62,13 @@ import com.vitorpamplona.amethyst.commons.icons.symbols.Icon
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
import com.vitorpamplona.amethyst.commons.model.nip28PublicChats.PublicChatChannel
import com.vitorpamplona.amethyst.model.AddressableNote
import com.vitorpamplona.amethyst.model.LocalCache
import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.channel.observeChannelPicture
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.observeCommunityApprovalNeedStatus
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.observeNoteEdits
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.observeNoteEvent
import com.vitorpamplona.amethyst.ui.components.ClickableBox
import com.vitorpamplona.amethyst.ui.components.GenericLoadable
import com.vitorpamplona.amethyst.ui.components.RobohashFallbackAsyncImage
import com.vitorpamplona.amethyst.ui.layouts.GenericRepostLayout
@@ -210,6 +212,7 @@ import com.vitorpamplona.quartz.experimental.nipsOnNostr.NipTextEvent
import com.vitorpamplona.quartz.experimental.zapPolls.ZapPollEvent
import com.vitorpamplona.quartz.nip01Core.tags.geohash.geoHashOrScope
import com.vitorpamplona.quartz.nip04Dm.messages.PrivateDmEvent
import com.vitorpamplona.quartz.nip10Notes.BaseThreadedEvent
import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent
import com.vitorpamplona.quartz.nip13Pow.strongPoWOrNull
import com.vitorpamplona.quartz.nip17Dm.files.ChatMessageEncryptedFileHeaderEvent
@@ -1672,6 +1675,8 @@ fun FirstUserInfoRow(
Expiration(baseNote)
JumpToParentReplyButton(baseNote, accountViewModel, nav)
TimeAgo(baseNote)
if (moreOptions == null) {
@@ -1692,6 +1697,42 @@ fun PinnedMark() {
)
}
@Composable
fun JumpToParentReplyButton(
baseNote: Note,
accountViewModel: AccountViewModel,
nav: INav,
) {
if (!accountViewModel.settings.isCompleteUIMode()) return
if (baseNote.event !is BaseThreadedEvent) return
val parentNote =
remember(baseNote) {
val noteEvent = baseNote.event as? BaseThreadedEvent ?: return@remember null
val direct =
noteEvent
.replyingToAddressOrEvent()
?.let { accountViewModel.getNoteIfExists(it) }
?.takeIf { it.event !is CommunityDefinitionEvent && LocalCache.getAnyChannel(it) == null }
val resolved = direct ?: baseNote.replyTo?.lastOrNull { it.event !is CommunityDefinitionEvent }
resolved?.takeIf { LocalCache.getAnyChannel(it) == null }
} ?: return
ClickableBox(
modifier = Modifier.padding(start = 5.dp).size(20.dp),
onClick = {
nav.nav { routeFor(parentNote, accountViewModel.account) }
},
) {
Icon(
symbol = MaterialSymbols.KeyboardArrowUp,
contentDescription = stringRes(R.string.jump_to_parent_reply),
modifier = Modifier.size(18.dp),
tint = MaterialTheme.colorScheme.placeholderText,
)
}
}
@Composable
fun Expiration(note: Note) {
val event = note.event
+1
View File
@@ -1724,6 +1724,7 @@
<string name="close_all_reactions_to_this_post">Close all reactions to this post</string>
<string name="reply_description">Reply</string>
<string name="jump_to_parent_reply">Jump to the note this reply is replying to</string>
<string name="boost_or_quote_description">Boost Or Quote</string>
<string name="like_description">Like</string>
<string name="zap_description">Zap</string>