From 7ab7058dba16e7b64190e144affeef28f01cb552 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Fri, 27 Jun 2025 16:28:38 +0800 Subject: [PATCH] refactor: fix fallback cover image for fitted mode (#1483) --- apps/readest-app/src/components/BookCover.tsx | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/apps/readest-app/src/components/BookCover.tsx b/apps/readest-app/src/components/BookCover.tsx index 69222c8e..4d199d4a 100644 --- a/apps/readest-app/src/components/BookCover.tsx +++ b/apps/readest-app/src/components/BookCover.tsx @@ -21,38 +21,52 @@ const BookCover: React.FC = ({ imageClassName, isPreview, }) => { + const handleImageError = (e: React.SyntheticEvent) => { + const img = e.target as HTMLImageElement; + img.style.display = 'none'; + + const mainContainer = img.closest('.book-cover-container'); + const fallbackDiv = mainContainer?.querySelector('.fallback-cover'); + + if (fallbackDiv) { + fallbackDiv.classList.remove('invisible'); + } + }; + return ( -
+
{coverFit === 'crop' ? ( {book.title} { - (e.target as HTMLImageElement).style.display = 'none'; - (e.target as HTMLImageElement).nextElementSibling?.classList.remove('invisible'); - }} + className={clsx('crop-cover-img object-cover shadow-md', imageClassName)} + onError={handleImageError} /> ) : ( -
+
{book.title} { - (e.target as HTMLImageElement).style.display = 'none'; - (e.target as HTMLImageElement).nextElementSibling?.classList.remove('invisible'); - }} + className={clsx( + 'fit-cover-img h-auto max-h-full w-auto max-w-full shadow-md', + imageClassName, + )} + onError={handleImageError} />
)}