@@ -3,6 +3,7 @@ package com.ninecraft.booket.feature.search
33import androidx.compose.foundation.text.input.rememberTextFieldState
44import androidx.compose.runtime.Composable
55import androidx.compose.runtime.getValue
6+ import androidx.compose.runtime.mutableIntStateOf
67import androidx.compose.runtime.mutableStateOf
78import androidx.compose.runtime.rememberCoroutineScope
89import androidx.compose.runtime.setValue
@@ -30,6 +31,7 @@ class SearchPresenter @AssistedInject constructor(
3031) : Presenter<SearchUiState> {
3132 companion object {
3233 private const val PAGE_SIZE = 20
34+ private const val START_INDEX = 1
3335 }
3436
3537 @Composable
@@ -40,12 +42,12 @@ class SearchPresenter @AssistedInject constructor(
4042 val queryState = rememberTextFieldState()
4143 var searchResult by rememberRetained { mutableStateOf(BookSearchModel ()) }
4244 var books by rememberRetained { mutableStateOf(persistentListOf<BookSummaryModel >()) }
43- var currentStartIndex by rememberRetained { mutableStateOf( 0 ) }
45+ var currentStartIndex by rememberRetained { mutableIntStateOf( START_INDEX ) }
4446 var isLastPage by rememberRetained { mutableStateOf(false ) }
4547
46- fun searchBooks (query : String , startIndex : Int = 0 ) {
48+ fun searchBooks (query : String , startIndex : Int = START_INDEX ) {
4749 scope.launch {
48- if (startIndex == 0 ) {
50+ if (startIndex == START_INDEX ) {
4951 uiState = UiState .Loading
5052 } else {
5153 footerState = FooterState .Loading
@@ -54,7 +56,7 @@ class SearchPresenter @AssistedInject constructor(
5456 bookRepository.searchBook(query = query, start = startIndex)
5557 .onSuccess { result ->
5658 searchResult = result
57- books = if (startIndex == 0 ) {
59+ books = if (startIndex == START_INDEX ) {
5860 result.books.toPersistentList()
5961 } else {
6062 (books + result.books).toPersistentList()
@@ -63,7 +65,7 @@ class SearchPresenter @AssistedInject constructor(
6365 currentStartIndex = startIndex
6466 isLastPage = result.books.size < PAGE_SIZE
6567
66- if (startIndex == 0 ) {
68+ if (startIndex == START_INDEX ) {
6769 uiState = UiState .Success
6870 } else {
6971 footerState = if (isLastPage) FooterState .End else FooterState .Idle
@@ -72,7 +74,7 @@ class SearchPresenter @AssistedInject constructor(
7274 .onFailure { exception ->
7375 Logger .d(exception)
7476 val errorMessage = exception.message ? : " 알 수 없는 오류가 발생했습니다."
75- if (startIndex == 0 ) {
77+ if (startIndex == START_INDEX ) {
7678 uiState = UiState .Error (errorMessage)
7779 } else {
7880 footerState = FooterState .Error (errorMessage)
@@ -88,18 +90,18 @@ class SearchPresenter @AssistedInject constructor(
8890 }
8991
9092 is SearchUiEvent .OnSearch -> {
91- searchBooks(query = event.text, startIndex = 0 )
93+ searchBooks(query = event.text, startIndex = START_INDEX )
9294 }
9395
9496 is SearchUiEvent .OnLoadMore -> {
9597 if (footerState !is FooterState .Loading && ! isLastPage && queryState.text.toString().isNotEmpty()) {
96- searchBooks(query = queryState.text.toString(), startIndex = currentStartIndex + 1 )
98+ searchBooks(query = queryState.text.toString(), startIndex = currentStartIndex + PAGE_SIZE )
9799 }
98100 }
99101
100102 is SearchUiEvent .OnRetryClick -> {
101103 if (queryState.text.toString().isNotEmpty()) {
102- searchBooks(query = queryState.text.toString(), startIndex = 0 )
104+ searchBooks(query = queryState.text.toString(), startIndex = START_INDEX )
103105 }
104106 }
105107
0 commit comments