Skip to content

Commit a321c20

Browse files
committed
[BOOK-145] feat: Search 모듈 SideEffect 처리 추가
UUID 시범 적용
1 parent 0c61163 commit a321c20

File tree

5 files changed

+40
-3
lines changed

5 files changed

+40
-3
lines changed

core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ fun handleException(
3030
}
3131

3232
else -> {
33-
Logger.e(exception.message ?: "알 수 없는 오류가 발생했습니다.")
33+
val errorMessage = exception.message ?: "알 수 없는 오류가 발생했습니다."
34+
Logger.e(errorMessage)
35+
onServerError(errorMessage)
3436
}
3537
}
3638
}

feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/SearchPresenter.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class SearchPresenter @AssistedInject constructor(
4141
val scope = rememberCoroutineScope()
4242
var uiState by rememberRetained { mutableStateOf<UiState>(UiState.Idle) }
4343
var footerState by rememberRetained { mutableStateOf<FooterState>(FooterState.Idle) }
44-
var queryState = rememberTextFieldState()
44+
val queryState = rememberTextFieldState()
4545
var searchResult by rememberRetained { mutableStateOf(BookSearchModel()) }
4646
var books by rememberRetained { mutableStateOf(persistentListOf<BookSummaryModel>()) }
4747
var currentStartIndex by rememberRetained { mutableIntStateOf(START_INDEX) }
@@ -119,6 +119,10 @@ class SearchPresenter @AssistedInject constructor(
119119

120120
fun handleEvent(event: SearchUiEvent) {
121121
when (event) {
122+
is SearchUiEvent.InitSideEffect -> {
123+
sideEffect = null
124+
}
125+
122126
is SearchUiEvent.OnBackClick -> {
123127
navigator.pop()
124128
}

feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/SearchScreen.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ internal fun Search(
4545
state: SearchUiState,
4646
modifier: Modifier = Modifier,
4747
) {
48+
HandleSearchSideEffects(state = state)
49+
4850
Column(
4951
modifier = modifier.fillMaxSize(),
5052
horizontalAlignment = Alignment.CenterHorizontally,
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.ninecraft.booket.feature.search
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+
import com.orhanobut.logger.Logger
8+
9+
@Composable
10+
internal fun HandleSearchSideEffects(
11+
state: SearchUiState,
12+
) {
13+
val context = LocalContext.current
14+
15+
RememberedEffect(state.sideEffect) {
16+
when (state.sideEffect) {
17+
is SearchSideEffect.ShowToast -> {
18+
Toast.makeText(context, state.sideEffect.message, Toast.LENGTH_SHORT).show()
19+
}
20+
21+
null -> {}
22+
}
23+
}
24+
}

feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/SearchUiState.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.slack.circuit.runtime.CircuitUiEvent
77
import com.slack.circuit.runtime.CircuitUiState
88
import kotlinx.collections.immutable.ImmutableList
99
import kotlinx.collections.immutable.persistentListOf
10+
import java.util.UUID
1011

1112
sealed interface UiState {
1213
data object Idle : UiState
@@ -41,10 +42,14 @@ data class SearchUiState(
4142
}
4243

4344
sealed interface SearchSideEffect {
44-
data class ShowToast(val message: String) : SearchSideEffect
45+
data class ShowToast(
46+
val message: String,
47+
private val key: String = UUID.randomUUID().toString()
48+
) : SearchSideEffect
4549
}
4650

4751
sealed interface SearchUiEvent : CircuitUiEvent {
52+
data object InitSideEffect: SearchUiEvent
4853
data object OnBackClick : SearchUiEvent
4954
data class OnSearchClick(val text: String) : SearchUiEvent
5055
data object OnClearClick : SearchUiEvent

0 commit comments

Comments
 (0)