Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ class BookSearchPresenter @AssistedInject constructor(
var registeredUserBookId by rememberRetained { mutableStateOf("") }
var isBookRegisterBottomSheetVisible by rememberRetained { mutableStateOf(false) }
var selectedBookStatus by rememberRetained { mutableStateOf<BookStatus?>(null) }
var upsertedBookStatus by rememberRetained { mutableStateOf<BookStatus?>(null) }
var isBookRegisterSuccessBottomSheetVisible by rememberRetained { mutableStateOf(false) }
var sideEffect by rememberRetained { mutableStateOf<BookSearchSideEffect?>(null) }

Expand Down Expand Up @@ -137,6 +138,7 @@ class BookSearchPresenter @AssistedInject constructor(

analyticsHelper.logEvent(REGISTER_BOOK_COMPLETE)
selectedBookIsbn = ""
upsertedBookStatus = selectedBookStatus
selectedBookStatus = null
isBookRegisterBottomSheetVisible = false
isBookRegisterSuccessBottomSheetVisible = true
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
},
)
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 = {
Expand All @@ -43,7 +46,7 @@ fun BookRegisterSuccessBottomSheet(
sheetState = sheetState,
) {
Column(
modifier = Modifier
modifier = modifier
.padding(
start = ReedTheme.spacing.spacing5,
top = ReedTheme.spacing.spacing5,
Expand All @@ -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)
},
)
}
}
}
}
Expand All @@ -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,
Expand All @@ -118,6 +188,7 @@ private fun BookRegisterSuccessBottomSheetPreview() {
BookRegisterSuccessBottomSheet(
onDismissRequest = {},
sheetState = sheetState,
upsertedBookStatus = BookStatus.COMPLETED,
onCancelButtonClick = {},
onOKButtonClick = {},
)
Expand Down
4 changes: 4 additions & 0 deletions feature/search/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,12 @@
<string name="book_register_title">등록 옵션</string>
<string name="book_register_success_title">도서가 등록되었어요!</string>
<string name="book_register_success_description">독서 기록을 바로 시작할까요?</string>
<string name="book_register_success_description_before_reading">책을 읽으면서 독서 기록을 남길 수 있어요</string>
<string name="book_register_success_description_completed">기억에 남는 문장이나 감상을 기록해보세요</string>
<string name="book_register_success_cancel">나중에 하기</string>
<string name="book_register_success_ok">기록 시작하기</string>
<string name="book_register_success_ok_before_reading">확인</string>
<string name="book_register_success_ok_completed">기록 남기기</string>
<string name="book_register_ok">도서 등록</string>
<string name="empty_recent_searches">최근 검색어 내역이 없습니다.</string>
<string name="book_status_registered">이미 등록된 책입니다</string>
Expand Down
Loading