Skip to content

Commit

Permalink
πŸš€ BookInfo UI update
Browse files Browse the repository at this point in the history
* Updated UI of BookInfo screen
* Dialogs to update fields (title, author and description)
* Simplified updating mechanism
  • Loading branch information
Acclorite committed Jan 27, 2025
1 parent f232cd3 commit cf4cb62
Show file tree
Hide file tree
Showing 44 changed files with 957 additions and 1,242 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package ua.acclorite.book_story.presentation.book_info

import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
import ua.acclorite.book_story.R
import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.domain.ui.UIText
import ua.acclorite.book_story.presentation.core.components.dialog.DialogWithTextField
import ua.acclorite.book_story.ui.book_info.BookInfoEvent

@Composable
fun BookInfoAuthorDialog(
book: Book,
actionAuthorDialog: (BookInfoEvent.OnActionAuthorDialog) -> Unit,
dismissDialog: (BookInfoEvent.OnDismissDialog) -> Unit
) {
val context = LocalContext.current
DialogWithTextField(
initialValue = book.author.getAsString() ?: "",
lengthLimit = 100,
onDismiss = {
dismissDialog(BookInfoEvent.OnDismissDialog)
},
onAction = {
actionAuthorDialog(
BookInfoEvent.OnActionAuthorDialog(
author = if (it.isBlank()) UIText.StringResource(R.string.unknown_author)
else UIText.StringValue(it.trim().replace("\n", "")),
context = context
)
)
}
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,40 +2,12 @@ package ua.acclorite.book_story.presentation.book_info

import androidx.activity.compose.BackHandler
import androidx.compose.runtime.Composable
import ua.acclorite.book_story.ui.book_info.BookInfoEvent

@Composable
fun BookInfoBackHandler(
editTitle: Boolean,
editAuthor: Boolean,
editDescription: Boolean,
editTitleMode: (BookInfoEvent.OnEditTitleMode) -> Unit,
editAuthorMode: (BookInfoEvent.OnEditAuthorMode) -> Unit,
editDescriptionMode: (BookInfoEvent.OnEditDescriptionMode) -> Unit,
navigateBack: () -> Unit
) {
BackHandler {
var exitedEditMode = false

if (editTitle) {
editTitleMode(BookInfoEvent.OnEditTitleMode(false))
exitedEditMode = true
}

if (editAuthor) {
editAuthorMode(BookInfoEvent.OnEditAuthorMode(false))
exitedEditMode = true
}

if (editDescription) {
editDescriptionMode(BookInfoEvent.OnEditDescriptionMode(false))
exitedEditMode = true
}

if (exitedEditMode) {
return@BackHandler
}

navigateBack()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,6 @@ fun BookInfoBottomSheet(
resetCover: (BookInfoEvent.OnResetCover) -> Unit,
deleteCover: (BookInfoEvent.OnDeleteCover) -> Unit,
checkCoverReset: (BookInfoEvent.OnCheckCoverReset) -> Unit,
copyToClipboard: (BookInfoEvent.OnCopyToClipboard) -> Unit,
showDetailsBottomSheet: (BookInfoEvent.OnShowDetailsBottomSheet) -> Unit,
showMoveDialog: (BookInfoEvent.OnShowMoveDialog) -> Unit,
showDeleteDialog: (BookInfoEvent.OnShowDeleteDialog) -> Unit,
dismissBottomSheet: (BookInfoEvent.OnDismissBottomSheet) -> Unit
) {
when (bottomSheet) {
Expand All @@ -34,19 +30,9 @@ fun BookInfoBottomSheet(
)
}

BookInfoScreen.MORE_BOTTOM_SHEET -> {
BookInfoMoreBottomSheet(
showDetailsBottomSheet = showDetailsBottomSheet,
showDeleteDialog = showDeleteDialog,
showMoveDialog = showMoveDialog,
dismissBottomSheet = dismissBottomSheet
)
}

BookInfoScreen.DETAILS_BOTTOM_SHEET -> {
BookInfoDetailsBottomSheet(
book = book,
copyToClipboard = copyToClipboard,
dismissBottomSheet = dismissBottomSheet
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ fun BookInfoChangeCoverBottomSheet(
dismissBottomSheet: (BookInfoEvent.OnDismissBottomSheet) -> Unit
) {
val context = LocalContext.current

val photoPicker = rememberLauncherForActivityResult(
contract = ActivityResultContracts.PickVisualMedia(),
onResult = { uri ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,14 @@ fun BookInfoContent(
dialog: Dialog?,
listState: LazyListState,
canResetCover: Boolean,
editTitle: Boolean,
titleValue: String,
editAuthor: Boolean,
authorValue: String,
editDescription: Boolean,
descriptionValue: String,
editTitleMode: (BookInfoEvent.OnEditTitleMode) -> Unit,
editTitleValueChange: (BookInfoEvent.OnEditTitleValueChange) -> Unit,
editTitleRequestFocus: (BookInfoEvent.OnEditTitleRequestFocus) -> Unit,
editAuthorMode: (BookInfoEvent.OnEditAuthorMode) -> Unit,
editAuthorValueChange: (BookInfoEvent.OnEditAuthorValueChange) -> Unit,
editAuthorRequestFocus: (BookInfoEvent.OnEditAuthorRequestFocus) -> Unit,
editDescriptionMode: (BookInfoEvent.OnEditDescriptionMode) -> Unit,
editDescriptionValueChange: (BookInfoEvent.OnEditDescriptionValueChange) -> Unit,
editDescriptionRequestFocus: (BookInfoEvent.OnEditDescriptionRequestFocus) -> Unit,
showChangeCoverBottomSheet: (BookInfoEvent.OnShowChangeCoverBottomSheet) -> Unit,
showDetailsBottomSheet: (BookInfoEvent.OnShowDetailsBottomSheet) -> Unit,
showMoreBottomSheet: (BookInfoEvent.OnShowMoreBottomSheet) -> Unit,
showTitleDialog: (BookInfoEvent.OnShowTitleDialog) -> Unit,
actionTitleDialog: (BookInfoEvent.OnActionTitleDialog) -> Unit,
showAuthorDialog: (BookInfoEvent.OnShowAuthorDialog) -> Unit,
actionAuthorDialog: (BookInfoEvent.OnActionAuthorDialog) -> Unit,
showDescriptionDialog: (BookInfoEvent.OnShowDescriptionDialog) -> Unit,
actionDescriptionDialog: (BookInfoEvent.OnActionDescriptionDialog) -> Unit,
showMoveDialog: (BookInfoEvent.OnShowMoveDialog) -> Unit,
showDeleteDialog: (BookInfoEvent.OnShowDeleteDialog) -> Unit,
actionDeleteDialog: (BookInfoEvent.OnActionDeleteDialog) -> Unit,
Expand All @@ -44,15 +34,16 @@ fun BookInfoContent(
checkCoverReset: (BookInfoEvent.OnCheckCoverReset) -> Unit,
dismissDialog: (BookInfoEvent.OnDismissDialog) -> Unit,
dismissBottomSheet: (BookInfoEvent.OnDismissBottomSheet) -> Unit,
updateData: (BookInfoEvent.OnUpdateData) -> Unit,
copyToClipboard: (BookInfoEvent.OnCopyToClipboard) -> Unit,
navigateToReader: () -> Unit,
navigateToLibrary: () -> Unit,
navigateBack: () -> Unit
) {
BookInfoDialog(
dialog = dialog,
book = book,
actionTitleDialog = actionTitleDialog,
actionAuthorDialog = actionAuthorDialog,
actionDescriptionDialog = actionDescriptionDialog,
actionDeleteDialog = actionDeleteDialog,
actionMoveDialog = actionMoveDialog,
dismissDialog = dismissDialog,
Expand All @@ -68,45 +59,24 @@ fun BookInfoContent(
resetCover = resetCover,
deleteCover = deleteCover,
checkCoverReset = checkCoverReset,
copyToClipboard = copyToClipboard,
showDetailsBottomSheet = showDetailsBottomSheet,
showMoveDialog = showMoveDialog,
showDeleteDialog = showDeleteDialog,
dismissBottomSheet = dismissBottomSheet
)

BookInfoScaffold(
book = book,
listState = listState,
editTitle = editTitle,
titleValue = titleValue,
editAuthor = editAuthor,
authorValue = authorValue,
editDescription = editDescription,
descriptionValue = descriptionValue,
editTitleMode = editTitleMode,
editTitleValueChange = editTitleValueChange,
editTitleRequestFocus = editTitleRequestFocus,
editAuthorMode = editAuthorMode,
editAuthorValueChange = editAuthorValueChange,
editAuthorRequestFocus = editAuthorRequestFocus,
editDescriptionMode = editDescriptionMode,
editDescriptionValueChange = editDescriptionValueChange,
editDescriptionRequestFocus = editDescriptionRequestFocus,
showTitleDialog = showTitleDialog,
showAuthorDialog = showAuthorDialog,
showDescriptionDialog = showDescriptionDialog,
showChangeCoverBottomSheet = showChangeCoverBottomSheet,
showMoreBottomSheet = showMoreBottomSheet,
updateData = updateData,
showDetailsBottomSheet = showDetailsBottomSheet,
showMoveDialog = showMoveDialog,
showDeleteDialog = showDeleteDialog,
navigateToReader = navigateToReader,
navigateBack = navigateBack
)

BookInfoBackHandler(
editTitle = editTitle,
editAuthor = editAuthor,
editDescription = editDescription,
editTitleMode = editTitleMode,
editAuthorMode = editAuthorMode,
editDescriptionMode = editDescriptionMode,
navigateBack = navigateBack
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package ua.acclorite.book_story.presentation.book_info

import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
import ua.acclorite.book_story.domain.library.book.Book
import ua.acclorite.book_story.presentation.core.components.dialog.DialogWithTextField
import ua.acclorite.book_story.ui.book_info.BookInfoEvent

@Composable
fun BookInfoDescriptionDialog(
book: Book,
actionDescriptionDialog: (BookInfoEvent.OnActionDescriptionDialog) -> Unit,
dismissDialog: (BookInfoEvent.OnDismissDialog) -> Unit
) {
val context = LocalContext.current
DialogWithTextField(
initialValue = book.description ?: "",
lengthLimit = 5000,
onDismiss = {
dismissDialog(BookInfoEvent.OnDismissDialog)
},
onAction = {
actionDescriptionDialog(
BookInfoEvent.OnActionDescriptionDialog(
description = if (it.isBlank()) null
else it.trim().replace("\n", ""),
context = context
)
)
}
)
}
Loading

0 comments on commit cf4cb62

Please sign in to comment.