navigating to browse the topic on NiaTopicTag click

pull/444/head
yveskalume 3 years ago
parent a70761f24b
commit e9e67db483

@ -522,33 +522,15 @@ fun NiaCatalog() {
var firstFollowed by remember { mutableStateOf(false) }
NiaTopicTag(
expanded = expandedTopicId == "Topic 1",
followed = firstFollowed,
onDropMenuToggle = { show ->
expandedTopicId = if (show) "Topic 1" else null
},
onFollowClick = { firstFollowed = true },
onUnfollowClick = { firstFollowed = false },
onBrowseClick = {},
text = { Text(text = "Topic 1".uppercase()) },
followText = { Text(text = "Follow") },
unFollowText = { Text(text = "Unfollow") },
browseText = { Text(text = "Browse topic") }
)
var secondFollowed by remember { mutableStateOf(true) }
NiaTopicTag(
expanded = expandedTopicId == "Topic 2",
followed = secondFollowed,
onDropMenuToggle = { show ->
expandedTopicId = if (show) "Topic 2" else null
},
onFollowClick = { secondFollowed = true },
onUnfollowClick = { secondFollowed = false },
onBrowseClick = {},
text = { Text(text = "Topic 2".uppercase()) },
followText = { Text(text = "Follow") },
unFollowText = { Text(text = "Unfollow") },
browseText = { Text(text = "Browse topic") }
)
}
}

