File tree Expand file tree Collapse file tree 5 files changed +40
-3
lines changed
core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils
feature/search/src/main/kotlin/com/ninecraft/booket/feature/search Expand file tree Collapse file tree 5 files changed +40
-3
lines changed Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff 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 }
Original file line number Diff line number Diff 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 ,
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ import com.slack.circuit.runtime.CircuitUiEvent
77import com.slack.circuit.runtime.CircuitUiState
88import kotlinx.collections.immutable.ImmutableList
99import kotlinx.collections.immutable.persistentListOf
10+ import java.util.UUID
1011
1112sealed interface UiState {
1213 data object Idle : UiState
@@ -41,10 +42,14 @@ data class SearchUiState(
4142}
4243
4344sealed 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
4751sealed 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
You can’t perform that action at this time.
0 commit comments