@@ -5,10 +5,13 @@ import androidx.compose.runtime.getValue
55import androidx.compose.runtime.mutableStateOf
66import androidx.compose.runtime.rememberCoroutineScope
77import androidx.compose.runtime.setValue
8+ import com.ninecraft.booket.core.common.constants.BookStatus
89import com.ninecraft.booket.core.common.utils.handleException
910import com.ninecraft.booket.core.data.api.repository.BookRepository
1011import com.ninecraft.booket.feature.screens.BookDetailScreen
1112import com.ninecraft.booket.feature.screens.LoginScreen
13+ import com.ninecraft.booket.feature.screens.RecordDetailScreen
14+ import com.ninecraft.booket.feature.screens.RecordScreen
1215import com.orhanobut.logger.Logger
1316import com.slack.circuit.codegen.annotations.CircuitInject
1417import com.slack.circuit.retained.rememberRetained
@@ -30,6 +33,10 @@ class BookDetailPresenter @AssistedInject constructor(
3033 override fun present (): BookDetailUiState {
3134 val scope = rememberCoroutineScope()
3235
36+ var isBookUpdateBottomSheetVisible by rememberRetained { mutableStateOf(false ) }
37+ var isRecordSortBottomSheetVisible by rememberRetained { mutableStateOf(false ) }
38+ var currentBookStatus by rememberRetained { mutableStateOf(BookStatus .READING ) }
39+ var currentRecordSort by rememberRetained { mutableStateOf(RecordSort .PAGE_ASCENDING ) }
3340 var sideEffect by rememberRetained { mutableStateOf<BookDetailSideEffect ?>(null ) }
3441
3542 fun upsertBook (bookIsbn : String , bookStatus : String ) {
@@ -57,29 +64,58 @@ class BookDetailPresenter @AssistedInject constructor(
5764
5865 fun handleEvent (event : BookDetailUiEvent ) {
5966 when (event) {
60- BookDetailUiEvent .InitSideEffect -> {
67+ is BookDetailUiEvent .InitSideEffect -> {
6168 sideEffect = null
6269 }
6370
64- BookDetailUiEvent .OnBackClicked -> {
71+ is BookDetailUiEvent .OnBackClick -> {
6572 navigator.pop()
6673 }
6774
68- BookDetailUiEvent .OnBeforeReadingClick -> {
69- upsertBook(screen.isbn, " BEFORE_READING " )
75+ is BookDetailUiEvent .OnBookStatusButtonClick -> {
76+ isBookUpdateBottomSheetVisible = true
7077 }
7178
72- BookDetailUiEvent .OnReadingClick -> {
73- upsertBook(screen.isbn, " READING " )
79+ is BookDetailUiEvent .OnRegisterRecordButtonClick -> {
80+ navigator.goTo( RecordScreen ( " " ) )
7481 }
7582
76- BookDetailUiEvent .OnCompletedClick -> {
77- upsertBook(screen.isbn, " COMPLETED" )
83+ is BookDetailUiEvent .OnRecordSortButtonClick -> {
84+ isRecordSortBottomSheetVisible = true
85+ }
86+
87+ is BookDetailUiEvent .OnBookUpdateBottomSheetDismiss -> {
88+ isBookUpdateBottomSheetVisible = false
89+ }
90+
91+ is BookDetailUiEvent .OnBookStatusItemSelected -> {
92+ currentBookStatus = event.bookStatus
93+ }
94+
95+ is BookDetailUiEvent .OnBookStatusUpdateButtonClick -> {
96+ upsertBook(screen.isbn, currentBookStatus.value)
97+ }
98+
99+ is BookDetailUiEvent .OnRecordSortBottomSheetDismiss -> {
100+ isRecordSortBottomSheetVisible = false
101+ }
102+
103+ is BookDetailUiEvent .OnRecordSortItemSelected -> {
104+ currentRecordSort = event.sortType
105+ isRecordSortBottomSheetVisible = false
106+ }
107+
108+ is BookDetailUiEvent .OnRecordItemClick -> {
109+ navigator.goTo(RecordDetailScreen (event.recordId))
78110 }
79111 }
80112 }
81113
82114 return BookDetailUiState (
115+ isBookUpdateBottomSheetVisible = isBookUpdateBottomSheetVisible,
116+ isRecordSortBottomSheetVisible = isRecordSortBottomSheetVisible,
117+ currentBookStatus = currentBookStatus,
118+ currentRecordSort = currentRecordSort,
83119 sideEffect = sideEffect,
84120 eventSink = ::handleEvent,
85121 )
0 commit comments