From 7737c05c8f45590d8e0fbda15b25f1d6cea7c0dd Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Fri, 27 Jun 2025 16:01:17 +0800 Subject: [PATCH] layout: apply custom css also to the library page, tweaks on fitted cover images (#1481) --- .../src/app/library/components/BookItem.tsx | 4 +- .../src/app/library/components/GroupItem.tsx | 16 ++++--- apps/readest-app/src/app/library/page.tsx | 5 ++- apps/readest-app/src/components/BookCover.tsx | 44 ++++++++++++------- apps/readest-app/src/hooks/useUICSS.ts | 13 +++--- 5 files changed, 53 insertions(+), 29 deletions(-) diff --git a/apps/readest-app/src/app/library/components/BookItem.tsx b/apps/readest-app/src/app/library/components/BookItem.tsx index 6392fbe4..0e12424b 100644 --- a/apps/readest-app/src/app/library/components/BookItem.tsx +++ b/apps/readest-app/src/app/library/components/BookItem.tsx @@ -54,7 +54,7 @@ const BookItem: React.FC = ({
= ({ mode === 'list' && 'min-w-20', )} > - + {selectedBooks.includes(book.hash) && (
)} diff --git a/apps/readest-app/src/app/library/components/GroupItem.tsx b/apps/readest-app/src/app/library/components/GroupItem.tsx index 4b0e28ac..a3d860e2 100644 --- a/apps/readest-app/src/app/library/components/GroupItem.tsx +++ b/apps/readest-app/src/app/library/components/GroupItem.tsx @@ -1,6 +1,7 @@ import clsx from 'clsx'; import { MdCheckCircle, MdCheckCircleOutline } from 'react-icons/md'; import { useEnv } from '@/context/EnvContext'; +import { useResponsiveSize } from '@/hooks/useResponsiveSize'; import { BooksGroup } from '@/types/book'; import BookCover from '@/components/BookCover'; @@ -12,10 +13,12 @@ interface GroupItemProps { const GroupItem: React.FC = ({ group, isSelectMode, selectedBooks }) => { const { appService } = useEnv(); + const iconSize15 = useResponsiveSize(15); + return (
@@ -40,10 +43,13 @@ const GroupItem: React.FC = ({ group, isSelectMode, selectedBook
)}
-
-

- {group.name} -

+
+
+

+ {group.name} +

+
+
); diff --git a/apps/readest-app/src/app/library/page.tsx b/apps/readest-app/src/app/library/page.tsx index 00962f9f..7cb1da3c 100644 --- a/apps/readest-app/src/app/library/page.tsx +++ b/apps/readest-app/src/app/library/page.tsx @@ -26,6 +26,7 @@ import { useLibraryStore } from '@/store/libraryStore'; import { useSettingsStore } from '@/store/settingsStore'; import { usePullToRefresh } from '@/hooks/usePullToRefresh'; import { useTheme } from '@/hooks/useTheme'; +import { useUICSS } from '@/hooks/useUICSS'; import { useDemoBooks } from './hooks/useDemoBooks'; import { useBooksSync } from './hooks/useBooksSync'; import { useSafeAreaInsets } from '@/hooks/useSafeAreaInsets'; @@ -68,7 +69,6 @@ const LibraryPageContent = ({ searchParams }: { searchParams: ReadonlyURLSearchP setCheckLastOpenBooks, } = useLibraryStore(); const _ = useTranslation(); - useTheme({ systemUIVisible: true, appThemeColor: 'base-200' }); const insets = useSafeAreaInsets(); const { settings, setSettings, saveSettings } = useSettingsStore(); const [loading, setLoading] = useState(false); @@ -87,6 +87,9 @@ const LibraryPageContent = ({ searchParams }: { searchParams: ReadonlyURLSearchP const containerRef = useRef(null); const pageRef = useRef(null); + useTheme({ systemUIVisible: true, appThemeColor: 'base-200' }); + useUICSS(); + useOpenWithBooks(); const { pullLibrary, pushLibrary } = useBooksSync({ diff --git a/apps/readest-app/src/components/BookCover.tsx b/apps/readest-app/src/components/BookCover.tsx index a42234d0..69222c8e 100644 --- a/apps/readest-app/src/components/BookCover.tsx +++ b/apps/readest-app/src/components/BookCover.tsx @@ -22,22 +22,34 @@ const BookCover: React.FC = ({ isPreview, }) => { return ( -
- {book.title} { - (e.target as HTMLImageElement).style.display = 'none'; - (e.target as HTMLImageElement).nextElementSibling?.classList.remove('invisible'); - }} - /> +
+ {coverFit === 'crop' ? ( + {book.title} { + (e.target as HTMLImageElement).style.display = 'none'; + (e.target as HTMLImageElement).nextElementSibling?.classList.remove('invisible'); + }} + /> + ) : ( +
+ {book.title} { + (e.target as HTMLImageElement).style.display = 'none'; + (e.target as HTMLImageElement).nextElementSibling?.classList.remove('invisible'); + }} + /> +
+ )}
{ +export const useUICSS = (bookKey?: string) => { + const { settings } = useSettingsStore(); const { getViewSettings } = useReaderStore(); - const viewSettings = getViewSettings(bookKey); + const viewSettings = getViewSettings(bookKey || ''); const [styleElement, setStyleElement] = useState(null); useEffect(() => { - if (!viewSettings) return; if (styleElement) { styleElement.remove(); } - const rawCSS = viewSettings.userUIStylesheet || ''; + const rawCSS = + viewSettings?.userUIStylesheet || settings?.globalViewSettings?.userUIStylesheet || ''; + const newStyleEl = document.createElement('style'); newStyleEl.textContent = rawCSS.replace('foliate-view', `#foliate-view-${bookKey}`); document.head.appendChild(newStyleEl); @@ -24,5 +27,5 @@ export const useUICSS = (bookKey: string) => { newStyleEl.remove(); }; // eslint-disable-next-line react-hooks/exhaustive-deps - }, [viewSettings]); + }, [viewSettings?.userUIStylesheet, settings?.globalViewSettings?.userUIStylesheet, bookKey]); };