common: render UserProfile text as Markdown

Fixes #324
This commit is contained in:
Harsh Shandilya 2022-06-24 15:55:22 +05:30
parent 47a7e77654
commit 5fd3ec436a
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
3 changed files with 33 additions and 38 deletions

View file

@ -13,14 +13,11 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.LocalContentColor
import androidx.compose.material.LocalTextStyle
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
@ -29,30 +26,15 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.halilibo.richtext.markdown.Markdown
import com.halilibo.richtext.ui.RichTextScope
import com.halilibo.richtext.ui.material3.Material3RichText
import dev.msfjarvis.claw.common.posts.PostActions
import dev.msfjarvis.claw.common.posts.PostTitle
import dev.msfjarvis.claw.common.posts.Submitter
import dev.msfjarvis.claw.common.posts.TagRow
import dev.msfjarvis.claw.common.res.ClawIcons
import dev.msfjarvis.claw.common.ui.ThemedRichText
import dev.msfjarvis.claw.model.Comment
import dev.msfjarvis.claw.model.LobstersPostDetails
@Composable
fun ThemedRichText(
modifier: Modifier = Modifier,
content: @Composable RichTextScope.() -> Unit,
) {
CompositionLocalProvider(
LocalTextStyle provides MaterialTheme.typography.bodyLarge,
LocalContentColor provides MaterialTheme.colorScheme.onBackground,
) {
Material3RichText(modifier) { content() }
}
}
@Composable
fun CommentsHeader(
postDetails: LobstersPostDetails,
@ -80,7 +62,7 @@ fun CommentsHeader(
}
if (postDetails.description.isNotBlank()) {
ThemedRichText { Markdown(htmlConverter.convertHTMLToMarkdown(postDetails.description)) }
ThemedRichText(htmlConverter.convertHTMLToMarkdown(postDetails.description))
Spacer(Modifier.height(4.dp))
}
Submitter(
@ -149,9 +131,10 @@ fun CommentEntry(
)
AnimatedContent(targetState = expanded) { expandedState ->
if (expandedState) {
ThemedRichText(modifier = Modifier.padding(top = 8.dp)) {
Markdown(htmlConverter.convertHTMLToMarkdown(comment.comment))
}
ThemedRichText(
text = htmlConverter.convertHTMLToMarkdown(comment.comment),
modifier = Modifier.padding(top = 8.dp)
)
}
}
}

View file

@ -0,0 +1,23 @@
package dev.msfjarvis.claw.common.ui
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Modifier
import com.halilibo.richtext.markdown.Markdown
import com.halilibo.richtext.ui.material3.Material3RichText
@Composable
fun ThemedRichText(
text: String,
modifier: Modifier = Modifier,
) {
CompositionLocalProvider(
LocalTextStyle provides MaterialTheme.typography.bodyLarge,
LocalContentColor provides MaterialTheme.colorScheme.onBackground,
) {
Material3RichText(modifier) { Markdown(text) }
}
}

View file

@ -15,10 +15,6 @@ import androidx.compose.runtime.produceState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.dp
import dev.msfjarvis.claw.common.NetworkState
import dev.msfjarvis.claw.common.NetworkState.Loading
@ -26,6 +22,7 @@ import dev.msfjarvis.claw.common.NetworkState.Success
import dev.msfjarvis.claw.common.ui.NetworkError
import dev.msfjarvis.claw.common.ui.NetworkImage
import dev.msfjarvis.claw.common.ui.ProgressBar
import dev.msfjarvis.claw.common.ui.ThemedRichText
import dev.msfjarvis.claw.model.User
@Suppress("UNCHECKED_CAST")
@ -67,19 +64,11 @@ private fun UserProfileInternal(
text = user.username,
style = MaterialTheme.typography.displaySmall,
)
Text(
ThemedRichText(
text = user.about,
style = MaterialTheme.typography.bodyLarge,
)
Text(
text =
buildAnnotatedString {
append("Invited by ")
withStyle(style = SpanStyle(textDecoration = TextDecoration.Underline)) {
append(user.invitedBy)
}
},
style = MaterialTheme.typography.bodyLarge,
ThemedRichText(
text = "Invited by [${user.invitedBy}](https://lobste.rs/u/${user.invitedBy})",
)
}
}