Skip to content

Commit

Permalink
feat/#17 : 이전 화면에서 받은 전체 에피소드를 State에 저장
Browse files Browse the repository at this point in the history
  • Loading branch information
shinythinking committed Feb 18, 2025
1 parent a530110 commit 510acf0
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.boostcamp.mapisode.home.common.OptionType
import com.boostcamp.mapisode.ui.base.UiIntent

sealed class RecommendationIntent : UiIntent {
data class Initialize(val episodes: List<String>) : RecommendationIntent()
data class OptionClick(val optionId: OptionType) : RecommendationIntent()
data object ShowMapType : RecommendationIntent()
data object ShowListType : RecommendationIntent()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@ import androidx.compose.foundation.lazy.grid.items
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Card
import androidx.compose.material.Icon
import androidx.compose.material3.Icon
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
Expand Down Expand Up @@ -58,6 +59,11 @@ fun RecommendationRoute(
onBackClick: () -> Unit,
) {
val uiState by viewModel.uiState.collectAsStateWithLifecycle()

LaunchedEffect(episodes) {
viewModel.onIntent(RecommendationIntent.Initialize(episodes))
}

MapisodeScaffold(
modifier = Modifier.fillMaxSize(),
isStatusBarPaddingExist = true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@ data class RecommendationState (
val type: OptionType = OptionType.NONE,
val isOptionSelected: Boolean = false,
val resultViewType: ResultViewType = ResultViewType.LIST_VIEW,
val entireEpisodes: List<ResultEpisode> = emptyList(),
val resultEpisodes: List<ResultEpisode> = emptyList(),
) : UiState
Original file line number Diff line number Diff line change
@@ -1,24 +1,54 @@
package com.boostcamp.mapisode.home.ai

import androidx.lifecycle.viewModelScope
import com.boostcamp.mapisode.episode.repository.EpisodeRepository
import com.boostcamp.mapisode.home.common.OptionType
import com.boostcamp.mapisode.home.common.ResultEpisode
import com.boostcamp.mapisode.home.common.ResultViewType
import com.boostcamp.mapisode.model.EpisodeModel
import com.boostcamp.mapisode.ui.base.BaseViewModel
import com.naver.maps.geometry.LatLng
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class RecommendationViewmodel @Inject constructor(
private val episodeRepository: EpisodeRepository,
) : BaseViewModel<RecommendationIntent, RecommendationState, RecommendationSideEffect>(
RecommendationState(),
) {
override fun onIntent(intent: RecommendationIntent) {
when (intent) {
is RecommendationIntent.Initialize -> initialize(intent.episodes)
is RecommendationIntent.OptionClick -> handleOptionClick(intent.optionId)
RecommendationIntent.ShowListType -> showListType()
RecommendationIntent.ShowMapType -> showMapType()
}
}

private fun initialize(episodes: List<String>) {
viewModelScope.launch(Dispatchers.IO){
val episodeDetail = episodes.map {
episodeRepository.getEpisodeById(it) ?: EpisodeModel()
}

intent {
copy(
entireEpisodes = episodeDetail.map {
ResultEpisode(
id = it.id,
owner = it.createdBy,
thumbnail = it.imageUrls.first(),
coordinates = LatLng(it.location.latitude, it.location.longitude),
)
},
)
}
}
}

private fun handleOptionClick(type: OptionType) {
intent {
copy(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import com.naver.maps.geometry.LatLng
data class ResultEpisode(
val id: String,
val owner: String,
val distance: String,
val reason: String,
val distance: String = "",
val reason: String = "",
val thumbnail: String,
val coordinates: LatLng
)

0 comments on commit 510acf0

Please sign in to comment.