diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt index d6e890ec..b945e7e0 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt @@ -71,6 +71,7 @@ class BookSearchPresenter @AssistedInject constructor( var registeredUserBookId by rememberRetained { mutableStateOf("") } var isBookRegisterBottomSheetVisible by rememberRetained { mutableStateOf(false) } var selectedBookStatus by rememberRetained { mutableStateOf(null) } + var upsertedBookStatus by rememberRetained { mutableStateOf(null) } var isBookRegisterSuccessBottomSheetVisible by rememberRetained { mutableStateOf(false) } var sideEffect by rememberRetained { mutableStateOf(null) } @@ -137,6 +138,7 @@ class BookSearchPresenter @AssistedInject constructor( analyticsHelper.logEvent(REGISTER_BOOK_COMPLETE) selectedBookIsbn = "" + upsertedBookStatus = selectedBookStatus selectedBookStatus = null isBookRegisterBottomSheetVisible = false isBookRegisterSuccessBottomSheetVisible = true @@ -262,6 +264,7 @@ class BookSearchPresenter @AssistedInject constructor( selectedBookIsbn = selectedBookIsbn, isBookRegisterBottomSheetVisible = isBookRegisterBottomSheetVisible, selectedBookStatus = selectedBookStatus, + upsertedBookStatus = upsertedBookStatus, isBookRegisterSuccessBottomSheetVisible = isBookRegisterSuccessBottomSheetVisible, isGuestMode = userState is UserState.Guest, sideEffect = sideEffect, diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt index ad1fd7ec..9cf11050 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt @@ -265,22 +265,25 @@ internal fun BookSearchContent( } if (state.isBookRegisterSuccessBottomSheetVisible) { - BookRegisterSuccessBottomSheet( - onDismissRequest = { state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss) }, - sheetState = bookRegisterSuccessBottomSheetState, - onCancelButtonClick = { - coroutineScope.launch { - bookRegisterSuccessBottomSheetState.hide() - state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss) - } - }, - onOKButtonClick = { - coroutineScope.launch { - bookRegisterSuccessBottomSheetState.hide() - state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessOkButtonClick) - } - }, - ) + state.upsertedBookStatus?.let { upsertedBookStatus -> + BookRegisterSuccessBottomSheet( + onDismissRequest = { state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss) }, + sheetState = bookRegisterSuccessBottomSheetState, + upsertedBookStatus = upsertedBookStatus, + onCancelButtonClick = { + coroutineScope.launch { + bookRegisterSuccessBottomSheetState.hide() + state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss) + } + }, + onOKButtonClick = { + coroutineScope.launch { + bookRegisterSuccessBottomSheetState.hide() + state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessOkButtonClick) + } + }, + ) + } } } } diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUiState.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUiState.kt index 09641b05..17e15a45 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUiState.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUiState.kt @@ -31,6 +31,7 @@ data class BookSearchUiState( val selectedBookIsbn: String = "", val isBookRegisterBottomSheetVisible: Boolean = false, val selectedBookStatus: BookStatus? = null, + val upsertedBookStatus: BookStatus? = null, val isBookRegisterSuccessBottomSheetVisible: Boolean = false, val isGuestMode: Boolean = false, val sideEffect: BookSearchSideEffect? = null, diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookRegisterSuccessBottomSheet.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookRegisterSuccessBottomSheet.kt index dd34726a..6e6057a5 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookRegisterSuccessBottomSheet.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookRegisterSuccessBottomSheet.kt @@ -20,6 +20,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import com.ninecraft.booket.core.common.constants.BookStatus import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.component.button.ReedButton import com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle @@ -33,8 +34,10 @@ import com.ninecraft.booket.feature.search.R fun BookRegisterSuccessBottomSheet( onDismissRequest: () -> Unit, sheetState: SheetState, + upsertedBookStatus: BookStatus, onCancelButtonClick: () -> Unit, onOKButtonClick: () -> Unit, + modifier: Modifier = Modifier, ) { ReedBottomSheet( onDismissRequest = { @@ -43,7 +46,7 @@ fun BookRegisterSuccessBottomSheet( sheetState = sheetState, ) { Column( - modifier = Modifier + modifier = modifier .padding( start = ReedTheme.spacing.spacing5, top = ReedTheme.spacing.spacing5, @@ -67,38 +70,63 @@ fun BookRegisterSuccessBottomSheet( ) Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing1)) Text( - text = stringResource(R.string.book_register_success_description), + text = stringResource( + when (upsertedBookStatus) { + BookStatus.BEFORE_READING -> R.string.book_register_success_description_before_reading + BookStatus.READING -> R.string.book_register_success_description + BookStatus.COMPLETED -> R.string.book_register_success_description_completed + }, + ), modifier = Modifier.fillMaxWidth(), color = ReedTheme.colors.contentSecondary, textAlign = TextAlign.Center, style = ReedTheme.typography.body1Medium, ) Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing3)) - Row( - modifier = Modifier - .fillMaxWidth() - .padding(vertical = ReedTheme.spacing.spacing4), - horizontalArrangement = Arrangement.SpaceBetween, - ) { + + if (upsertedBookStatus == BookStatus.BEFORE_READING) { ReedButton( onClick = { onCancelButtonClick() }, sizeStyle = largeButtonStyle, - colorStyle = ReedButtonColorStyle.SECONDARY, - modifier = Modifier.weight(1f), - text = stringResource(R.string.book_register_success_cancel), - ) - Spacer(modifier = Modifier.width(ReedTheme.spacing.spacing2)) - ReedButton( - onClick = { - onOKButtonClick() - }, - sizeStyle = largeButtonStyle, colorStyle = ReedButtonColorStyle.PRIMARY, - modifier = Modifier.weight(1f), - text = stringResource(R.string.book_register_success_ok), + modifier = Modifier + .fillMaxWidth() + .padding(vertical = ReedTheme.spacing.spacing4), + text = stringResource(R.string.book_register_success_ok_before_reading), ) + } else { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = ReedTheme.spacing.spacing4), + horizontalArrangement = Arrangement.SpaceBetween, + ) { + ReedButton( + onClick = { + onCancelButtonClick() + }, + sizeStyle = largeButtonStyle, + colorStyle = ReedButtonColorStyle.SECONDARY, + modifier = Modifier.weight(1f), + text = stringResource(R.string.book_register_success_cancel), + ) + Spacer(modifier = Modifier.width(ReedTheme.spacing.spacing2)) + ReedButton( + onClick = { + onOKButtonClick() + }, + sizeStyle = largeButtonStyle, + colorStyle = ReedButtonColorStyle.PRIMARY, + modifier = Modifier.weight(1f), + text = if (upsertedBookStatus == BookStatus.READING) { + stringResource(R.string.book_register_success_ok) + } else { + stringResource(R.string.book_register_success_ok_completed) + }, + ) + } } } } @@ -107,7 +135,49 @@ fun BookRegisterSuccessBottomSheet( @OptIn(ExperimentalMaterial3Api::class) @ComponentPreview @Composable -private fun BookRegisterSuccessBottomSheetPreview() { +private fun BookRegisterSuccessBeforeReadingBottomSheetPreview() { + val sheetState = SheetState( + skipPartiallyExpanded = true, + initialValue = SheetValue.Expanded, + positionalThreshold = { 0f }, + velocityThreshold = { 0f }, + ) + ReedTheme { + BookRegisterSuccessBottomSheet( + onDismissRequest = {}, + sheetState = sheetState, + upsertedBookStatus = BookStatus.BEFORE_READING, + onCancelButtonClick = {}, + onOKButtonClick = {}, + ) + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@ComponentPreview +@Composable +private fun BookRegisterSuccessReadingBottomSheetPreview() { + val sheetState = SheetState( + skipPartiallyExpanded = true, + initialValue = SheetValue.Expanded, + positionalThreshold = { 0f }, + velocityThreshold = { 0f }, + ) + ReedTheme { + BookRegisterSuccessBottomSheet( + onDismissRequest = {}, + sheetState = sheetState, + upsertedBookStatus = BookStatus.READING, + onCancelButtonClick = {}, + onOKButtonClick = {}, + ) + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@ComponentPreview +@Composable +private fun BookRegisterSuccessCompletedBottomSheetPreview() { val sheetState = SheetState( skipPartiallyExpanded = true, initialValue = SheetValue.Expanded, @@ -118,6 +188,7 @@ private fun BookRegisterSuccessBottomSheetPreview() { BookRegisterSuccessBottomSheet( onDismissRequest = {}, sheetState = sheetState, + upsertedBookStatus = BookStatus.COMPLETED, onCancelButtonClick = {}, onOKButtonClick = {}, ) diff --git a/feature/search/src/main/res/values/strings.xml b/feature/search/src/main/res/values/strings.xml index d8f946d7..c27ec69f 100644 --- a/feature/search/src/main/res/values/strings.xml +++ b/feature/search/src/main/res/values/strings.xml @@ -9,8 +9,12 @@ 등록 옵션 도서가 등록되었어요! 독서 기록을 바로 시작할까요? + 책을 읽으면서 독서 기록을 남길 수 있어요 + 기억에 남는 문장이나 감상을 기록해보세요 나중에 하기 기록 시작하기 + 확인 + 기록 남기기 도서 등록 최근 검색어 내역이 없습니다. 이미 등록된 책입니다