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 (
-
+
);
}