mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-14 12:57:04 +05:30
feat: load link metadata lazily
This commit is contained in:
parent
4337a19abc
commit
79aba9a187
7 changed files with 50 additions and 61 deletions
|
@ -23,6 +23,7 @@ import androidx.compose.material3.Text
|
|||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.produceState
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
|
@ -40,19 +41,26 @@ import dev.msfjarvis.claw.common.res.ClawIcons
|
|||
import dev.msfjarvis.claw.common.ui.NetworkImage
|
||||
import dev.msfjarvis.claw.common.ui.ThemedRichText
|
||||
import dev.msfjarvis.claw.model.Comment
|
||||
import dev.msfjarvis.claw.model.ExtendedPostDetails
|
||||
import dev.msfjarvis.claw.model.LinkMetadata
|
||||
import dev.msfjarvis.claw.model.LobstersPostDetails
|
||||
import java.time.Instant
|
||||
import java.time.temporal.TemporalAccessor
|
||||
|
||||
@Composable
|
||||
fun CommentsHeader(
|
||||
postDetails: ExtendedPostDetails,
|
||||
postDetails: LobstersPostDetails,
|
||||
getLinkMetadata: suspend (String) -> LinkMetadata,
|
||||
postActions: PostActions,
|
||||
htmlConverter: HTMLConverter,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val uriHandler = LocalUriHandler.current
|
||||
val linkMetadata by
|
||||
produceState(
|
||||
initialValue = LinkMetadata(postDetails.url, null, null),
|
||||
) {
|
||||
value = getLinkMetadata(postDetails.url)
|
||||
}
|
||||
|
||||
Surface(color = MaterialTheme.colorScheme.background, modifier = modifier) {
|
||||
Column(
|
||||
|
@ -63,13 +71,11 @@ fun CommentsHeader(
|
|||
TagRow(tags = postDetails.tags)
|
||||
Spacer(Modifier.height(4.dp))
|
||||
|
||||
if (postDetails.linkMetadata.url.isNotBlank()) {
|
||||
if (linkMetadata.url.isNotBlank()) {
|
||||
PostLink(
|
||||
linkMetadata = postDetails.linkMetadata,
|
||||
linkMetadata = linkMetadata,
|
||||
modifier =
|
||||
Modifier.clickable {
|
||||
postActions.viewPost(postDetails.linkMetadata.url, postDetails.commentsUrl)
|
||||
},
|
||||
Modifier.clickable { postActions.viewPost(linkMetadata.url, postDetails.commentsUrl) },
|
||||
)
|
||||
Spacer(Modifier.height(4.dp))
|
||||
}
|
||||
|
|
|
@ -24,11 +24,13 @@ import dev.msfjarvis.claw.common.NetworkState.Success
|
|||
import dev.msfjarvis.claw.common.posts.PostActions
|
||||
import dev.msfjarvis.claw.common.ui.NetworkError
|
||||
import dev.msfjarvis.claw.common.ui.ProgressBar
|
||||
import dev.msfjarvis.claw.model.ExtendedPostDetails
|
||||
import dev.msfjarvis.claw.model.LinkMetadata
|
||||
import dev.msfjarvis.claw.model.LobstersPostDetails
|
||||
|
||||
@Composable
|
||||
private fun CommentsPageInternal(
|
||||
details: ExtendedPostDetails,
|
||||
details: LobstersPostDetails,
|
||||
getLinkMetadata: suspend (String) -> LinkMetadata,
|
||||
postActions: PostActions,
|
||||
htmlConverter: HTMLConverter,
|
||||
modifier: Modifier = Modifier,
|
||||
|
@ -38,6 +40,7 @@ private fun CommentsPageInternal(
|
|||
item {
|
||||
CommentsHeader(
|
||||
postDetails = details,
|
||||
getLinkMetadata = getLinkMetadata,
|
||||
postActions = postActions,
|
||||
htmlConverter = htmlConverter,
|
||||
)
|
||||
|
@ -73,11 +76,12 @@ private fun CommentsPageInternal(
|
|||
}
|
||||
}
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
@Suppress("UNCHECKED_CAST", "LongParameterList")
|
||||
@Composable
|
||||
fun CommentsPage(
|
||||
postId: String,
|
||||
getDetails: suspend (String) -> ExtendedPostDetails,
|
||||
getDetails: suspend (String) -> LobstersPostDetails,
|
||||
getLinkMetadata: suspend (String) -> LinkMetadata,
|
||||
postActions: PostActions,
|
||||
htmlConverter: HTMLConverter,
|
||||
modifier: Modifier = Modifier,
|
||||
|
@ -94,7 +98,8 @@ fun CommentsPage(
|
|||
when (postDetails) {
|
||||
is Success<*> -> {
|
||||
CommentsPageInternal(
|
||||
details = (postDetails as Success<ExtendedPostDetails>).data,
|
||||
details = (postDetails as Success<LobstersPostDetails>).data,
|
||||
getLinkMetadata = getLinkMetadata,
|
||||
postActions = postActions,
|
||||
htmlConverter = htmlConverter,
|
||||
modifier = modifier.fillMaxSize(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue