@@ -8,11 +8,14 @@ import androidx.compose.runtime.mutableIntStateOf
88import androidx.compose.runtime.mutableStateOf
99import androidx.compose.runtime.rememberCoroutineScope
1010import androidx.compose.runtime.setValue
11+ import com.ninecraft.booket.core.common.utils.handleException
1112import com.ninecraft.booket.core.data.api.repository.BookRepository
1213import com.ninecraft.booket.core.model.LibraryBookSummaryModel
1314import com.ninecraft.booket.core.ui.component.FooterState
1415import com.ninecraft.booket.feature.screens.BookDetailScreen
1516import com.ninecraft.booket.feature.screens.LibrarySearchScreen
17+ import com.ninecraft.booket.feature.screens.LoginScreen
18+ import com.ninecraft.booket.feature.search.book.SearchSideEffect
1619import com.orhanobut.logger.Logger
1720import com.slack.circuit.codegen.annotations.CircuitInject
1821import 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 }
0 commit comments