@@ -16,6 +16,7 @@ import com.ninecraft.booket.feature.screens.LoginScreen
1616import com.ninecraft.booket.feature.screens.SearchScreen
1717import com.orhanobut.logger.Logger
1818import com.slack.circuit.codegen.annotations.CircuitInject
19+ import com.slack.circuit.retained.collectAsRetainedState
1920import com.slack.circuit.retained.rememberRetained
2021import com.slack.circuit.runtime.Navigator
2122import com.slack.circuit.runtime.presenter.Presenter
@@ -24,12 +25,13 @@ import dagger.assisted.AssistedFactory
2425import dagger.assisted.AssistedInject
2526import dagger.hilt.android.components.ActivityRetainedComponent
2627import kotlinx.collections.immutable.persistentListOf
28+ import kotlinx.collections.immutable.toImmutableList
2729import kotlinx.collections.immutable.toPersistentList
2830import kotlinx.coroutines.launch
2931
3032class SearchPresenter @AssistedInject constructor(
3133 @Assisted private val navigator : Navigator ,
32- private val bookRepository : BookRepository ,
34+ private val repository : BookRepository ,
3335) : Presenter<SearchUiState> {
3436 companion object {
3537 private const val PAGE_SIZE = 20
@@ -42,6 +44,7 @@ class SearchPresenter @AssistedInject constructor(
4244 var uiState by rememberRetained { mutableStateOf<UiState >(UiState .Idle ) }
4345 var footerState by rememberRetained { mutableStateOf<FooterState >(FooterState .Idle ) }
4446 val queryState = rememberTextFieldState()
47+ val recentSearches by repository.recentSearches.collectAsRetainedState(initial = emptyList())
4548 var searchResult by rememberRetained { mutableStateOf(BookSearchModel ()) }
4649 var books by rememberRetained { mutableStateOf(persistentListOf<BookSummaryModel >()) }
4750 var currentStartIndex by rememberRetained { mutableIntStateOf(START_INDEX ) }
@@ -60,7 +63,7 @@ class SearchPresenter @AssistedInject constructor(
6063 footerState = FooterState .Loading
6164 }
6265
63- bookRepository .searchBook(query = query, start = startIndex)
66+ repository .searchBook(query = query, start = startIndex)
6467 .onSuccess { result ->
6568 searchResult = result
6669 books = if (startIndex == START_INDEX ) {
@@ -92,7 +95,7 @@ class SearchPresenter @AssistedInject constructor(
9295
9396 fun upsertBook (bookIsbn : String , bookStatus : String ) {
9497 scope.launch {
95- bookRepository .upsertBook(bookIsbn, bookStatus)
98+ repository .upsertBook(bookIsbn, bookStatus)
9699 .onSuccess {
97100 selectedBookIsbn = " "
98101 selectedBookStatus = null
@@ -122,6 +125,16 @@ class SearchPresenter @AssistedInject constructor(
122125 navigator.pop()
123126 }
124127
128+ is SearchUiEvent .OnRecentSearchClick -> {
129+ searchBooks(query = event.query, startIndex = START_INDEX )
130+ }
131+
132+ is SearchUiEvent .OnRemoveSearchRemoveClick -> {
133+ scope.launch {
134+ repository.removeRecentSearch(query = event.query)
135+ }
136+ }
137+
125138 is SearchUiEvent .OnSearchClick -> {
126139 searchBooks(query = event.text, startIndex = START_INDEX )
127140 }
@@ -179,6 +192,7 @@ class SearchPresenter @AssistedInject constructor(
179192 uiState = uiState,
180193 footerState = footerState,
181194 queryState = queryState,
195+ recentSearches = recentSearches.toImmutableList(),
182196 searchResult = searchResult,
183197 books = books,
184198 startIndex = currentStartIndex,
0 commit comments