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 @@ -55,6 +55,7 @@ internal fun BookSummary.toModel(): BookSummaryModel {
author = author,
publisher = publisher,
coverImageUrl = coverImageUrl,
userBookStatus = userBookStatus,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,5 @@ data class BookSummaryModel(
val author: String = "",
val publisher: String = "",
val coverImageUrl: String = "",
val userBookStatus: String = "",
)
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,6 @@ data class BookSummary(
val publisher: String,
@SerialName("coverImageUrl")
val coverImageUrl: String,
@SerialName("userBookStatus")
val userBookStatus: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,12 @@ class SearchPresenter @AssistedInject constructor(
repository.upsertBook(bookIsbn, bookStatus)
.onSuccess {
registeredUserBookId = it.userBookId
books = books.map { book ->
if (book.isbn == selectedBookIsbn) {
book.copy(userBookStatus = bookStatus)
} else book
}.toPersistentList()

selectedBookIsbn = ""
selectedBookStatus = null
isBookRegisterBottomSheetVisible = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,7 @@ internal fun SearchContent(
onBookClick = { book ->
state.eventSink(SearchUiEvent.OnBookClick(book.isbn))
},
enabled = SearchBookStatus.from(state.books[index].userBookStatus) == SearchBookStatus.BEFORE_REGISTRATION,
)
HorizontalDivider(
modifier = Modifier.fillMaxWidth(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,14 @@ sealed interface SearchUiEvent : CircuitUiEvent {
data object OnBookRegisterSuccessOkButtonClick : SearchUiEvent
data object OnBookRegisterSuccessCancelButtonClick : SearchUiEvent
}

enum class SearchBookStatus(val value: String) {
BEFORE_REGISTRATION("BEFORE_REGISTRATION"),
;

companion object {
fun from(value: String?): SearchBookStatus? {
return entries.find { it.value == value }
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.ninecraft.booket.feature.search.component

import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
Expand All @@ -15,31 +17,41 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.ninecraft.booket.core.designsystem.ComponentPreview
import com.ninecraft.booket.core.designsystem.component.NetworkImage
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
import com.ninecraft.booket.core.designsystem.theme.White
import com.ninecraft.booket.core.model.BookSummaryModel
import com.ninecraft.booket.feature.search.R
import com.ninecraft.booket.core.designsystem.R as designR

@Composable
fun BookItem(
book: BookSummaryModel,
onBookClick: (BookSummaryModel) -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
) {
val titleColor = if (enabled) ReedTheme.colors.contentPrimary else ReedTheme.colors.contentDisabled
val authorColor = if (enabled) ReedTheme.colors.contentTertiary else ReedTheme.colors.contentDisabled
val bgColor = if (enabled) White else ReedTheme.colors.bgDisabled

Row(
modifier = modifier
.fillMaxWidth()
.clickable { onBookClick(book) }
.background(bgColor)
.then(
if (enabled) Modifier.clickable { onBookClick(book) } else Modifier,
)
.padding(horizontal = ReedTheme.spacing.spacing5),
verticalAlignment = Alignment.CenterVertically,
) {
NetworkImage(
imageUrl = book.coverImageUrl,
contentDescription = "Book CoverImage",
Box(
modifier = Modifier
.padding(
top = ReedTheme.spacing.spacing4,
Expand All @@ -49,12 +61,37 @@ fun BookItem(
.width(68.dp)
.height(100.dp)
.clip(RoundedCornerShape(size = ReedTheme.radius.sm)),
placeholder = painterResource(designR.drawable.ic_placeholder),
)
) {
NetworkImage(
imageUrl = book.coverImageUrl,
contentDescription = "Book CoverImage",
modifier = Modifier.matchParentSize(),
placeholder = painterResource(designR.drawable.ic_placeholder),
)

if (!enabled) {
Box(
modifier = Modifier
.matchParentSize()
.background(Color.Black.copy(alpha = 0.3f)),
)
}
}

Column(modifier = Modifier.weight(1f)) {
if (!enabled) {
Text(
text = stringResource(R.string.book_status_registered),
color = ReedTheme.colors.contentSuccess,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
style = ReedTheme.typography.label2Regular,
)
Spacer(Modifier.height(ReedTheme.spacing.spacing1))
}
Text(
text = book.title,
color = ReedTheme.colors.contentPrimary,
color = titleColor,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
style = ReedTheme.typography.body1SemiBold,
Expand All @@ -66,7 +103,7 @@ fun BookItem(
) {
Text(
text = book.author,
color = ReedTheme.colors.contentTertiary,
color = authorColor,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
style = ReedTheme.typography.label1Medium,
Expand All @@ -81,7 +118,7 @@ fun BookItem(
Spacer(Modifier.width(ReedTheme.spacing.spacing1))
Text(
text = book.publisher,
color = ReedTheme.colors.contentTertiary,
color = authorColor,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
style = ReedTheme.typography.label1Medium,
Expand Down
1 change: 1 addition & 0 deletions feature/search/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@
<string name="book_register_success_ok">네, 진행할게요!</string>
<string name="book_register_ok">도서 등록</string>
<string name="empty_recent_searches">최근 검색어 내역이 없습니다.</string>
<string name="book_status_registered">이미 등록된 책입니다</string>
</resources>
Loading