Renders the fork information at the second line for the Master Note as well.
This commit is contained in:
@@ -1088,7 +1088,7 @@ fun SecondUserInfoRow(
|
|||||||
) {
|
) {
|
||||||
Column(modifier = remember(noteEvent) { Modifier.weight(1f) }) {
|
Column(modifier = remember(noteEvent) { Modifier.weight(1f) }) {
|
||||||
if (noteEvent is IForkableEvent && noteEvent.isAFork()) {
|
if (noteEvent is IForkableEvent && noteEvent.isAFork()) {
|
||||||
ShowForkInformation(noteEvent, remember(noteEvent) { Modifier.weight(1f) }, accountViewModel, nav)
|
ShowForkInformation(noteEvent, Modifier, accountViewModel, nav)
|
||||||
} else {
|
} else {
|
||||||
ObserveDisplayNip05Status(noteAuthor, accountViewModel, nav)
|
ObserveDisplayNip05Status(noteAuthor, accountViewModel, nav)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,32 +21,24 @@
|
|||||||
package com.vitorpamplona.amethyst.ui.note.elements
|
package com.vitorpamplona.amethyst.ui.note.elements
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.Spacer
|
|
||||||
import androidx.compose.material3.LocalTextStyle
|
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Text
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.text.buildAnnotatedString
|
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
|
||||||
import com.vitorpamplona.amethyst.R
|
import com.vitorpamplona.amethyst.R
|
||||||
import com.vitorpamplona.amethyst.model.Note
|
import com.vitorpamplona.amethyst.model.Note
|
||||||
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.observeNote
|
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.observeNote
|
||||||
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.observeUser
|
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.observeUser
|
||||||
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.observeUserInfo
|
|
||||||
import com.vitorpamplona.amethyst.ui.components.CreateClickableTextWithEmoji
|
import com.vitorpamplona.amethyst.ui.components.CreateClickableTextWithEmoji
|
||||||
import com.vitorpamplona.amethyst.ui.components.LoadNote
|
import com.vitorpamplona.amethyst.ui.components.LoadNote
|
||||||
import com.vitorpamplona.amethyst.ui.components.appendLink
|
|
||||||
import com.vitorpamplona.amethyst.ui.navigation.navs.INav
|
import com.vitorpamplona.amethyst.ui.navigation.navs.INav
|
||||||
import com.vitorpamplona.amethyst.ui.navigation.routes.routeFor
|
import com.vitorpamplona.amethyst.ui.navigation.routes.routeFor
|
||||||
import com.vitorpamplona.amethyst.ui.note.LoadAddressableNote
|
import com.vitorpamplona.amethyst.ui.note.LoadAddressableNote
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
||||||
import com.vitorpamplona.amethyst.ui.stringRes
|
import com.vitorpamplona.amethyst.ui.stringRes
|
||||||
import com.vitorpamplona.amethyst.ui.theme.Font14SP
|
import com.vitorpamplona.amethyst.ui.theme.Font14SP
|
||||||
import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer
|
|
||||||
import com.vitorpamplona.amethyst.ui.theme.nip05
|
|
||||||
import com.vitorpamplona.quartz.experimental.forks.IForkableEvent
|
import com.vitorpamplona.quartz.experimental.forks.IForkableEvent
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -86,30 +78,14 @@ fun ForkInformationRowLightColor(
|
|||||||
val route = remember(note) { routeFor(note, accountViewModel.account) }
|
val route = remember(note) { routeFor(note, accountViewModel.account) }
|
||||||
|
|
||||||
if (route != null) {
|
if (route != null) {
|
||||||
Row(modifier) {
|
Row(modifier, verticalAlignment = Alignment.CenterVertically) {
|
||||||
Text(
|
|
||||||
text =
|
|
||||||
buildAnnotatedString {
|
|
||||||
appendLink(stringRes(id = R.string.forked_from) + " ") {
|
|
||||||
nav.nav(route)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
style =
|
|
||||||
LocalTextStyle.current.copy(
|
|
||||||
color = MaterialTheme.colorScheme.nip05,
|
|
||||||
fontSize = Font14SP,
|
|
||||||
),
|
|
||||||
maxLines = 1,
|
|
||||||
overflow = TextOverflow.Visible,
|
|
||||||
)
|
|
||||||
|
|
||||||
val userState by observeUser(author, accountViewModel)
|
val userState by observeUser(author, accountViewModel)
|
||||||
userState?.user?.toBestDisplayName()?.let {
|
userState?.user?.toBestDisplayName()?.let {
|
||||||
CreateClickableTextWithEmoji(
|
CreateClickableTextWithEmoji(
|
||||||
clickablePart = it,
|
clickablePart = stringRes(id = R.string.forked_from) + " " + it,
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
route = route,
|
route = route,
|
||||||
overrideColor = MaterialTheme.colorScheme.nip05,
|
overrideColor = MaterialTheme.colorScheme.primary,
|
||||||
fontSize = Font14SP,
|
fontSize = Font14SP,
|
||||||
nav = nav,
|
nav = nav,
|
||||||
tags = userState?.user?.info?.tags,
|
tags = userState?.user?.info?.tags,
|
||||||
@@ -118,35 +94,3 @@ fun ForkInformationRowLightColor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun ForkInformationRow(
|
|
||||||
originalVersion: Note,
|
|
||||||
modifier: Modifier = Modifier,
|
|
||||||
accountViewModel: AccountViewModel,
|
|
||||||
nav: INav,
|
|
||||||
) {
|
|
||||||
val noteState by observeNote(originalVersion, accountViewModel)
|
|
||||||
val note = noteState.note
|
|
||||||
val route = remember(note) { routeFor(note, accountViewModel.account) }
|
|
||||||
|
|
||||||
if (route != null) {
|
|
||||||
Row(modifier) {
|
|
||||||
val author = note.author ?: return
|
|
||||||
val meta by observeUserInfo(author, accountViewModel)
|
|
||||||
|
|
||||||
Text(stringRes(id = R.string.forked_from))
|
|
||||||
Spacer(modifier = StdHorzSpacer)
|
|
||||||
|
|
||||||
val userMetadata by observeUserInfo(author, accountViewModel)
|
|
||||||
|
|
||||||
CreateClickableTextWithEmoji(
|
|
||||||
clickablePart = remember(meta) { meta?.bestName() ?: author.pubkeyDisplayHex() },
|
|
||||||
maxLines = 1,
|
|
||||||
route = route,
|
|
||||||
nav = nav,
|
|
||||||
tags = userMetadata?.tags,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
+11
-40
@@ -113,9 +113,9 @@ import com.vitorpamplona.amethyst.ui.note.elements.DisplayFollowingHashtagsInPos
|
|||||||
import com.vitorpamplona.amethyst.ui.note.elements.DisplayLocation
|
import com.vitorpamplona.amethyst.ui.note.elements.DisplayLocation
|
||||||
import com.vitorpamplona.amethyst.ui.note.elements.DisplayPoW
|
import com.vitorpamplona.amethyst.ui.note.elements.DisplayPoW
|
||||||
import com.vitorpamplona.amethyst.ui.note.elements.DisplayReward
|
import com.vitorpamplona.amethyst.ui.note.elements.DisplayReward
|
||||||
import com.vitorpamplona.amethyst.ui.note.elements.ForkInformationRow
|
|
||||||
import com.vitorpamplona.amethyst.ui.note.elements.MoreOptionsButton
|
import com.vitorpamplona.amethyst.ui.note.elements.MoreOptionsButton
|
||||||
import com.vitorpamplona.amethyst.ui.note.elements.Reward
|
import com.vitorpamplona.amethyst.ui.note.elements.Reward
|
||||||
|
import com.vitorpamplona.amethyst.ui.note.elements.ShowForkInformation
|
||||||
import com.vitorpamplona.amethyst.ui.note.elements.TimeAgo
|
import com.vitorpamplona.amethyst.ui.note.elements.TimeAgo
|
||||||
import com.vitorpamplona.amethyst.ui.note.observeEdits
|
import com.vitorpamplona.amethyst.ui.note.observeEdits
|
||||||
import com.vitorpamplona.amethyst.ui.note.showAmount
|
import com.vitorpamplona.amethyst.ui.note.showAmount
|
||||||
@@ -187,11 +187,10 @@ import com.vitorpamplona.quartz.experimental.audio.header.AudioHeaderEvent
|
|||||||
import com.vitorpamplona.quartz.experimental.audio.track.AudioTrackEvent
|
import com.vitorpamplona.quartz.experimental.audio.track.AudioTrackEvent
|
||||||
import com.vitorpamplona.quartz.experimental.bounties.bountyBaseReward
|
import com.vitorpamplona.quartz.experimental.bounties.bountyBaseReward
|
||||||
import com.vitorpamplona.quartz.experimental.edits.TextNoteModificationEvent
|
import com.vitorpamplona.quartz.experimental.edits.TextNoteModificationEvent
|
||||||
import com.vitorpamplona.quartz.experimental.forks.forkFromAddress
|
import com.vitorpamplona.quartz.experimental.forks.IForkableEvent
|
||||||
import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStoryBaseEvent
|
import com.vitorpamplona.quartz.experimental.interactiveStories.InteractiveStoryBaseEvent
|
||||||
import com.vitorpamplona.quartz.experimental.medical.FhirResourceEvent
|
import com.vitorpamplona.quartz.experimental.medical.FhirResourceEvent
|
||||||
import com.vitorpamplona.quartz.experimental.nip95.header.FileStorageHeaderEvent
|
import com.vitorpamplona.quartz.experimental.nip95.header.FileStorageHeaderEvent
|
||||||
import com.vitorpamplona.quartz.experimental.nipsOnNostr.NipTextEvent
|
|
||||||
import com.vitorpamplona.quartz.experimental.publicMessages.PublicMessageEvent
|
import com.vitorpamplona.quartz.experimental.publicMessages.PublicMessageEvent
|
||||||
import com.vitorpamplona.quartz.experimental.zapPolls.PollNoteEvent
|
import com.vitorpamplona.quartz.experimental.zapPolls.PollNoteEvent
|
||||||
import com.vitorpamplona.quartz.nip01Core.core.Event
|
import com.vitorpamplona.quartz.nip01Core.core.Event
|
||||||
@@ -509,11 +508,15 @@ private fun FullBleedNoteCompose(
|
|||||||
Column(
|
Column(
|
||||||
remember { Modifier.weight(1f) },
|
remember { Modifier.weight(1f) },
|
||||||
) {
|
) {
|
||||||
ObserveDisplayNip05Status(
|
if (noteEvent is IForkableEvent && noteEvent.isAFork()) {
|
||||||
baseNote,
|
ShowForkInformation(noteEvent, Modifier, accountViewModel, nav)
|
||||||
accountViewModel,
|
} else {
|
||||||
nav,
|
ObserveDisplayNip05Status(
|
||||||
)
|
baseNote,
|
||||||
|
accountViewModel,
|
||||||
|
nav,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val geo = remember { noteEvent.geoHashOrScope() }
|
val geo = remember { noteEvent.geoHashOrScope() }
|
||||||
@@ -546,7 +549,6 @@ private fun FullBleedNoteCompose(
|
|||||||
is BadgeDefinitionEvent -> BadgeDisplay(baseNote = baseNote, accountViewModel)
|
is BadgeDefinitionEvent -> BadgeDisplay(baseNote = baseNote, accountViewModel)
|
||||||
is LongTextNoteEvent -> RenderLongFormHeaderForThread(noteEvent, baseNote, accountViewModel)
|
is LongTextNoteEvent -> RenderLongFormHeaderForThread(noteEvent, baseNote, accountViewModel)
|
||||||
is WikiNoteEvent -> RenderWikiHeaderForThread(noteEvent, accountViewModel, nav)
|
is WikiNoteEvent -> RenderWikiHeaderForThread(noteEvent, accountViewModel, nav)
|
||||||
is NipTextEvent -> RenderNipHeaderForThread(noteEvent, accountViewModel, nav)
|
|
||||||
is ClassifiedsEvent -> RenderClassifiedsReaderForThread(noteEvent, baseNote, accountViewModel, nav)
|
is ClassifiedsEvent -> RenderClassifiedsReaderForThread(noteEvent, baseNote, accountViewModel, nav)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1110,8 +1112,6 @@ private fun RenderWikiHeaderForThread(
|
|||||||
accountViewModel: AccountViewModel,
|
accountViewModel: AccountViewModel,
|
||||||
nav: INav,
|
nav: INav,
|
||||||
) {
|
) {
|
||||||
val forkedAddress = remember(noteEvent) { noteEvent.forkFromAddress() }
|
|
||||||
|
|
||||||
Row(modifier = Modifier.padding(start = 12.dp, end = 12.dp, bottom = 12.dp)) {
|
Row(modifier = Modifier.padding(start = 12.dp, end = 12.dp, bottom = 12.dp)) {
|
||||||
Column {
|
Column {
|
||||||
noteEvent.image()?.let {
|
noteEvent.image()?.let {
|
||||||
@@ -1137,14 +1137,6 @@ private fun RenderWikiHeaderForThread(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
forkedAddress?.let {
|
|
||||||
LoadAddressableNote(it, accountViewModel) { originalVersion ->
|
|
||||||
if (originalVersion != null) {
|
|
||||||
ForkInformationRow(originalVersion, Modifier.fillMaxWidth(), accountViewModel, nav)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
noteEvent
|
noteEvent
|
||||||
.summary()
|
.summary()
|
||||||
?.ifBlank { null }
|
?.ifBlank { null }
|
||||||
@@ -1159,24 +1151,3 @@ private fun RenderWikiHeaderForThread(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
|
||||||
private fun RenderNipHeaderForThread(
|
|
||||||
noteEvent: NipTextEvent,
|
|
||||||
accountViewModel: AccountViewModel,
|
|
||||||
nav: INav,
|
|
||||||
) {
|
|
||||||
val forkedAddress = remember(noteEvent) { noteEvent.forkFromAddress() }
|
|
||||||
|
|
||||||
Row(modifier = Modifier.padding(start = 12.dp, end = 12.dp, bottom = 12.dp)) {
|
|
||||||
Column {
|
|
||||||
forkedAddress?.let {
|
|
||||||
LoadAddressableNote(it, accountViewModel) { originalVersion ->
|
|
||||||
if (originalVersion != null) {
|
|
||||||
ForkInformationRow(originalVersion, Modifier.fillMaxWidth(), accountViewModel, nav)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user