From 93b4d04587166db13d1ae4ccaafb652e3f38d48d Mon Sep 17 00:00:00 2001 From: Joren Date: Tue, 30 Apr 2024 00:05:02 +0200 Subject: [PATCH] Change names of database methods --- .../java/com/ti/mobpo/data/FavouriteDao.kt | 5 +- .../com/ti/mobpo/data/FavouritesRepository.kt | 2 +- .../mobpo/data/OfflineFavouritesRepository.kt | 4 +- .../com/ti/mobpo/ui/screens/Favourites.kt | 56 ++++++++++++++++++- 4 files changed, 58 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/ti/mobpo/data/FavouriteDao.kt b/app/src/main/java/com/ti/mobpo/data/FavouriteDao.kt index c409f3a..6669a1c 100644 --- a/app/src/main/java/com/ti/mobpo/data/FavouriteDao.kt +++ b/app/src/main/java/com/ti/mobpo/data/FavouriteDao.kt @@ -14,9 +14,8 @@ interface FavouriteDao { @Delete suspend fun delete(favourite: Favourite) - - @Query("SELECT id FROM favourites") - fun getAllFavoriteIds(): Flow> + @Query("SELECT * from favourites ORDER BY id ASC") + fun getAllItems(): Flow> @Query("SELECT EXISTS(SELECT 1 FROM favourites WHERE id = :id LIMIT 1)") suspend fun isFavourite(id: Int): Boolean diff --git a/app/src/main/java/com/ti/mobpo/data/FavouritesRepository.kt b/app/src/main/java/com/ti/mobpo/data/FavouritesRepository.kt index 4083c1b..b701947 100644 --- a/app/src/main/java/com/ti/mobpo/data/FavouritesRepository.kt +++ b/app/src/main/java/com/ti/mobpo/data/FavouritesRepository.kt @@ -9,7 +9,7 @@ interface FavouritesRepository { /** * Retrieve all the items from the the given data source. */ - fun getAllFavoriteIds(): Flow> + fun getAllItems(): Flow> /** * Insert item in the data source diff --git a/app/src/main/java/com/ti/mobpo/data/OfflineFavouritesRepository.kt b/app/src/main/java/com/ti/mobpo/data/OfflineFavouritesRepository.kt index 6f4b000..12443cf 100644 --- a/app/src/main/java/com/ti/mobpo/data/OfflineFavouritesRepository.kt +++ b/app/src/main/java/com/ti/mobpo/data/OfflineFavouritesRepository.kt @@ -3,8 +3,8 @@ package com.ti.mobpo.data import kotlinx.coroutines.flow.Flow class OfflineFavouritesRepository(private val favouriteDao: FavouriteDao) : FavouritesRepository { - override fun getAllFavoriteIds(): Flow> { - return favouriteDao.getAllFavoriteIds() + override fun getAllItems(): Flow> { + return favouriteDao.getAllItems() } override suspend fun insertItem(item: Favourite) { favouriteDao.insert(item) diff --git a/app/src/main/java/com/ti/mobpo/ui/screens/Favourites.kt b/app/src/main/java/com/ti/mobpo/ui/screens/Favourites.kt index 2fe3bd6..dae1083 100644 --- a/app/src/main/java/com/ti/mobpo/ui/screens/Favourites.kt +++ b/app/src/main/java/com/ti/mobpo/ui/screens/Favourites.kt @@ -1,10 +1,60 @@ package com.ti.mobpo.ui.screens +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import com.ti.mobpo.AppViewModelProvider +import com.ti.mobpo.ui.viewmodels.FavouritesViewModel +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.grid.items +import androidx.compose.ui.Modifier @Composable -fun Favourites() { - println("Favourites") - Text("Favourites Page") +fun FavoritesScreen(viewModel: FavouritesViewModel = viewModel(factory = AppViewModelProvider.Factory)) { + Favorites(viewModel) +} + +@Composable +fun Favorites(favoritesViewModel: FavouritesViewModel) { + val favorites by favoritesViewModel.pokemonDetails.collectAsState() + favoritesViewModel.loadFavourites() + + Column( + verticalArrangement = Arrangement.Top, + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .fillMaxSize() + .padding(20.dp) + ) { + Spacer(modifier = Modifier.height(16.dp)) + + favorites?.let { favoritesList -> + if (favoritesList.isNotEmpty()) { + LazyVerticalGrid( + columns = GridCells.Adaptive(150.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + items(items = favoritesList, key = { pokemon -> pokemon.id }) { pokemon -> + PokemonCard(pokemon, toggleFavorite = { pokemonId -> + favoritesViewModel.toggleFavorite(pokemonId) + }) + } + } + } else { + Text("No favorites found") + } + } + } }