11package com.yapp.ndgl.feature.home.popular
22
33import androidx.compose.runtime.Immutable
4+ import androidx.compose.runtime.Stable
45import com.yapp.ndgl.core.base.UiIntent
56import com.yapp.ndgl.core.base.UiSideEffect
67import com.yapp.ndgl.core.base.UiState
@@ -9,32 +10,50 @@ import com.yapp.ndgl.feature.home.model.TravelProgramTab
910import kotlinx.collections.immutable.ImmutableList
1011import kotlinx.collections.immutable.ImmutableMap
1112import kotlinx.collections.immutable.persistentListOf
12- import kotlinx.collections.immutable.persistentMapOf
13-
14- @Immutable
15- data class PopularTravelListState (
16- val travelProgramTabs : ImmutableList <TravelProgramTab > = persistentListOf(),
17- val selectedTabIndex : Int = 0 ,
18- val allPopularTravels : ImmutableList <TravelContent > = persistentListOf(),
19- val popularTravelsByProgram : ImmutableMap <Long , ImmutableList <TravelContent >> = persistentMapOf(),
20- ) : UiState {
21- val selectedProgramTravels: ImmutableList <TravelContent > by lazy {
22- val selectTab = travelProgramTabs.getOrElse(selectedTabIndex) { TravelProgramTab .All }
23-
24- when (selectTab) {
25- TravelProgramTab .All -> allPopularTravels
26- is TravelProgramTab .Custom -> popularTravelsByProgram.getOrDefault(
27- selectTab.programId,
28- persistentListOf(),
29- )
13+
14+ @Stable
15+ sealed class PopularTravelListState : UiState {
16+ data object Loading : PopularTravelListState ()
17+
18+ @Immutable
19+ data class Success (
20+ val travelProgramTabs : ImmutableList <TravelProgramTab >,
21+ val allPopularTravels : ImmutableList <PopularTravelListItem >,
22+ val popularTravelsByProgram : ImmutableMap <Long , ImmutableList <PopularTravelListItem >>,
23+ val selectedTabIndex : Int = 0 ,
24+ ) : PopularTravelListState() {
25+ val selectedProgramTravels: ImmutableList <PopularTravelListItem > by lazy {
26+ val selectTab = travelProgramTabs.getOrElse(selectedTabIndex) { TravelProgramTab .All }
27+
28+ when (selectTab) {
29+ TravelProgramTab .All -> allPopularTravels
30+ is TravelProgramTab .Custom -> popularTravelsByProgram.getOrDefault(
31+ selectTab.programId,
32+ persistentListOf(),
33+ )
34+ }
35+ }
36+
37+ sealed interface PopularTravelListItem {
38+ data class Travel (
39+ val travelContent : TravelContent ,
40+ ) : PopularTravelListItem
41+
42+ data class Loading (
43+ val nextPage : Int ,
44+ ) : PopularTravelListItem
3045 }
3146 }
47+
48+ data object Error : PopularTravelListState ()
3249}
3350
3451sealed interface PopularTravelListIntent : UiIntent {
3552 data object ClickSearchTravelTemplate : PopularTravelListIntent
3653 data class SelectPopularTravelTab (val index : Int ) : PopularTravelListIntent
3754 data class ClickTravel (val travelId : Long , val days : Int ) : PopularTravelListIntent
55+ data class LoadMore (val nextPage : Int ) : PopularTravelListIntent
56+ data object ClickRetry : PopularTravelListIntent
3857}
3958
4059sealed interface PopularTravelListSideEffect : UiSideEffect {
@@ -43,4 +62,10 @@ sealed interface PopularTravelListSideEffect : UiSideEffect {
4362 val travelId : Long ,
4463 val days : Int ,
4564 ) : PopularTravelListSideEffect
65+
66+ data class ShowSnackBar (val type : Type ) : PopularTravelListSideEffect {
67+ enum class Type {
68+ ERR_UNKNOWN ,
69+ }
70+ }
4671}
0 commit comments