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} />
)}