Skip to content

Commit 2d89bc5

Browse files
committed
[BOOK-352] feat: 책 등록 분기 처리 적용
1 parent a4807d2 commit 2d89bc5

File tree

5 files changed

+119
-37
lines changed

5 files changed

+119
-37
lines changed

feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ class BookSearchPresenter @AssistedInject constructor(
7171
var registeredUserBookId by rememberRetained { mutableStateOf("") }
7272
var isBookRegisterBottomSheetVisible by rememberRetained { mutableStateOf(false) }
7373
var selectedBookStatus by rememberRetained { mutableStateOf<BookStatus?>(null) }
74+
var upsertedBookStatus by rememberRetained { mutableStateOf<BookStatus?>(null) }
7475
var isBookRegisterSuccessBottomSheetVisible by rememberRetained { mutableStateOf(false) }
7576
var sideEffect by rememberRetained { mutableStateOf<BookSearchSideEffect?>(null) }
7677

@@ -137,6 +138,7 @@ class BookSearchPresenter @AssistedInject constructor(
137138

138139
analyticsHelper.logEvent(REGISTER_BOOK_COMPLETE)
139140
selectedBookIsbn = ""
141+
upsertedBookStatus = selectedBookStatus
140142
selectedBookStatus = null
141143
isBookRegisterBottomSheetVisible = false
142144
isBookRegisterSuccessBottomSheetVisible = true
@@ -262,6 +264,7 @@ class BookSearchPresenter @AssistedInject constructor(
262264
selectedBookIsbn = selectedBookIsbn,
263265
isBookRegisterBottomSheetVisible = isBookRegisterBottomSheetVisible,
264266
selectedBookStatus = selectedBookStatus,
267+
upsertedBookStatus = upsertedBookStatus,
265268
isBookRegisterSuccessBottomSheetVisible = isBookRegisterSuccessBottomSheetVisible,
266269
isGuestMode = userState is UserState.Guest,
267270
sideEffect = sideEffect,

feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -265,22 +265,25 @@ internal fun BookSearchContent(
265265
}
266266

267267
if (state.isBookRegisterSuccessBottomSheetVisible) {
268-
BookRegisterSuccessBottomSheet(
269-
onDismissRequest = { state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss) },
270-
sheetState = bookRegisterSuccessBottomSheetState,
271-
onCancelButtonClick = {
272-
coroutineScope.launch {
273-
bookRegisterSuccessBottomSheetState.hide()
274-
state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss)
275-
}
276-
},
277-
onOKButtonClick = {
278-
coroutineScope.launch {
279-
bookRegisterSuccessBottomSheetState.hide()
280-
state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessOkButtonClick)
281-
}
282-
},
283-
)
268+
state.upsertedBookStatus?.let { upsertedBookStatus ->
269+
BookRegisterSuccessBottomSheet(
270+
onDismissRequest = { state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss) },
271+
sheetState = bookRegisterSuccessBottomSheetState,
272+
upsertedBookStatus = upsertedBookStatus,
273+
onCancelButtonClick = {
274+
coroutineScope.launch {
275+
bookRegisterSuccessBottomSheetState.hide()
276+
state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss)
277+
}
278+
},
279+
onOKButtonClick = {
280+
coroutineScope.launch {
281+
bookRegisterSuccessBottomSheetState.hide()
282+
state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessOkButtonClick)
283+
}
284+
},
285+
)
286+
}
284287
}
285288
}
286289
}

feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUiState.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ data class BookSearchUiState(
3131
val selectedBookIsbn: String = "",
3232
val isBookRegisterBottomSheetVisible: Boolean = false,
3333
val selectedBookStatus: BookStatus? = null,
34+
val upsertedBookStatus: BookStatus? = null,
3435
val isBookRegisterSuccessBottomSheetVisible: Boolean = false,
3536
val isGuestMode: Boolean = false,
3637
val sideEffect: BookSearchSideEffect? = null,

feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookRegisterSuccessBottomSheet.kt

Lines changed: 92 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import androidx.compose.ui.res.painterResource
2020
import androidx.compose.ui.res.stringResource
2121
import androidx.compose.ui.text.style.TextAlign
2222
import androidx.compose.ui.unit.dp
23+
import com.ninecraft.booket.core.common.constants.BookStatus
2324
import com.ninecraft.booket.core.designsystem.ComponentPreview
2425
import com.ninecraft.booket.core.designsystem.component.button.ReedButton
2526
import com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle
@@ -33,8 +34,10 @@ import com.ninecraft.booket.feature.search.R
3334
fun BookRegisterSuccessBottomSheet(
3435
onDismissRequest: () -> Unit,
3536
sheetState: SheetState,
37+
upsertedBookStatus: BookStatus,
3638
onCancelButtonClick: () -> Unit,
3739
onOKButtonClick: () -> Unit,
40+
modifier: Modifier = Modifier,
3841
) {
3942
ReedBottomSheet(
4043
onDismissRequest = {
@@ -43,7 +46,7 @@ fun BookRegisterSuccessBottomSheet(
4346
sheetState = sheetState,
4447
) {
4548
Column(
46-
modifier = Modifier
49+
modifier = modifier
4750
.padding(
4851
start = ReedTheme.spacing.spacing5,
4952
top = ReedTheme.spacing.spacing5,
@@ -67,38 +70,63 @@ fun BookRegisterSuccessBottomSheet(
6770
)
6871
Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing1))
6972
Text(
70-
text = stringResource(R.string.book_register_success_description),
73+
text = stringResource(
74+
when (upsertedBookStatus) {
75+
BookStatus.BEFORE_READING -> R.string.book_register_success_description_before_reading
76+
BookStatus.READING -> R.string.book_register_success_description
77+
BookStatus.COMPLETED -> R.string.book_register_success_description_completed
78+
},
79+
),
7180
modifier = Modifier.fillMaxWidth(),
7281
color = ReedTheme.colors.contentSecondary,
7382
textAlign = TextAlign.Center,
7483
style = ReedTheme.typography.body1Medium,
7584
)
7685
Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing3))
77-
Row(
78-
modifier = Modifier
79-
.fillMaxWidth()
80-
.padding(vertical = ReedTheme.spacing.spacing4),
81-
horizontalArrangement = Arrangement.SpaceBetween,
82-
) {
86+
87+
if (upsertedBookStatus == BookStatus.BEFORE_READING) {
8388
ReedButton(
8489
onClick = {
8590
onCancelButtonClick()
8691
},
8792
sizeStyle = largeButtonStyle,
88-
colorStyle = ReedButtonColorStyle.SECONDARY,
89-
modifier = Modifier.weight(1f),
90-
text = stringResource(R.string.book_register_success_cancel),
91-
)
92-
Spacer(modifier = Modifier.width(ReedTheme.spacing.spacing2))
93-
ReedButton(
94-
onClick = {
95-
onOKButtonClick()
96-
},
97-
sizeStyle = largeButtonStyle,
9893
colorStyle = ReedButtonColorStyle.PRIMARY,
99-
modifier = Modifier.weight(1f),
100-
text = stringResource(R.string.book_register_success_ok),
94+
modifier = Modifier
95+
.fillMaxWidth()
96+
.padding(vertical = ReedTheme.spacing.spacing4),
97+
text = stringResource(R.string.book_register_success_ok_before_reading),
10198
)
99+
} else {
100+
Row(
101+
modifier = Modifier
102+
.fillMaxWidth()
103+
.padding(vertical = ReedTheme.spacing.spacing4),
104+
horizontalArrangement = Arrangement.SpaceBetween,
105+
) {
106+
ReedButton(
107+
onClick = {
108+
onCancelButtonClick()
109+
},
110+
sizeStyle = largeButtonStyle,
111+
colorStyle = ReedButtonColorStyle.SECONDARY,
112+
modifier = Modifier.weight(1f),
113+
text = stringResource(R.string.book_register_success_cancel),
114+
)
115+
Spacer(modifier = Modifier.width(ReedTheme.spacing.spacing2))
116+
ReedButton(
117+
onClick = {
118+
onOKButtonClick()
119+
},
120+
sizeStyle = largeButtonStyle,
121+
colorStyle = ReedButtonColorStyle.PRIMARY,
122+
modifier = Modifier.weight(1f),
123+
text = if (upsertedBookStatus == BookStatus.READING) {
124+
stringResource(R.string.book_register_success_ok)
125+
} else {
126+
stringResource(R.string.book_register_success_ok_completed)
127+
},
128+
)
129+
}
102130
}
103131
}
104132
}
@@ -107,7 +135,49 @@ fun BookRegisterSuccessBottomSheet(
107135
@OptIn(ExperimentalMaterial3Api::class)
108136
@ComponentPreview
109137
@Composable
110-
private fun BookRegisterSuccessBottomSheetPreview() {
138+
private fun BookRegisterSuccessBeforeReadingBottomSheetPreview() {
139+
val sheetState = SheetState(
140+
skipPartiallyExpanded = true,
141+
initialValue = SheetValue.Expanded,
142+
positionalThreshold = { 0f },
143+
velocityThreshold = { 0f },
144+
)
145+
ReedTheme {
146+
BookRegisterSuccessBottomSheet(
147+
onDismissRequest = {},
148+
sheetState = sheetState,
149+
upsertedBookStatus = BookStatus.BEFORE_READING,
150+
onCancelButtonClick = {},
151+
onOKButtonClick = {},
152+
)
153+
}
154+
}
155+
156+
@OptIn(ExperimentalMaterial3Api::class)
157+
@ComponentPreview
158+
@Composable
159+
private fun BookRegisterSuccessReadingBottomSheetPreview() {
160+
val sheetState = SheetState(
161+
skipPartiallyExpanded = true,
162+
initialValue = SheetValue.Expanded,
163+
positionalThreshold = { 0f },
164+
velocityThreshold = { 0f },
165+
)
166+
ReedTheme {
167+
BookRegisterSuccessBottomSheet(
168+
onDismissRequest = {},
169+
sheetState = sheetState,
170+
upsertedBookStatus = BookStatus.READING,
171+
onCancelButtonClick = {},
172+
onOKButtonClick = {},
173+
)
174+
}
175+
}
176+
177+
@OptIn(ExperimentalMaterial3Api::class)
178+
@ComponentPreview
179+
@Composable
180+
private fun BookRegisterSuccessCompletedBottomSheetPreview() {
111181
val sheetState = SheetState(
112182
skipPartiallyExpanded = true,
113183
initialValue = SheetValue.Expanded,
@@ -118,6 +188,7 @@ private fun BookRegisterSuccessBottomSheetPreview() {
118188
BookRegisterSuccessBottomSheet(
119189
onDismissRequest = {},
120190
sheetState = sheetState,
191+
upsertedBookStatus = BookStatus.COMPLETED,
121192
onCancelButtonClick = {},
122193
onOKButtonClick = {},
123194
)

feature/search/src/main/res/values/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,12 @@
99
<string name="book_register_title">등록 옵션</string>
1010
<string name="book_register_success_title">도서가 등록되었어요!</string>
1111
<string name="book_register_success_description">독서 기록을 바로 시작할까요?</string>
12+
<string name="book_register_success_description_before_reading">책을 읽으면서 독서 기록을 남길 수 있어요</string>
13+
<string name="book_register_success_description_completed">기억에 남는 문장이나 감상을 기록해보세요</string>
1214
<string name="book_register_success_cancel">나중에 하기</string>
1315
<string name="book_register_success_ok">기록 시작하기</string>
16+
<string name="book_register_success_ok_before_reading">확인</string>
17+
<string name="book_register_success_ok_completed">기록 남기기</string>
1418
<string name="book_register_ok">도서 등록</string>
1519
<string name="empty_recent_searches">최근 검색어 내역이 없습니다.</string>
1620
<string name="book_status_registered">이미 등록된 책입니다</string>

0 commit comments

Comments
 (0)