diff --git a/packages/api/src/functions/covers/handler.ts b/packages/api/src/functions/covers/handler.ts index 30034afe..8a54712b 100644 --- a/packages/api/src/functions/covers/handler.ts +++ b/packages/api/src/functions/covers/handler.ts @@ -25,7 +25,7 @@ const lambda: ValidatedEventAPIGatewayProxyEvent = async (event) => { width: 600, height: 600, fit: "inside", - withoutEnlargement: true + withoutEnlargement: true }) const converted = diff --git a/packages/web/src/books/bookList/BookListWithControls.tsx b/packages/web/src/books/bookList/BookListWithControls.tsx index 652c4943..f01cd580 100644 --- a/packages/web/src/books/bookList/BookListWithControls.tsx +++ b/packages/web/src/books/bookList/BookListWithControls.tsx @@ -9,6 +9,7 @@ export const BookListWithControls: FC< data: string[] renderEmptyList?: React.ReactNode ListActionsToolbarProps?: Partial> + useWindowScroll?: boolean } & Pick< ComponentProps, "viewMode" | "onViewModeChange" | "sorting" | "onSortingChange" @@ -20,42 +21,36 @@ export const BookListWithControls: FC< viewMode, onViewModeChange, onSortingChange, - ListActionsToolbarProps + ListActionsToolbarProps, + useWindowScroll }) => { const sortedData = useBookIdsSortedBy(data, sorting) return ( - - -
+ + {sortedData.length === 0 && !!renderEmptyList && renderEmptyList} {sortedData.length > 0 && ( ( + + )} + useWindowScroll={useWindowScroll} + style={{ + height: "100%", + width: "100%" + }} /> )} -
+
) } diff --git a/packages/web/src/collections/CollectionDetailsScreen.tsx b/packages/web/src/collections/details/CollectionDetailsScreen.tsx similarity index 72% rename from packages/web/src/collections/CollectionDetailsScreen.tsx rename to packages/web/src/collections/details/CollectionDetailsScreen.tsx index e1b9cf0c..21d7d30a 100644 --- a/packages/web/src/collections/CollectionDetailsScreen.tsx +++ b/packages/web/src/collections/details/CollectionDetailsScreen.tsx @@ -1,24 +1,26 @@ -import { TopBarNavigation } from "../navigation/TopBarNavigation" -import { Box, Stack, Typography, useMediaQuery, useTheme } from "@mui/material" +import { TopBarNavigation } from "../../navigation/TopBarNavigation" +import { Box, Stack, Typography, useTheme } from "@mui/material" import { useNavigate, useParams } from "react-router-dom" -import EmptyLibraryAsset from "../assets/empty-library.svg" -import CollectionBgSvg from "../assets/series-bg.svg" -import { BookListWithControls } from "../books/bookList/BookListWithControls" +import EmptyLibraryAsset from "../../assets/empty-library.svg" +import CollectionBgSvg from "../../assets/series-bg.svg" +import { BookListWithControls } from "../../books/bookList/BookListWithControls" import { signal, useSignalValue } from "reactjrx" import { ListActionSorting, ListActionViewMode -} from "../common/lists/ListActionsToolbar" -import { useCollectionActionsDrawer } from "./CollectionActionsDrawer/useCollectionActionsDrawer" -import { useCollection } from "./useCollection" -import { COLLECTION_EMPTY_ID } from "../constants.shared" +} from "../../common/lists/ListActionsToolbar" +import { useCollectionActionsDrawer } from "../CollectionActionsDrawer/useCollectionActionsDrawer" +import { useCollection } from "../useCollection" +import { COLLECTION_EMPTY_ID } from "../../constants.shared" import { useEffect, useMemo } from "react" -import { useBooks } from "../books/states" -import { useLocalSettings } from "../settings/states" -import { Report } from "../debug/report.shared" -import { useCollectionComputedMetadata } from "./useCollectionComputedMetadata" -import { useCollectionCoverUri } from "./useCollectionCoverUri" -import placeholder from "../assets/cover-placeholder.png" +import { useBooks } from "../../books/states" +import { useLocalSettings } from "../../settings/states" +import { Report } from "../../debug/report.shared" +import { useCollectionComputedMetadata } from "../useCollectionComputedMetadata" +import { useCollectionCoverUri } from "../useCollectionCoverUri" +import placeholder from "../../assets/cover-placeholder.png" +import { StatusChip } from "../series/StatusChip" +import { useWindowScroll } from "react-use" type ScreenParams = { id: string @@ -63,7 +65,7 @@ export const CollectionDetailsScreen = () => { `calc(${theme.spacing(1)} + ${70}px)` ] const headerHeight = [ - `calc(${headerPt[0]} + 90px)`, + `calc(${headerPt[0]} + 100px)`, `calc(${headerPt[1]} + 150px)`, `calc(${headerPt[2]} + 250px)` ] @@ -86,6 +88,7 @@ export const CollectionDetailsScreen = () => { } } ) + const { x, y } = useWindowScroll() useEffect(() => { Report.log({ @@ -96,16 +99,36 @@ export const CollectionDetailsScreen = () => { return ( <> - + - + { }} /> )} - + {!!hasCover && ( { }} /> )} - + {metadata.displayTitle} {`${collection?.books?.length || 0} book(s)`} + {collection?.type === "series" && ( + + )} { diff --git a/packages/web/src/collections/lists/CollectionListItemCover.tsx b/packages/web/src/collections/lists/CollectionListItemCover.tsx index 71fa0368..bba5469b 100644 --- a/packages/web/src/collections/lists/CollectionListItemCover.tsx +++ b/packages/web/src/collections/lists/CollectionListItemCover.tsx @@ -20,6 +20,7 @@ import { getCollectionComputedMetadata } from "../getCollectionComputedMetadata" import { CollectionListItemProgress } from "./CollectionListItemProgress" import { useCollectionReadingProgress } from "../useCollectionReadingProgress" import { useCollectionCoverUri } from "../useCollectionCoverUri" +import { StatusChip } from "../series/StatusChip" export const CollectionListItemCover = memo(({ id }: { id: string }) => { const theme = useTheme() @@ -96,45 +97,11 @@ export const CollectionListItemCover = memo(({ id }: { id: string }) => { }} /> {item?.type === "series" && ( - - - {capitalize(metadata.status ?? "unknown")} - - {metadata.rating !== undefined && ( - - - - {metadata.rating.toFixed(1)} - - - )} - - } - icon={ - - } - size="small" + & ChipProps) => { + return ( + + + {capitalize(status ?? "unknown")} + + {rating !== undefined && ( + + + + {rating.toFixed(1)} + + + )} + + } + icon={ + + } + size="small" + {...rest} + /> + ) + } +) diff --git a/packages/web/src/common/lists/ListActionsToolbar.tsx b/packages/web/src/common/lists/ListActionsToolbar.tsx index 1864b28a..d18e7136 100644 --- a/packages/web/src/common/lists/ListActionsToolbar.tsx +++ b/packages/web/src/common/lists/ListActionsToolbar.tsx @@ -76,7 +76,6 @@ export const ListActionsToolbar = memo( <> { const virtuosoRef = useRef(null) const virtuosoGridRef = useRef(null) @@ -134,7 +135,6 @@ export const VirtuosoList = memo( {itemsPerRow > 1 ? ( { style={{ display: "flex", flex: 1, - overflow: "scroll", + overflow: "auto", flexFlow: "column" }} > diff --git a/packages/web/src/home/HomeScreen.tsx b/packages/web/src/home/HomeScreen.tsx index c1f2da76..42c88d68 100644 --- a/packages/web/src/home/HomeScreen.tsx +++ b/packages/web/src/home/HomeScreen.tsx @@ -17,19 +17,14 @@ export const HomeScreen = memo(() => { const { t } = useTranslation() return ( - + - + {continueReadingBooks.length === 0 && !isPending && (
{ style={{ display: "flex", flexDirection: "column", - height: "100%", flex: 1, overflow: "hidden" }} @@ -84,18 +83,7 @@ export const LibraryBooksScreen = () => { }} numberOfFiltersApplied={numberOfFiltersApplied} /> - + {books.length === 0 && (
{ flexFlow: "column", alignItems: "center", textAlign: "center", - // paddingLeft: theme.spacing(2), - // paddingRight: theme.spacing(2), width: "80%", maxWidth: theme.custom.maxWidthCenteredContent }} diff --git a/packages/web/src/navigation/AppNavigator.tsx b/packages/web/src/navigation/AppNavigator.tsx index 1d26b611..7a061b34 100644 --- a/packages/web/src/navigation/AppNavigator.tsx +++ b/packages/web/src/navigation/AppNavigator.tsx @@ -15,7 +15,7 @@ import { ManageStorageScreen } from "../settings/ManageStorageScreen" import { LibraryTopTabNavigator } from "../library/LibraryTopTabNavigator" import { ROUTES } from "../constants" import { BookDetailsScreen } from "../books/details/BookDetailsScreen" -import { CollectionDetailsScreen } from "../collections/CollectionDetailsScreen" +import { CollectionDetailsScreen } from "../collections/details/CollectionDetailsScreen" import { BookActionsDrawer } from "../books/drawer/BookActionsDrawer" import { DataSourcesListScreen } from "../dataSources/DataSourcesListScreen" import { SearchScreen } from "../search/SearchScreen" diff --git a/packages/web/src/navigation/TopBarNavigation.tsx b/packages/web/src/navigation/TopBarNavigation.tsx index 63ccef22..cb867b35 100644 --- a/packages/web/src/navigation/TopBarNavigation.tsx +++ b/packages/web/src/navigation/TopBarNavigation.tsx @@ -1,7 +1,7 @@ import React, { FC, ComponentProps, memo } from "react" import AppBar from "@mui/material/AppBar" import Toolbar from "@mui/material/Toolbar" -import Typography from "@mui/material/Typography" +import Typography, { TypographyProps } from "@mui/material/Typography" import IconButton from "@mui/material/IconButton" import { ArrowBackIosRounded, @@ -34,6 +34,7 @@ export const TopBarNavigation: FC< hasLockLibrary?: boolean goBackDefaultTo?: string onMoreClick?: () => void + TitleProps?: TypographyProps } & ComponentProps > = memo( ({ @@ -47,6 +48,7 @@ export const TopBarNavigation: FC< goBackDefaultTo, hasLockLibrary, color, + TitleProps, ...rest }) => { const isLibraryUnlocked = useSignalValue( @@ -72,9 +74,16 @@ export const TopBarNavigation: FC< )} - + {!hasSearch && !!title && ( - + {title} )} diff --git a/packages/web/src/plugins/PluginScreen.tsx b/packages/web/src/plugins/PluginScreen.tsx index bd4a5428..1a041133 100644 --- a/packages/web/src/plugins/PluginScreen.tsx +++ b/packages/web/src/plugins/PluginScreen.tsx @@ -11,7 +11,7 @@ export const PluginScreen = memo(() => { return ( <> - + { return ( <> - + {plugins.map((plugin) => ( diff --git a/packages/web/src/profile/index.ts b/packages/web/src/profile/index.ts index 81ca4ac0..e2e6743c 100644 --- a/packages/web/src/profile/index.ts +++ b/packages/web/src/profile/index.ts @@ -3,7 +3,7 @@ import { readerSettingsStateSignal } from "../reader/settings/states" import { bookBeingReadStatePersist } from "../reading/states" import { localSettingsStatePersist } from "../settings/states" import { libraryShelvesFiltersSignal } from "../library/shelves/filters/states" -import { collectionDetailsScreenListControlsStateSignal } from "../collections/CollectionDetailsScreen" +import { collectionDetailsScreenListControlsStateSignal } from "../collections/details/CollectionDetailsScreen" import { searchListActionsToolbarSignal } from "../search/list/states" import { SignalPersistenceConfig } from "reactjrx" diff --git a/packages/web/src/settings/ProfileScreen.tsx b/packages/web/src/settings/ProfileScreen.tsx index 0ee45ca9..c7fe860a 100644 --- a/packages/web/src/settings/ProfileScreen.tsx +++ b/packages/web/src/settings/ProfileScreen.tsx @@ -64,7 +64,7 @@ export const ProfileScreen = () => { style={{ display: "flex", flex: 1, - overflow: "scroll", + overflow: "auto", flexDirection: "column" }} > diff --git a/packages/web/src/settings/SettingsScreen.tsx b/packages/web/src/settings/SettingsScreen.tsx index ff7c2d72..18da566c 100644 --- a/packages/web/src/settings/SettingsScreen.tsx +++ b/packages/web/src/settings/SettingsScreen.tsx @@ -48,7 +48,7 @@ export const SettingsScreen = memo(() => { return ( <> - + General