diff --git a/Android/feature/reciperecommend/src/main/java/com/sundaegukbap/banchango/feature/reciperecommend/RecipeRecommendViewModel.kt b/Android/feature/reciperecommend/src/main/java/com/sundaegukbap/banchango/feature/reciperecommend/RecipeRecommendViewModel.kt index 7db0a39..6f0da31 100644 --- a/Android/feature/reciperecommend/src/main/java/com/sundaegukbap/banchango/feature/reciperecommend/RecipeRecommendViewModel.kt +++ b/Android/feature/reciperecommend/src/main/java/com/sundaegukbap/banchango/feature/reciperecommend/RecipeRecommendViewModel.kt @@ -2,7 +2,6 @@ package com.sundaegukbap.banchango.feature.reciperecommend import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.sundaegukbap.banchango.Recipe import com.sundaegukbap.banchango.core.data.repository.api.RecipeRepository import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow @@ -20,14 +19,33 @@ class RecipeRecommendViewModel @Inject constructor( MutableStateFlow(RecipeRecommendUiState.Loading) val uiState: StateFlow = _uiState.asStateFlow() + init { + viewModelScope.launch { + recipeRepository.getRecipeRecommendation().onSuccess { + _uiState.value = + RecipeRecommendUiState + .Success((it + it + it + it + it) + .mapIndexed { index, recipe -> + RecipeRecommendItemUiState( + recipe = recipe.copy(name = recipe.name + index.toString()), + isHated = false, + isLiked = false, + ) + }) + }.onFailure { throwable -> + throwable.printStackTrace() + } + } + } + fun getRecipeRecommendation() { - if (_uiState.value is RecipeRecommendUiState.Success) return + val successUiState = _uiState.value as? RecipeRecommendUiState.Success ?: return viewModelScope.launch { recipeRepository.getRecipeRecommendation().onSuccess { _uiState.value = - RecipeRecommendUiState - .Success((it + it + it + it + it + it + it) + RecipeRecommendUiState.Success( + successUiState.recipes + (it + it + it + it + it) .mapIndexed { index, recipe -> RecipeRecommendItemUiState( recipe = recipe.copy(name = recipe.name + index.toString()), @@ -44,6 +62,7 @@ class RecipeRecommendViewModel @Inject constructor( fun hateRecipe(page: Int) { val successRecipes = _uiState.value as? RecipeRecommendUiState.Success ?: return _uiState.value = RecipeRecommendUiState.Success( + // TODO : Hate successRecipes.recipes.toMutableList().apply { removeAt(page) } ) } diff --git a/Android/feature/reciperecommend/src/main/java/com/sundaegukbap/banchango/feature/reciperecommend/RecipesRecommendScreen.kt b/Android/feature/reciperecommend/src/main/java/com/sundaegukbap/banchango/feature/reciperecommend/RecipesRecommendScreen.kt index 5d9d977..087eabf 100644 --- a/Android/feature/reciperecommend/src/main/java/com/sundaegukbap/banchango/feature/reciperecommend/RecipesRecommendScreen.kt +++ b/Android/feature/reciperecommend/src/main/java/com/sundaegukbap/banchango/feature/reciperecommend/RecipesRecommendScreen.kt @@ -41,7 +41,8 @@ fun RecipeRecommendRoute( RecipeRecommendContent( padding = padding, uiState = uiState, - onHateClick = { viewModel.hateRecipe(it) }, + onHateClick = viewModel::hateRecipe, + onLastPageVisible = viewModel::getRecipeRecommendation, ) } @@ -51,6 +52,7 @@ fun RecipeRecommendContent( uiState: RecipeRecommendUiState, onHateClick: (Int) -> Unit = {}, onLikeClick: (Int) -> Unit = {}, + onLastPageVisible: () -> Unit = {}, ) { when (uiState) { @@ -64,6 +66,7 @@ fun RecipeRecommendContent( padding = padding, onHateClick = onHateClick, onLikeClick = onLikeClick, + onLastPageVisible = onLastPageVisible, ) } } @@ -83,6 +86,7 @@ private fun RecipeRecommendScreen( recipeRecommends: List, onHateClick: (Int) -> Unit, onLikeClick: (Int) -> Unit, + onLastPageVisible: () -> Unit = {}, ) { val pagerState = rememberPagerState(pageCount = { recipeRecommends.size }) val coroutineScope = rememberCoroutineScope() @@ -96,6 +100,10 @@ private fun RecipeRecommendScreen( var visible by remember { mutableStateOf(true) } + if (page >= recipeRecommends.size - 2) { + onLastPageVisible() + } + RecipePage( visible = visible, page = page, @@ -103,7 +111,7 @@ private fun RecipeRecommendScreen( onLikeClick = { coroutineScope.launch { onLikeClick(it) - pagerState.animateScrollToPage(it) + pagerState.animateScrollToPage(it + 1) } }, onHateClick = { visible = false },