Migrate search feature

dt/nav3-c
Don Turner 2 months ago
parent 1e30bc49f0
commit ae8c462780

@ -29,6 +29,7 @@ import com.google.samples.apps.nowinandroid.feature.foryou.navigation.ForYouBase
import com.google.samples.apps.nowinandroid.feature.foryou.navigation.forYouSection import com.google.samples.apps.nowinandroid.feature.foryou.navigation.forYouSection
import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute
import com.google.samples.apps.nowinandroid.feature.interests.navigation.navigateToInterests import com.google.samples.apps.nowinandroid.feature.interests.navigation.navigateToInterests
import com.google.samples.apps.nowinandroid.feature.search.navigation.SearchRoute
import com.google.samples.apps.nowinandroid.feature.search.navigation.searchScreen import com.google.samples.apps.nowinandroid.feature.search.navigation.searchScreen
import com.google.samples.apps.nowinandroid.feature.topic.navigation.TopicRoute import com.google.samples.apps.nowinandroid.feature.topic.navigation.TopicRoute
import com.google.samples.apps.nowinandroid.feature.topic.navigation.topicScreen import com.google.samples.apps.nowinandroid.feature.topic.navigation.topicScreen
@ -71,11 +72,7 @@ fun NiaNavHost(
composable<TopicRoute>{} composable<TopicRoute>{}
} }
composable<BookmarksRoute> {} composable<BookmarksRoute> {}
searchScreen( composable<SearchRoute> {}
onBackClick = navController::popBackStack,
onInterestsClick = { appState.navigateToTopLevelDestination(INTERESTS) },
onTopicClick = navController::navigateToInterests,
)
interestsListDetailScreen() interestsListDetailScreen()
} }
} }
@ -94,6 +91,11 @@ fun NiaNavHost(
nav3Navigator.goTo(route = TopicRoute(it)) nav3Navigator.goTo(route = TopicRoute(it))
}, },
) )
searchScreen(
onBackClick = navController::popBackStack,
onInterestsClick = { appState.navigateToTopLevelDestination(INTERESTS) },
onTopicClick = navController::navigateToInterests,
)
}, },
) )
} }

@ -40,6 +40,7 @@ import com.google.samples.apps.nowinandroid.core.ui.TrackDisposableJank
import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute
import com.google.samples.apps.nowinandroid.feature.foryou.navigation.navigateToForYou import com.google.samples.apps.nowinandroid.feature.foryou.navigation.navigateToForYou
import com.google.samples.apps.nowinandroid.feature.interests.navigation.navigateToInterests import com.google.samples.apps.nowinandroid.feature.interests.navigation.navigateToInterests
import com.google.samples.apps.nowinandroid.feature.search.navigation.SearchRoute
import com.google.samples.apps.nowinandroid.feature.search.navigation.navigateToSearch import com.google.samples.apps.nowinandroid.feature.search.navigation.navigateToSearch
import com.google.samples.apps.nowinandroid.feature.topic.navigation.TopicRoute import com.google.samples.apps.nowinandroid.feature.topic.navigation.TopicRoute
import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination
@ -215,7 +216,8 @@ class Nav3NavigatorSimple(val navController: NavHostController){
private val migratedRoutes = listOf( private val migratedRoutes = listOf(
BookmarksRoute::class, BookmarksRoute::class,
TopicRoute::class TopicRoute::class,
SearchRoute::class
).associateBy { it.qualifiedName } ).associateBy { it.qualifiedName }
// TODO: We are using Dispatchers.Main so that we can access SavedStateHandle in toRoute, // TODO: We are using Dispatchers.Main so that we can access SavedStateHandle in toRoute,
@ -243,6 +245,7 @@ class Nav3NavigatorSimple(val navController: NavHostController){
when (className) { when (className) {
BookmarksRoute::class.qualifiedName -> entry.toRoute<BookmarksRoute>() BookmarksRoute::class.qualifiedName -> entry.toRoute<BookmarksRoute>()
TopicRoute::class.qualifiedName -> entry.toRoute<TopicRoute>() TopicRoute::class.qualifiedName -> entry.toRoute<TopicRoute>()
SearchRoute::class.qualifiedName -> entry.toRoute<SearchRoute>()
else -> entry else -> entry
} }
} }

@ -27,6 +27,7 @@ android {
dependencies { dependencies {
implementation(projects.core.data) implementation(projects.core.data)
implementation(projects.core.domain) implementation(projects.core.domain)
implementation(projects.core.navigation)
testImplementation(projects.core.testing) testImplementation(projects.core.testing)

@ -20,6 +20,8 @@ import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavOptions import androidx.navigation.NavOptions
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation3.runtime.EntryProviderBuilder
import androidx.navigation3.runtime.entry
import com.google.samples.apps.nowinandroid.feature.search.SearchRoute import com.google.samples.apps.nowinandroid.feature.search.SearchRoute
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@ -28,14 +30,14 @@ import kotlinx.serialization.Serializable
fun NavController.navigateToSearch(navOptions: NavOptions? = null) = fun NavController.navigateToSearch(navOptions: NavOptions? = null) =
navigate(SearchRoute, navOptions) navigate(SearchRoute, navOptions)
fun NavGraphBuilder.searchScreen( fun EntryProviderBuilder<Any>.searchScreen(
onBackClick: () -> Unit, onBackClick: () -> Unit,
onInterestsClick: () -> Unit, onInterestsClick: () -> Unit,
onTopicClick: (String) -> Unit, onTopicClick: (String) -> Unit,
) { ) {
// TODO: Handle back stack for each top-level destination. At the moment each top-level // TODO: Handle back stack for each top-level destination. At the moment each top-level
// destination may have own search screen's back stack. // destination may have own search screen's back stack.
composable<SearchRoute> { entry<SearchRoute> {
SearchRoute( SearchRoute(
onBackClick = onBackClick, onBackClick = onBackClick,
onInterestsClick = onInterestsClick, onInterestsClick = onInterestsClick,

Loading…
Cancel
Save