Skip to content

Commit da74fff

Browse files
committed
[BOOK-167] feat: HandlingLibrarySearchSideEffect 추가
1 parent bc0d3d4 commit da74fff

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
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.search.library
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 HandlingLibrarySearchSideEffect(
10+
state: LibrarySearchUiState,
11+
) {
12+
val context = LocalContext.current
13+
14+
RememberedEffect(state.sideEffect) {
15+
when (state.sideEffect) {
16+
is LibrarySearchSideEffect.ShowToast -> {
17+
Toast.makeText(context, state.sideEffect.message, Toast.LENGTH_SHORT).show()
18+
}
19+
20+
null -> {}
21+
}
22+
}
23+
}

feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchPresenter.kt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@ import androidx.compose.runtime.mutableIntStateOf
88
import androidx.compose.runtime.mutableStateOf
99
import androidx.compose.runtime.rememberCoroutineScope
1010
import androidx.compose.runtime.setValue
11+
import com.ninecraft.booket.core.common.utils.handleException
1112
import com.ninecraft.booket.core.data.api.repository.BookRepository
1213
import com.ninecraft.booket.core.model.LibraryBookSummaryModel
1314
import com.ninecraft.booket.core.ui.component.FooterState
1415
import com.ninecraft.booket.feature.screens.BookDetailScreen
1516
import com.ninecraft.booket.feature.screens.LibrarySearchScreen
17+
import com.ninecraft.booket.feature.screens.LoginScreen
18+
import com.ninecraft.booket.feature.search.book.SearchSideEffect
1619
import com.orhanobut.logger.Logger
1720
import com.slack.circuit.codegen.annotations.CircuitInject
1821
import com.slack.circuit.retained.collectAsRetainedState
@@ -46,6 +49,7 @@ class LibrarySearchPresenter @AssistedInject constructor(
4649
val queryState = rememberTextFieldState()
4750
val recentSearches by repository.libraryRecentSearches.collectAsRetainedState(initial = emptyList())
4851
var books by rememberRetained { mutableStateOf(persistentListOf<LibraryBookSummaryModel>()) }
52+
var sideEffect by rememberRetained { mutableStateOf<LibrarySearchSideEffect?>(null) }
4953

5054
var currentPage by rememberRetained { mutableIntStateOf(START_INDEX) }
5155
var isLastPage by rememberRetained { mutableStateOf(false) }
@@ -77,13 +81,25 @@ class LibrarySearchPresenter @AssistedInject constructor(
7781
}
7882
}
7983
.onFailure { exception ->
80-
Logger.d(exception)
8184
val errorMessage = exception.message ?: "알 수 없는 오류가 발생했습니다."
8285
if (page == START_INDEX) {
8386
uiState = UiState.Error(errorMessage)
8487
} else {
8588
footerState = FooterState.Error(errorMessage)
8689
}
90+
91+
val handleErrorMessage = { message: String ->
92+
Logger.e(message)
93+
sideEffect = LibrarySearchSideEffect.ShowToast(message)
94+
}
95+
96+
handleException(
97+
exception = exception,
98+
onError = handleErrorMessage,
99+
onLoginRequired = {
100+
navigator.resetRoot(LoginScreen)
101+
},
102+
)
87103
}
88104
}
89105
}
@@ -148,6 +164,7 @@ class LibrarySearchPresenter @AssistedInject constructor(
148164
queryState = queryState,
149165
recentSearches = recentSearches.toImmutableList(),
150166
books = books,
167+
sideEffect = sideEffect,
151168
eventSink = ::handleEvent,
152169
)
153170
}

feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUi.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ internal fun LibrarySearchUi(
4242
state: LibrarySearchUiState,
4343
modifier: Modifier = Modifier,
4444
) {
45+
HandlingLibrarySearchSideEffect(state = state)
46+
4547
ReedFullScreen(modifier = modifier) {
4648
ReedBackTopAppBar(
4749
title = stringResource(R.string.library_search_title),

0 commit comments

Comments
 (0)