Start the view in the nav so that it doesn't refetch every time
This commit is contained in:
		@@ -27,12 +27,12 @@ import androidx.compose.runtime.saveable.rememberSaveable
 | 
			
		||||
import androidx.compose.runtime.setValue
 | 
			
		||||
import androidx.compose.ui.Modifier
 | 
			
		||||
import androidx.compose.ui.tooling.preview.Preview
 | 
			
		||||
import androidx.lifecycle.viewmodel.compose.viewModel
 | 
			
		||||
import androidx.navigation.compose.NavHost
 | 
			
		||||
import androidx.navigation.compose.composable
 | 
			
		||||
import androidx.navigation.compose.currentBackStackEntryAsState
 | 
			
		||||
import androidx.navigation.compose.rememberNavController
 | 
			
		||||
import com.ti.mobpo.ui.screens.Favourites
 | 
			
		||||
import com.ti.mobpo.ui.screens.PokeSearch
 | 
			
		||||
import com.ti.mobpo.ui.screens.PokeSearchScreen
 | 
			
		||||
import com.ti.mobpo.ui.screens.Profile
 | 
			
		||||
 | 
			
		||||
@@ -70,6 +70,8 @@ fun Navigation() {
 | 
			
		||||
    val updatedSelectedIndex = items.indexOfFirst { it.route == currentRoute }
 | 
			
		||||
    selectedItemIndex = rememberUpdatedState(updatedSelectedIndex).value
 | 
			
		||||
 | 
			
		||||
    val pokeSearchViewModel: PokeSearchViewModel = viewModel()
 | 
			
		||||
 | 
			
		||||
    Scaffold (
 | 
			
		||||
        bottomBar = {
 | 
			
		||||
            NavigationBar {
 | 
			
		||||
@@ -112,9 +114,8 @@ fun Navigation() {
 | 
			
		||||
                        exitTransition = {
 | 
			
		||||
                            ExitTransition.None
 | 
			
		||||
                        }) {
 | 
			
		||||
                        composable(
 | 
			
		||||
                            route = Screen.PokeSearch.route) {
 | 
			
		||||
                            PokeSearch()
 | 
			
		||||
                        composable(route = Screen.PokeSearch.route) {
 | 
			
		||||
                            PokeSearchScreen(pokeSearchViewModel)
 | 
			
		||||
                        }
 | 
			
		||||
                        composable(
 | 
			
		||||
                            route = Screen.Favourites.route) {
 | 
			
		||||
@@ -136,6 +137,7 @@ fun Navigation() {
 | 
			
		||||
@Composable
 | 
			
		||||
fun NavigationPreview() {
 | 
			
		||||
    Surface {
 | 
			
		||||
        PokeSearchScreen()
 | 
			
		||||
        val pokeSearchViewModel: PokeSearchViewModel = viewModel()
 | 
			
		||||
        PokeSearchScreen(pokeSearchViewModel)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -13,6 +13,7 @@ import retrofit2.http.GET
 | 
			
		||||
import java.io.IOException
 | 
			
		||||
 | 
			
		||||
private const val BASE_URL = "https://pokeapi.co/api/v2/";
 | 
			
		||||
private const val SHOW_LIMIT = 20;
 | 
			
		||||
data class PokemonSpecies(
 | 
			
		||||
    @SerializedName("name") val name: String,
 | 
			
		||||
    @SerializedName("url") val url: String
 | 
			
		||||
@@ -49,7 +50,7 @@ class PokeSearchViewModel : ViewModel() {
 | 
			
		||||
            try {
 | 
			
		||||
                val response = service.getPokemonSpecies()
 | 
			
		||||
                _initialPokemonList.value = response.results
 | 
			
		||||
                _filteredPokemonList.value = response.results
 | 
			
		||||
                _filteredPokemonList.value = response.results.take(SHOW_LIMIT)
 | 
			
		||||
            } catch (e: IOException) {
 | 
			
		||||
                /*TODO*/
 | 
			
		||||
            }
 | 
			
		||||
@@ -60,9 +61,9 @@ class PokeSearchViewModel : ViewModel() {
 | 
			
		||||
        val initialPokemonList = _initialPokemonList.value
 | 
			
		||||
        if (query.isNotBlank() && initialPokemonList != null) {
 | 
			
		||||
            val filteredList = initialPokemonList.filter { it.name.contains(query, ignoreCase = true) }
 | 
			
		||||
            _filteredPokemonList.value = filteredList
 | 
			
		||||
            _filteredPokemonList.value = filteredList.take(SHOW_LIMIT);
 | 
			
		||||
        } else {
 | 
			
		||||
            _filteredPokemonList.value = initialPokemonList
 | 
			
		||||
            _filteredPokemonList.value = initialPokemonList?.take(SHOW_LIMIT);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -21,12 +21,12 @@ import com.ti.mobpo.ui.SearchBar
 | 
			
		||||
import androidx.lifecycle.viewmodel.compose.viewModel
 | 
			
		||||
 | 
			
		||||
@Composable
 | 
			
		||||
fun PokeSearchScreen(pokeSearchViewModel: PokeSearchViewModel = viewModel()) {
 | 
			
		||||
fun PokeSearchScreen(pokeSearchViewModel: PokeSearchViewModel) {
 | 
			
		||||
    PokeSearch(pokeSearchViewModel)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Composable
 | 
			
		||||
fun PokeSearch(pokeSearchViewModel: PokeSearchViewModel = viewModel()) {
 | 
			
		||||
fun PokeSearch(pokeSearchViewModel: PokeSearchViewModel) {
 | 
			
		||||
    val searchResults by pokeSearchViewModel.pokemonList.collectAsState()
 | 
			
		||||
 | 
			
		||||
    Column(
 | 
			
		||||
@@ -57,5 +57,6 @@ fun PokeSearch(pokeSearchViewModel: PokeSearchViewModel = viewModel()) {
 | 
			
		||||
@Preview(showBackground = true)
 | 
			
		||||
@Composable
 | 
			
		||||
fun PokeSearchApp(){
 | 
			
		||||
    PokeSearchScreen()
 | 
			
		||||
    val pokeSearchViewModel: PokeSearchViewModel = viewModel()
 | 
			
		||||
    PokeSearchScreen(pokeSearchViewModel)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user