Skip to content

Commit dfd8dbe

Browse files
committed
[BOOK-169] feat: HandlerHomeSideEffect 추가
1 parent 9cd432e commit dfd8dbe

File tree

5 files changed

+52
-3
lines changed

5 files changed

+52
-3
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.ninecraft.booket.feature.home
2+
3+
import android.widget.Toast
4+
import androidx.compose.runtime.Composable
5+
import androidx.compose.ui.platform.LocalContext
6+
import com.skydoves.compose.effects.RememberedEffect
7+
8+
@Composable
9+
internal fun HandleHomeSideEffects(
10+
state: HomeUiState,
11+
) {
12+
val context = LocalContext.current
13+
14+
RememberedEffect(state.sideEffect) {
15+
when (state.sideEffect) {
16+
is HomeSideEffect.ShowToast -> {
17+
Toast.makeText(context, state.sideEffect.message, Toast.LENGTH_SHORT).show()
18+
}
19+
20+
null -> {}
21+
}
22+
}
23+
}

feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import androidx.compose.runtime.getValue
66
import androidx.compose.runtime.mutableStateOf
77
import androidx.compose.runtime.rememberCoroutineScope
88
import androidx.compose.runtime.setValue
9+
import com.ninecraft.booket.core.common.utils.handleException
910
import com.ninecraft.booket.core.data.api.repository.HomeRepository
1011
import com.ninecraft.booket.core.model.RecentBookModel
1112
import com.ninecraft.booket.feature.screens.BookDetailScreen
1213
import com.ninecraft.booket.feature.screens.HomeScreen
14+
import com.ninecraft.booket.feature.screens.LoginScreen
1315
import com.ninecraft.booket.feature.screens.RecordScreen
1416
import com.ninecraft.booket.feature.screens.SearchScreen
1517
import com.ninecraft.booket.feature.screens.SettingsScreen
@@ -34,6 +36,7 @@ class HomePresenter @AssistedInject constructor(
3436
@Composable
3537
override fun present(): HomeUiState {
3638
val scope = rememberCoroutineScope()
39+
var sideEffect by rememberRetained { mutableStateOf<HomeSideEffect?>(null) }
3740
var recentBooks by rememberRetained { mutableStateOf(persistentListOf<RecentBookModel>()) }
3841

3942
fun getHome() {
@@ -42,7 +45,18 @@ class HomePresenter @AssistedInject constructor(
4245
.onSuccess { result ->
4346
recentBooks = result.recentBooks.toPersistentList()
4447
}.onFailure { exception ->
45-
exception.message?.let { Logger.e(it) }
48+
val handleErrorMessage = { message: String ->
49+
Logger.e(message)
50+
sideEffect = HomeSideEffect.ShowToast(message)
51+
}
52+
53+
handleException(
54+
exception = exception,
55+
onError = handleErrorMessage,
56+
onLoginRequired = {
57+
navigator.resetRoot(LoginScreen)
58+
},
59+
)
4660
}
4761
}
4862
}

feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ internal fun HomeUi(
4141
state: HomeUiState,
4242
modifier: Modifier = Modifier,
4343
) {
44+
HandleHomeSideEffects(state = state)
45+
4446
Column(
4547
modifier = modifier.fillMaxSize(),
4648
) {

feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUiState.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
package com.ninecraft.booket.feature.home
22

3+
import androidx.compose.runtime.Immutable
34
import com.ninecraft.booket.core.model.RecentBookModel
45
import com.slack.circuit.runtime.CircuitUiEvent
56
import com.slack.circuit.runtime.CircuitUiState
67
import kotlinx.collections.immutable.ImmutableList
78
import kotlinx.collections.immutable.persistentListOf
9+
import java.util.UUID
810

911
data class HomeUiState(
1012
val recentBooks: ImmutableList<RecentBookModel> = persistentListOf(),
13+
val sideEffect: HomeSideEffect? = null,
1114
val eventSink: (HomeUiEvent) -> Unit,
1215
) : CircuitUiState
1316

17+
@Immutable
18+
sealed interface HomeSideEffect {
19+
data class ShowToast(
20+
val message: String,
21+
private val key: String = UUID.randomUUID().toString(),
22+
) : HomeSideEffect
23+
}
24+
1425
sealed interface HomeUiEvent : CircuitUiEvent {
1526
data object OnSettingsClick : HomeUiEvent
1627
data object OnBookRegisterClick : HomeUiEvent

feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/BookCard.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.ninecraft.booket.feature.home.component
22

3-
import androidx.compose.foundation.Image
43
import androidx.compose.foundation.background
54
import androidx.compose.foundation.border
65
import androidx.compose.foundation.layout.Arrangement
@@ -261,7 +260,7 @@ private fun BookCardPreview() {
261260
title = "여름은 오래 그곳에 남아",
262261
author = "마쓰이에 마사시",
263262
publisher = "비채",
264-
coverImageUrl = "https://image.aladin.co.kr/product/7492/9/cover200/8934972203_1.jpg"
263+
coverImageUrl = "https://image.aladin.co.kr/product/7492/9/cover200/8934972203_1.jpg",
265264
),
266265
onBookDetailClick = {},
267266
onRecordButtonClick = {},

0 commit comments

Comments
 (0)