|
|
|
@ -66,6 +66,7 @@ import com.google.samples.apps.nowinandroid.feature.topic.TopicUiState.Loading
|
|
|
|
|
@Composable
|
|
|
|
|
internal fun TopicRoute(
|
|
|
|
|
onBackClick: () -> Unit,
|
|
|
|
|
onBrowseTopic: (String) -> Unit,
|
|
|
|
|
modifier: Modifier = Modifier,
|
|
|
|
|
viewModel: TopicViewModel = hiltViewModel(),
|
|
|
|
|
) {
|
|
|
|
@ -79,6 +80,7 @@ internal fun TopicRoute(
|
|
|
|
|
onBackClick = onBackClick,
|
|
|
|
|
onFollowClick = viewModel::followTopicToggle,
|
|
|
|
|
onBookmarkChanged = viewModel::bookmarkNews,
|
|
|
|
|
onBrowseTopic = onBrowseTopic
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -90,6 +92,7 @@ internal fun TopicScreen(
|
|
|
|
|
onBackClick: () -> Unit,
|
|
|
|
|
onFollowClick: (Boolean) -> Unit,
|
|
|
|
|
onBookmarkChanged: (String, Boolean) -> Unit,
|
|
|
|
|
onBrowseTopic: (String) -> Unit,
|
|
|
|
|
modifier: Modifier = Modifier,
|
|
|
|
|
) {
|
|
|
|
|
val state = rememberLazyListState()
|
|
|
|
@ -124,7 +127,8 @@ internal fun TopicScreen(
|
|
|
|
|
description = topicUiState.followableTopic.topic.longDescription,
|
|
|
|
|
news = newsUiState,
|
|
|
|
|
imageUrl = topicUiState.followableTopic.topic.imageUrl,
|
|
|
|
|
onBookmarkChanged = onBookmarkChanged
|
|
|
|
|
onBookmarkChanged = onBookmarkChanged,
|
|
|
|
|
onBrowseTopic = onBrowseTopic
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -139,14 +143,15 @@ private fun LazyListScope.TopicBody(
|
|
|
|
|
description: String,
|
|
|
|
|
news: NewsUiState,
|
|
|
|
|
imageUrl: String,
|
|
|
|
|
onBookmarkChanged: (String, Boolean) -> Unit
|
|
|
|
|
onBookmarkChanged: (String, Boolean) -> Unit,
|
|
|
|
|
onBrowseTopic: (String) -> Unit,
|
|
|
|
|
) {
|
|
|
|
|
// TODO: Show icon if available
|
|
|
|
|
item {
|
|
|
|
|
TopicHeader(name, description, imageUrl)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TopicCards(news, onBookmarkChanged)
|
|
|
|
|
TopicCards(news, onBookmarkChanged, onBrowseTopic)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Composable
|
|
|
|
@ -176,7 +181,8 @@ private fun TopicHeader(name: String, description: String, imageUrl: String) {
|
|
|
|
|
|
|
|
|
|
private fun LazyListScope.TopicCards(
|
|
|
|
|
news: NewsUiState,
|
|
|
|
|
onBookmarkChanged: (String, Boolean) -> Unit
|
|
|
|
|
onBookmarkChanged: (String, Boolean) -> Unit,
|
|
|
|
|
onBrowseTopic: (String) -> Unit,
|
|
|
|
|
) {
|
|
|
|
|
when (news) {
|
|
|
|
|
is NewsUiState.Success -> {
|
|
|
|
@ -185,6 +191,7 @@ private fun LazyListScope.TopicCards(
|
|
|
|
|
newsResourceMapper = { it.newsResource },
|
|
|
|
|
isBookmarkedMapper = { it.isSaved },
|
|
|
|
|
onToggleBookmark = { onBookmarkChanged(it.newsResource.id, !it.isSaved) },
|
|
|
|
|
onBrowseTopic = onBrowseTopic,
|
|
|
|
|
itemModifier = Modifier.padding(24.dp)
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
@ -206,7 +213,8 @@ private fun TopicBodyPreview() {
|
|
|
|
|
LazyColumn {
|
|
|
|
|
TopicBody(
|
|
|
|
|
"Jetpack Compose", "Lorem ipsum maximum",
|
|
|
|
|
NewsUiState.Success(emptyList()), "", { _, _ -> }
|
|
|
|
|
NewsUiState.Success(emptyList()), "", { _, _ -> },
|
|
|
|
|
onBrowseTopic = {}
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -267,6 +275,7 @@ fun TopicScreenPopulated() {
|
|
|
|
|
onBackClick = {},
|
|
|
|
|
onFollowClick = {},
|
|
|
|
|
onBookmarkChanged = { _, _ -> },
|
|
|
|
|
onBrowseTopic = {}
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -283,6 +292,7 @@ fun TopicScreenLoading() {
|
|
|
|
|
onBackClick = {},
|
|
|
|
|
onFollowClick = {},
|
|
|
|
|
onBookmarkChanged = { _, _ -> },
|
|
|
|
|
onBrowseTopic = {}
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|