all: move Markdown rendering to common module

This commit is contained in:
Harsh Shandilya 2021-10-25 01:15:56 +05:30
parent 36618690e3
commit b3588e97e7
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
6 changed files with 13 additions and 14 deletions

View file

@ -23,7 +23,6 @@ dependencies {
implementation(libs.androidx.lifecycle.compose) implementation(libs.androidx.lifecycle.compose)
implementation(libs.androidx.navigation.compose) implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.paging.compose) implementation(libs.androidx.paging.compose)
implementation(libs.multiplatform.markdown.android)
implementation(libs.copydown) implementation(libs.copydown)
implementation(libs.dagger.hilt.android) implementation(libs.dagger.hilt.android)
implementation(libs.sqldelight.extensions.coroutines) implementation(libs.sqldelight.extensions.coroutines)

View file

@ -28,7 +28,6 @@ import com.google.accompanist.insets.ProvideWindowInsets
import com.google.accompanist.insets.navigationBarsPadding import com.google.accompanist.insets.navigationBarsPadding
import com.google.accompanist.insets.statusBarsPadding import com.google.accompanist.insets.statusBarsPadding
import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.google.accompanist.systemuicontroller.rememberSystemUiController
import com.mikepenz.markdown.Markdown
import dev.msfjarvis.claw.android.viewmodel.ClawViewModel import dev.msfjarvis.claw.android.viewmodel.ClawViewModel
import dev.msfjarvis.claw.common.comments.CommentsPage import dev.msfjarvis.claw.common.comments.CommentsPage
import dev.msfjarvis.claw.common.posts.PostActions import dev.msfjarvis.claw.common.posts.PostActions
@ -127,10 +126,7 @@ fun LobstersApp(
CommentsPage( CommentsPage(
postId = requireNotNull(backStackEntry.arguments?.getString("postId")), postId = requireNotNull(backStackEntry.arguments?.getString("postId")),
getDetails = viewModel::getPostComments, getDetails = viewModel::getPostComments,
renderMarkdown = { source, modifier -> htmlToMarkdown = { source -> copydown.convert(source) },
val markdown = copydown.convert(source)
Markdown(markdown, modifier = modifier)
},
paddingValues = paddingValues, paddingValues = paddingValues,
) )
} }

View file

@ -17,6 +17,7 @@ kotlin {
api(compose.material) api(compose.material)
api(projects.database) api(projects.database)
api(projects.model) api(projects.model)
implementation(libs.multiplatform.markdown)
} }
} }
sourceSets["androidMain"].apply { sourceSets["androidMain"].apply {

View file

@ -17,6 +17,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.mikepenz.markdown.Markdown
import dev.msfjarvis.claw.common.posts.PostDetails import dev.msfjarvis.claw.common.posts.PostDetails
import dev.msfjarvis.claw.common.posts.SubmitterName import dev.msfjarvis.claw.common.posts.SubmitterName
import dev.msfjarvis.claw.common.posts.toDbModel import dev.msfjarvis.claw.common.posts.toDbModel
@ -26,6 +27,7 @@ import dev.msfjarvis.claw.model.LobstersPostDetails
@Composable @Composable
fun CommentsHeader( fun CommentsHeader(
postDetails: LobstersPostDetails, postDetails: LobstersPostDetails,
htmlToMarkdown: (html: String) -> String,
) { ) {
Surface { Surface {
Column( Column(
@ -35,6 +37,7 @@ fun CommentsHeader(
PostDetails( PostDetails(
post = postDetails.toDbModel(), post = postDetails.toDbModel(),
) )
Markdown(htmlToMarkdown(postDetails.description))
} }
} }
} }
@ -42,7 +45,7 @@ fun CommentsHeader(
@Composable @Composable
fun CommentEntry( fun CommentEntry(
comment: Comment, comment: Comment,
renderMarkdown: @Composable (comment: String, modifier: Modifier) -> Unit, htmlToMarkdown: (html: String) -> String,
) { ) {
val indentLevel = comment.indentLevel.toInt() - 1 val indentLevel = comment.indentLevel.toInt() - 1
@ -55,7 +58,7 @@ fun CommentEntry(
avatarUrl = "https://lobste.rs/${comment.user.avatarUrl}", avatarUrl = "https://lobste.rs/${comment.user.avatarUrl}",
contentDescription = "Submitted by ${comment.user.username}", contentDescription = "Submitted by ${comment.user.username}",
) )
renderMarkdown(comment.comment, Modifier.padding(top = 8.dp)) Markdown(htmlToMarkdown(comment.comment), Modifier.padding(top = 8.dp))
} }
} }
} }

View file

@ -28,15 +28,15 @@ import dev.msfjarvis.lobsters.ui.comments.NetworkState
@Composable @Composable
private fun CommentsPageInternal( private fun CommentsPageInternal(
details: LobstersPostDetails, details: LobstersPostDetails,
renderMarkdown: @Composable (comment: String, modifier: Modifier) -> Unit, htmlToMarkdown: (html: String) -> String,
bottomPadding: Dp, bottomPadding: Dp,
) { ) {
LazyColumn(Modifier.padding(bottom = bottomPadding)) { LazyColumn(Modifier.padding(bottom = bottomPadding)) {
item { CommentsHeader(postDetails = details) } item { CommentsHeader(postDetails = details, htmlToMarkdown = htmlToMarkdown) }
item { Spacer(modifier = Modifier.height(8.dp)) } item { Spacer(modifier = Modifier.height(8.dp)) }
items(details.comments) { item -> CommentEntry(item, renderMarkdown) } items(details.comments) { item -> CommentEntry(item, htmlToMarkdown) }
item { Divider(color = Color.Gray.copy(0.4f)) } item { Divider(color = Color.Gray.copy(0.4f)) }
} }
@ -47,7 +47,7 @@ private fun CommentsPageInternal(
fun CommentsPage( fun CommentsPage(
postId: String, postId: String,
getDetails: suspend (String) -> LobstersPostDetails, getDetails: suspend (String) -> LobstersPostDetails,
renderMarkdown: @Composable (comment: String, modifier: Modifier) -> Unit, htmlToMarkdown: (html: String) -> String,
paddingValues: PaddingValues, paddingValues: PaddingValues,
) { ) {
var postDetails: NetworkState by remember { mutableStateOf(NetworkState.Loading) } var postDetails: NetworkState by remember { mutableStateOf(NetworkState.Loading) }
@ -58,7 +58,7 @@ fun CommentsPage(
is NetworkState.Success<*> -> { is NetworkState.Success<*> -> {
CommentsPageInternal( CommentsPageInternal(
(postDetails as NetworkState.Success<LobstersPostDetails>).data, (postDetails as NetworkState.Success<LobstersPostDetails>).data,
renderMarkdown, htmlToMarkdown,
paddingValues.calculateBottomPadding(), paddingValues.calculateBottomPadding(),
) )
} }

View file

@ -38,7 +38,7 @@ dagger-hilt-android = { module = "com.google.dagger:hilt-android", version.ref =
dagger-hilt-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "hilt" } dagger-hilt-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "hilt" }
dagger-hilt-core = { module = "com.google.dagger:hilt-core", version.ref = "hilt" } dagger-hilt-core = { module = "com.google.dagger:hilt-core", version.ref = "hilt" }
multiplatform-markdown-android = "com.mikepenz:multiplatform-markdown-renderer-android:0.1.0" multiplatform-markdown = "com.mikepenz:multiplatform-markdown-renderer:0.1.0"
copydown = "io.github.furstenheim:copy_down:1.0" copydown = "io.github.furstenheim:copy_down:1.0"
multiplatform-paging = "io.github.kuuuurt:multiplatform-paging:0.4.5" multiplatform-paging = "io.github.kuuuurt:multiplatform-paging:0.4.5"