Skip to content

Commit 0800a06

Browse files
committed
[NDGL-124] feat: 인기 여행 목록 더 불러오기 기능 구현
1 parent 521f0af commit 0800a06

File tree

5 files changed

+382
-73
lines changed

5 files changed

+382
-73
lines changed

core/ui/src/main/java/com/yapp/ndgl/core/ui/CommonErrorView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ fun CommonErrorView(
6161
private fun CommonErrorViewPreview() {
6262
NDGLTheme {
6363
CommonErrorView(
64-
modifier = Modifier
64+
modifier = Modifier,
6565
)
6666
}
6767
}

data/travel/src/main/java/com/yapp/ndgl/data/travel/repository/TravelTemplateRepository.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,14 @@ import javax.inject.Singleton
1818
class TravelTemplateRepository @Inject constructor(
1919
private val travelTemplateApi: TravelTemplateApi,
2020
) {
21-
suspend fun getAllPopularTravelTemplates(): PopularTravelTemplates {
22-
return travelTemplateApi.getPopularTravelTemplates().getData()
21+
suspend fun getAllPopularTravelTemplates(page: Int = 0): PopularTravelTemplates {
22+
return travelTemplateApi.getPopularTravelTemplates(page = page).getData()
2323
}
2424

25-
suspend fun getPopularTravelTemplates(travelProgramId: Long): PopularTravelTemplates {
25+
suspend fun getPopularTravelTemplates(travelProgramId: Long, page: Int = 0): PopularTravelTemplates {
2626
return travelTemplateApi.getPopularTravelTemplates(
2727
travelProgramId = travelProgramId,
28+
page = page,
2829
).getData()
2930
}
3031

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.yapp.ndgl.feature.home.popular
22

33
import androidx.compose.runtime.Immutable
4+
import androidx.compose.runtime.Stable
45
import com.yapp.ndgl.core.base.UiIntent
56
import com.yapp.ndgl.core.base.UiSideEffect
67
import com.yapp.ndgl.core.base.UiState
@@ -9,32 +10,50 @@ import com.yapp.ndgl.feature.home.model.TravelProgramTab
910
import kotlinx.collections.immutable.ImmutableList
1011
import kotlinx.collections.immutable.ImmutableMap
1112
import 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

3451
sealed 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

4059
sealed 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

Comments
 (0)