diff --git a/src/renderer/components/item-card/item-card.module.css b/src/renderer/components/item-card/item-card.module.css index 0a599c700..0244bac71 100644 --- a/src/renderer/components/item-card/item-card.module.css +++ b/src/renderer/components/item-card/item-card.module.css @@ -56,9 +56,7 @@ } .image-container.is-round { - &::before { - border-radius: 50%; - } + border-radius: 50%; } .favorite-badge { diff --git a/src/renderer/components/item-card/item-card.tsx b/src/renderer/components/item-card/item-card.tsx index 898d17e79..7c7dc8917 100644 --- a/src/renderer/components/item-card/item-card.tsx +++ b/src/renderer/components/item-card/item-card.tsx @@ -785,9 +785,9 @@ const PosterItemCard = ({ <> {isFavorite &&
} {hasRating &&
{userRating}
} diff --git a/src/renderer/components/item-image/item-image.tsx b/src/renderer/components/item-image/item-image.tsx index fb6cf2a13..910d78345 100644 --- a/src/renderer/components/item-image/item-image.tsx +++ b/src/renderer/components/item-image/item-image.tsx @@ -11,6 +11,25 @@ import { import { BaseImage, ImageProps } from '/@/shared/components/image/image'; import { LibraryItem } from '/@/shared/types/domain-types'; +const getUnloaderIcon = (itemType: LibraryItem) => { + switch (itemType) { + case LibraryItem.ALBUM: + return 'emptyAlbumImage'; + case LibraryItem.ALBUM_ARTIST: + return 'emptyArtistImage'; + case LibraryItem.ARTIST: + return 'emptyArtistImage'; + case LibraryItem.GENRE: + return 'emptyGenreImage'; + case LibraryItem.PLAYLIST: + return 'emptyPlaylistImage'; + case LibraryItem.SONG: + return 'emptySongImage'; + default: + return 'emptyImage'; + } +}; + const BaseItemImage = ( props: Omit & { id?: null | string; @@ -27,7 +46,7 @@ const BaseItemImage = ( size: 300, }); - return ; + return ; }; export const ItemImage = memo(BaseItemImage); diff --git a/src/shared/components/icon/icon.tsx b/src/shared/components/icon/icon.tsx index 0031db60f..969ce13bb 100644 --- a/src/shared/components/icon/icon.tsx +++ b/src/shared/components/icon/icon.tsx @@ -160,7 +160,12 @@ export const AppIcon = { edit: LuPencilLine, ellipsisHorizontal: LuEllipsis, ellipsisVertical: LuEllipsisVertical, + emptyAlbumImage: LuDisc3, + emptyArtistImage: LuUser, + emptyGenreImage: LuFlag, emptyImage: LuDisc3, + emptyPlaylistImage: LuListMusic, + emptySongImage: LuMusic, error: LuShieldAlert, externalLink: LuExternalLink, favorite: LuHeart, diff --git a/src/shared/components/image/image.tsx b/src/shared/components/image/image.tsx index 235e6171e..3880a7224 100644 --- a/src/shared/components/image/image.tsx +++ b/src/shared/components/image/image.tsx @@ -11,7 +11,7 @@ import { Img } from 'react-image'; import styles from './image.module.css'; -import { Icon } from '/@/shared/components/icon/icon'; +import { AppIcon, Icon } from '/@/shared/components/icon/icon'; import { Skeleton } from '/@/shared/components/skeleton/skeleton'; import { useInViewport } from '/@/shared/hooks/use-in-viewport'; @@ -23,6 +23,7 @@ export interface ImageProps extends Omit, 's includeUnloader?: boolean; src: string | string[] | undefined; thumbHash?: string; + unloaderIcon?: keyof typeof AppIcon; } interface ImageContainerProps extends HTMLAttributes { @@ -36,6 +37,7 @@ interface ImageLoaderProps { interface ImageUnloaderProps { className?: string; + icon?: keyof typeof AppIcon; } export const FALLBACK_SVG = @@ -49,52 +51,40 @@ export function BaseImage({ includeLoader = true, includeUnloader = true, src, + unloaderIcon = 'emptyImage', ...props }: ImageProps) { const { inViewport, ref } = useInViewport(); - if (src) { - return ( - ( - - {children} - - )} - decoding="async" - fetchPriority={inViewport ? 'high' : 'low'} - loader={ - includeLoader ? ( - - - - ) : null - } - loading={inViewport ? 'eager' : 'lazy'} - src={inViewport ? src : FALLBACK_SVG} - unloader={ - includeUnloader ? ( - - - - ) : null - } - {...props} - /> - ); - } - return ( - - + + {inViewport && src ? ( + : null} + loading="eager" + src={src} + unloader={ + includeUnloader ? ( + + ) : null + } + {...props} + /> + ) : !src ? ( + + ) : ( + + )} ); } @@ -131,10 +121,10 @@ export function ImageLoader({ className }: ImageLoaderProps) { ); } -export function ImageUnloader({ className }: ImageUnloaderProps) { +export function ImageUnloader({ className, icon = 'emptyImage' }: ImageUnloaderProps) { return (
- +
); }