@ -48,8 +48,16 @@ fun NiaNavHost(
startDestination = startDestination,
modifier = modifier,
) {
forYouScreen()
bookmarksScreen()
forYouScreen(
onBrowseTopic = { topicId ->
navController.navigateToTopic(topicId)
}
)
bookmarksScreen(
onBrowseTopic = { topicId ->
navController.navigateToTopic(topicId)
}
)
interestsGraph(
navigateToTopic = { topicId ->
navController.navigateToTopic(topicId)
@ -58,8 +66,18 @@ fun NiaNavHost(
navController.navigateToAuthor(authorId)
},
nestedGraphs = {
topicScreen(onBackClick)
authorScreen(onBackClick)
topicScreen(
onBackClick = onBackClick,
onBrowseTopic = { topicId ->
navController.navigateToTopic(topicId)
}
)
authorScreen(
onBackClick = onBackClick,
onBrowseTopic = { topicId ->
navController.navigateToTopic(topicId)
}
)
}
)
}

@ -18,28 +18,18 @@ package com.google.samples.apps.nowinandroid.core.designsystem.component
import androidx.compose.foundation.layout.Box
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.contentColorFor
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import com.google.samples.apps.nowinandroid.core.designsystem.R
@Composable
fun NiaTopicTag(
expanded: Boolean = false,
followed: Boolean,
onDropMenuToggle: (show: Boolean) -> Unit = {},
onFollowClick: () -> Unit,
onUnfollowClick: () -> Unit,
onBrowseClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
text: @Composable () -> Unit,
followText: @Composable () -> Unit = { Text(stringResource(R.string.follow)) },
unFollowText: @Composable () -> Unit = { Text(stringResource(R.string.unfollow)) },
browseText: @Composable () -> Unit = { Text(stringResource(R.string.browse_topic)) }
) {
Box(modifier = modifier) {
@ -49,7 +39,7 @@ fun NiaTopicTag(
MaterialTheme.colorScheme.surfaceVariant
}
NiaTextButton(
onClick = { onDropMenuToggle(true) },
onClick = onBrowseClick,
enabled = enabled,
small = true,
colors = NiaButtonDefaults.textButtonColors(
@ -65,28 +55,5 @@ fun NiaTopicTag(
),
text = text
)
NiaDropdownMenu(
expanded = expanded,
onDismissRequest = { onDropMenuToggle(false) },
items = if (followed) listOf(UNFOLLOW, BROWSE) else listOf(FOLLOW, BROWSE),
onItemClick = { item ->
when (item) {
FOLLOW -> onFollowClick()
UNFOLLOW -> onUnfollowClick()
BROWSE -> onBrowseClick()
}
},
itemText = { item ->
when (item) {
FOLLOW -> followText()
UNFOLLOW -> unFollowText()
BROWSE -> browseText()
}
}
)
}
}
private const val FOLLOW = 1
private const val UNFOLLOW = 2
private const val BROWSE = 3

@ -42,7 +42,8 @@ import com.google.samples.apps.nowinandroid.core.model.data.previewNewsResources
*/
fun LazyGridScope.newsFeed(
feedState: NewsFeedUiState,
onNewsResourcesCheckedChanged: (String, Boolean) -> Unit
onNewsResourcesCheckedChanged: (String, Boolean) -> Unit,
onBrowseTopic: (String) -> Unit,
) {
when (feedState) {
NewsFeedUiState.Loading -> Unit
@ -58,6 +59,7 @@ fun LazyGridScope.newsFeed(
newsResource = saveableNewsResource.newsResource,
isBookmarked = saveableNewsResource.isSaved,
onClick = { ContextCompat.startActivity(context, launchResourceIntent, null) },
onBrowseTopic = onBrowseTopic,
onToggleBookmark = {
onNewsResourcesCheckedChanged(
saveableNewsResource.newsResource.id,
@ -97,7 +99,8 @@ fun NewsFeedLoadingPreview() {
LazyVerticalGrid(columns = GridCells.Adaptive(300.dp)) {
newsFeed(
feedState = NewsFeedUiState.Loading,
onNewsResourcesCheckedChanged = { _, _ -> }
onNewsResourcesCheckedChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}
@ -118,7 +121,8 @@ fun NewsFeedContentPreview() {
)
}
),
onNewsResourcesCheckedChanged = { _, _ -> }
onNewsResourcesCheckedChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}

@ -82,6 +82,7 @@ fun NewsResourceCardExpanded(
newsResource: NewsResource,
isBookmarked: Boolean,
onToggleBookmark: () -> Unit,
onBrowseTopic: (String) -> Unit,
onClick: () -> Unit,
modifier: Modifier = Modifier
) {
@ -123,7 +124,7 @@ fun NewsResourceCardExpanded(
Spacer(modifier = Modifier.height(12.dp))
NewsResourceShortDescription(newsResource.content)
Spacer(modifier = Modifier.height(12.dp))
NewsResourceTopics(newsResource.topics)
NewsResourceTopics(topics = newsResource.topics, onBrowseTopic = onBrowseTopic)
}
}
}
@ -267,26 +268,17 @@ fun NewsResourceShortDescription(
@Composable
fun NewsResourceTopics(
topics: List<Topic>,
onBrowseTopic: (String) -> Unit,
modifier: Modifier = Modifier
) {
// Store the ID of the Topic which has its "following" menu expanded, if any.
// To avoid UI confusion, only one topic can have an expanded menu at a time.
var expandedTopicId by remember { mutableStateOf<String?>(null) }
Row(
modifier = modifier.horizontalScroll(rememberScrollState()), // causes narrow chips
horizontalArrangement = Arrangement.spacedBy(4.dp),
) {
for (topic in topics) {
NiaTopicTag(
expanded = expandedTopicId == topic.id,
followed = true, // ToDo: Check if topic is followed
onDropMenuToggle = { show ->
expandedTopicId = if (show) topic.id else null
},
onFollowClick = { }, // ToDo
onUnfollowClick = { }, // ToDo
onBrowseClick = { }, // ToDo
onBrowseClick = { onBrowseTopic(topic.id) }, // ToDo
text = { Text(text = topic.name.uppercase(Locale.getDefault())) }
)
}
@ -322,6 +314,7 @@ fun ExpandedNewsResourcePreview() {
newsResource = previewNewsResources[0],
isBookmarked = true,
onToggleBookmark = {},
onBrowseTopic = {},
onClick = {}
)
}

@ -41,6 +41,7 @@ fun <T> LazyListScope.newsResourceCardItems(
isBookmarkedMapper: (item: T) -> Boolean,
onToggleBookmark: (item: T) -> Unit,
onItemClick: ((item: T) -> Unit)? = null,
onBrowseTopic: (String) -> Unit,
itemModifier: Modifier = Modifier,
) = items(
items = items,
@ -55,6 +56,7 @@ fun <T> LazyListScope.newsResourceCardItems(
newsResource = newsResource,
isBookmarked = isBookmarkedMapper(item),
onToggleBookmark = { onToggleBookmark(item) },
onBrowseTopic = onBrowseTopic,
onClick = {
when (onItemClick) {
null -> ContextCompat.startActivity(context, launchResourceIntent, null)

@ -58,6 +58,7 @@ class AuthorScreenTest {
onBackClick = { },
onFollowClick = { },
onBookmarkChanged = { _, _ -> },
onBrowseTopic = {}
)
}
@ -76,6 +77,7 @@ class AuthorScreenTest {
onBackClick = { },
onFollowClick = { },
onBookmarkChanged = { _, _ -> },
onBrowseTopic = {}
)
}
@ -106,6 +108,7 @@ class AuthorScreenTest {
onBackClick = { },
onFollowClick = { },
onBookmarkChanged = { _, _ -> },
onBrowseTopic = {}
)
}
@ -132,6 +135,7 @@ class AuthorScreenTest {
onBackClick = { },
onFollowClick = { },
onBookmarkChanged = { _, _ -> },
onBrowseTopic = {}
)
}

@ -66,6 +66,7 @@ import com.google.samples.apps.nowinandroid.core.ui.newsResourceCardItems
@Composable
internal fun AuthorRoute(
onBackClick: () -> Unit,
onBrowseTopic: (String) -> Unit,
modifier: Modifier = Modifier,
viewModel: AuthorViewModel = hiltViewModel(),
) {
@ -79,6 +80,7 @@ internal fun AuthorRoute(
onBackClick = onBackClick,
onFollowClick = viewModel::followAuthorToggle,
onBookmarkChanged = viewModel::bookmarkNews,
onBrowseTopic = onBrowseTopic
)
}
@ -90,6 +92,7 @@ internal fun AuthorScreen(
onBackClick: () -> Unit,
onFollowClick: (Boolean) -> Unit,
onBookmarkChanged: (String, Boolean) -> Unit,
onBrowseTopic: (String) -> Unit,
modifier: Modifier = Modifier,
) {
val scrollableState = rememberLazyListState()
@ -126,6 +129,7 @@ internal fun AuthorScreen(
author = authorUiState.followableAuthor.author,
news = newsUiState,
onBookmarkChanged = onBookmarkChanged,
onBrowseTopic = onBrowseTopic
)
}
}
@ -138,13 +142,14 @@ internal fun AuthorScreen(
private fun LazyListScope.authorBody(
author: Author,
news: NewsUiState,
onBookmarkChanged: (String, Boolean) -> Unit
onBookmarkChanged: (String, Boolean) -> Unit,
onBrowseTopic: (String) -> Unit,
) {
item {
AuthorHeader(author)
}
authorCards(news, onBookmarkChanged)
authorCards(news, onBookmarkChanged, onBrowseTopic)
}
@Composable
@ -175,7 +180,8 @@ private fun AuthorHeader(author: Author) {
private fun LazyListScope.authorCards(
news: NewsUiState,
onBookmarkChanged: (String, Boolean) -> Unit
onBookmarkChanged: (String, Boolean) -> Unit,
onBrowseTopic: (String) -> Unit,
) {
when (news) {
is NewsUiState.Success -> {
@ -184,7 +190,8 @@ private fun LazyListScope.authorCards(
newsResourceMapper = { it.newsResource },
isBookmarkedMapper = { it.isSaved },
onToggleBookmark = { onBookmarkChanged(it.newsResource.id, !it.isSaved) },
itemModifier = Modifier.padding(24.dp)
itemModifier = Modifier.padding(24.dp),
onBrowseTopic = onBrowseTopic
)
}
is NewsUiState.Loading -> item {
@ -251,6 +258,7 @@ fun AuthorScreenPopulated() {
onBackClick = {},
onFollowClick = {},
onBookmarkChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}
@ -267,6 +275,7 @@ fun AuthorScreenLoading() {
onBackClick = {},
onFollowClick = {},
onBookmarkChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}

@ -41,7 +41,8 @@ fun NavController.navigateToAuthor(authorId: String) {
}
fun NavGraphBuilder.authorScreen(
onBackClick: () -> Unit
onBackClick: () -> Unit,
onBrowseTopic: (String) -> Unit,
) {
composable(
route = "author_route/{$authorIdArg}",
@ -49,6 +50,6 @@ fun NavGraphBuilder.authorScreen(
navArgument(authorIdArg) { type = NavType.StringType }
)
) {
AuthorRoute(onBackClick = onBackClick)
AuthorRoute(onBackClick = onBackClick, onBrowseTopic = onBrowseTopic)
}
}

@ -52,7 +52,8 @@ class BookmarksScreenTest {
composeTestRule.setContent {
BookmarksScreen(
feedState = NewsFeedUiState.Loading,
removeFromBookmarks = { }
removeFromBookmarks = { },
onBrowseTopic = {}
)
}
@ -73,7 +74,8 @@ class BookmarksScreenTest {
previewNewsResources.take(2)
.map { SaveableNewsResource(it, true) }
),
removeFromBookmarks = { }
removeFromBookmarks = { },
onBrowseTopic = {}
)
}
@ -115,7 +117,8 @@ class BookmarksScreenTest {
removeFromBookmarks = { newsResourceId ->
assertEquals(previewNewsResources[0].id, newsResourceId)
removeFromBookmarksCalled = true
}
},
onBrowseTopic = {}
)
}

@ -64,12 +64,14 @@ import com.google.samples.apps.nowinandroid.core.ui.newsFeed
@Composable
internal fun BookmarksRoute(
modifier: Modifier = Modifier,
onBrowseTopic: (String) -> Unit,
viewModel: BookmarksViewModel = hiltViewModel()
) {
val feedState by viewModel.feedUiState.collectAsStateWithLifecycle()
BookmarksScreen(
feedState = feedState,
removeFromBookmarks = viewModel::removeFromSavedResources,
onBrowseTopic = onBrowseTopic,
modifier = modifier
)
}
@ -109,6 +111,7 @@ private fun LoadingState(modifier: Modifier = Modifier) {
private fun BookmarksGrid(
feedState: NewsFeedUiState,
removeFromBookmarks: (String) -> Unit,
onBrowseTopic: (String) -> Unit,
modifier: Modifier = Modifier
) {
val scrollableState = rememberLazyGridState()

@ -28,8 +28,8 @@ fun NavController.navigateToBookmarks(navOptions: NavOptions? = null) {
this.navigate(bookmarksRoute, navOptions)
}
fun NavGraphBuilder.bookmarksScreen() {
fun NavGraphBuilder.bookmarksScreen(onBrowseTopic: (String) -> Unit) {
composable(route = bookmarksRoute) {
BookmarksRoute()
BookmarksRoute(onBrowseTopic = onBrowseTopic)
}
}

@ -59,7 +59,8 @@ class ForYouScreenTest {
onTopicCheckedChanged = { _, _ -> },
onAuthorCheckedChanged = { _, _ -> },
saveFollowedTopics = {},
onNewsResourcesCheckedChanged = { _, _ -> }
onNewsResourcesCheckedChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}
@ -82,7 +83,8 @@ class ForYouScreenTest {
onTopicCheckedChanged = { _, _ -> },
onAuthorCheckedChanged = { _, _ -> },
saveFollowedTopics = {},
onNewsResourcesCheckedChanged = { _, _ -> }
onNewsResourcesCheckedChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}
@ -111,7 +113,8 @@ class ForYouScreenTest {
onTopicCheckedChanged = { _, _ -> },
onAuthorCheckedChanged = { _, _ -> },
saveFollowedTopics = {},
onNewsResourcesCheckedChanged = { _, _ -> }
onNewsResourcesCheckedChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}
@ -163,7 +166,8 @@ class ForYouScreenTest {
onTopicCheckedChanged = { _, _ -> },
onAuthorCheckedChanged = { _, _ -> },
saveFollowedTopics = {},
onNewsResourcesCheckedChanged = { _, _ -> }
onNewsResourcesCheckedChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}
@ -215,7 +219,8 @@ class ForYouScreenTest {
onTopicCheckedChanged = { _, _ -> },
onAuthorCheckedChanged = { _, _ -> },
saveFollowedTopics = {},
onNewsResourcesCheckedChanged = { _, _ -> }
onNewsResourcesCheckedChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}
@ -262,7 +267,8 @@ class ForYouScreenTest {
onTopicCheckedChanged = { _, _ -> },
onAuthorCheckedChanged = { _, _ -> },
saveFollowedTopics = {},
onNewsResourcesCheckedChanged = { _, _ -> }
onNewsResourcesCheckedChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}
@ -285,7 +291,8 @@ class ForYouScreenTest {
onTopicCheckedChanged = { _, _ -> },
onAuthorCheckedChanged = { _, _ -> },
saveFollowedTopics = {},
onNewsResourcesCheckedChanged = { _, _ -> }
onNewsResourcesCheckedChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}
@ -311,7 +318,8 @@ class ForYouScreenTest {
onTopicCheckedChanged = { _, _ -> },
onAuthorCheckedChanged = { _, _ -> },
saveFollowedTopics = {},
onNewsResourcesCheckedChanged = { _, _ -> }
onNewsResourcesCheckedChanged = { _, _ -> },
onBrowseTopic = {}
)
}

@ -97,6 +97,7 @@ import com.google.samples.apps.nowinandroid.core.ui.newsFeed
@Composable
internal fun ForYouRoute(
modifier: Modifier = Modifier,
onBrowseTopic: (String) -> Unit,
viewModel: ForYouViewModel = hiltViewModel()
) {
val onboardingUiState by viewModel.onboardingUiState.collectAsStateWithLifecycle()
@ -111,6 +112,7 @@ internal fun ForYouRoute(
onAuthorCheckedChanged = viewModel::updateAuthorSelection,
saveFollowedTopics = viewModel::dismissOnboarding,
onNewsResourcesCheckedChanged = viewModel::updateNewsResourceSaved,
onBrowseTopic = onBrowseTopic,
modifier = modifier
)
}
@ -124,6 +126,7 @@ internal fun ForYouScreen(
onAuthorCheckedChanged: (String, Boolean) -> Unit,
saveFollowedTopics: () -> Unit,
onNewsResourcesCheckedChanged: (String, Boolean) -> Unit,
onBrowseTopic: (String) -> Unit,
modifier: Modifier = Modifier,
) {
@ -183,6 +186,7 @@ internal fun ForYouScreen(
newsFeed(
feedState = feedState,
onNewsResourcesCheckedChanged = onNewsResourcesCheckedChanged,
onBrowseTopic = onBrowseTopic
)
item(span = { GridItemSpan(maxLineSpan) }) {
@ -417,7 +421,8 @@ fun ForYouScreenPopulatedFeed() {
onTopicCheckedChanged = { _, _ -> },
onAuthorCheckedChanged = { _, _ -> },
saveFollowedTopics = {},
onNewsResourcesCheckedChanged = { _, _ -> }
onNewsResourcesCheckedChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}
@ -439,7 +444,8 @@ fun ForYouScreenOfflinePopulatedFeed() {
onTopicCheckedChanged = { _, _ -> },
onAuthorCheckedChanged = { _, _ -> },
saveFollowedTopics = {},
onNewsResourcesCheckedChanged = { _, _ -> }
onNewsResourcesCheckedChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}
@ -464,7 +470,8 @@ fun ForYouScreenTopicSelection() {
onTopicCheckedChanged = { _, _ -> },
onAuthorCheckedChanged = { _, _ -> },
saveFollowedTopics = {},
onNewsResourcesCheckedChanged = { _, _ -> }
onNewsResourcesCheckedChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}
@ -482,7 +489,8 @@ fun ForYouScreenLoading() {
onTopicCheckedChanged = { _, _ -> },
onAuthorCheckedChanged = { _, _ -> },
saveFollowedTopics = {},
onNewsResourcesCheckedChanged = { _, _ -> }
onNewsResourcesCheckedChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}
@ -504,7 +512,8 @@ fun ForYouScreenPopulatedAndLoading() {
onTopicCheckedChanged = { _, _ -> },
onAuthorCheckedChanged = { _, _ -> },
saveFollowedTopics = {},
onNewsResourcesCheckedChanged = { _, _ -> }
onNewsResourcesCheckedChanged = { _, _ -> },
onBrowseTopic = {}
)
}
}

@ -28,8 +28,8 @@ fun NavController.navigateToForYou(navOptions: NavOptions? = null) {
this.navigate(forYouNavigationRoute, navOptions)
}
fun NavGraphBuilder.forYouScreen() {
fun NavGraphBuilder.forYouScreen(onBrowseTopic: (String) -> Unit) {
composable(route = forYouNavigationRoute) {
ForYouRoute()
ForYouRoute(onBrowseTopic = onBrowseTopic)
}
}

@ -62,6 +62,7 @@ class TopicScreenTest {
onBackClick = { },
onFollowClick = { },
onBookmarkChanged = { _, _ -> },
onBrowseTopic = {}
)
}
@ -80,6 +81,7 @@ class TopicScreenTest {
onBackClick = { },
onFollowClick = { },
onBookmarkChanged = { _, _ -> },
onBrowseTopic = {}
)
}
@ -110,6 +112,7 @@ class TopicScreenTest {
onBackClick = { },
onFollowClick = { },
onBookmarkChanged = { _, _ -> },
onBrowseTopic = {}
)
}
@ -136,6 +139,7 @@ class TopicScreenTest {
onBackClick = { },
onFollowClick = { },
onBookmarkChanged = { _, _ -> },
onBrowseTopic = {}
)
}

@ -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 = {}
)
}
}

@ -41,7 +41,8 @@ fun NavController.navigateToTopic(topicId: String) {
}
fun NavGraphBuilder.topicScreen(
onBackClick: () -> Unit
onBackClick: () -> Unit,
onBrowseTopic: (String) -> Unit,
) {
composable(
route = "topic_route/{$topicIdArg}",
@ -49,6 +50,6 @@ fun NavGraphBuilder.topicScreen(
navArgument(topicIdArg) { type = NavType.StringType }
)
) {
TopicRoute(onBackClick = onBackClick)
TopicRoute(onBackClick = onBackClick, onBrowseTopic = onBrowseTopic)
}
}

Loading…
Cancel
Save