diff --git a/src/renderer/components/maps-mangement-components/map-item.component.tsx b/src/renderer/components/maps-mangement-components/map-item.component.tsx index b1a6b2e6..e9e89a72 100644 --- a/src/renderer/components/maps-mangement-components/map-item.component.tsx +++ b/src/renderer/components/maps-mangement-components/map-item.component.tsx @@ -16,6 +16,7 @@ import { v4 as uuidv4 } from 'uuid'; import equal from "fast-deep-equal/es6"; import { getMapZipUrlFromHash } from "renderer/helpers/maps-utils"; import { BsmBasicSpinner } from "../shared/bsm-basic-spinner/bsm-basic-spinner.component"; +import defaultImage from '../../../../assets/images/default-version-img.jpg' export type ParsedMapDiff = {type: BsvMapDifficultyType, name: string, stars: number} @@ -160,13 +161,13 @@ export const MapItem = memo(({hash, title, autor, songAutor, coverUrl, songUrl,
- + {e.stopPropagation(); toogleMusic()}}>
- +

{title}

par {songAutor}

diff --git a/src/renderer/components/shared/bsm-image.component.tsx b/src/renderer/components/shared/bsm-image.component.tsx index 3a523638..5f65af73 100644 --- a/src/renderer/components/shared/bsm-image.component.tsx +++ b/src/renderer/components/shared/bsm-image.component.tsx @@ -1,8 +1,27 @@ -import { CSSProperties } from "react"; +import { CSSProperties, SyntheticEvent, useState } from "react"; export function BsmImage({className, image, errorImage, placeholder, loading, style}: {className?: string, image: string, errorImage?: string, placeholder?: string, loading?: "lazy"|"eager", style?: CSSProperties}) { - return ( - { currentTarget.onerror = null; currentTarget.src = errorImage || "" }} style={{...style, backgroundImage: placeholder && `url(${placeholder})`, backgroundSize: "cover"}} alt=""/> - ) + const [isLoaded, setIsLoaded] = useState(false); + + const styles: CSSProperties = (() => { + return { + ...style, + ...(!isLoaded && {backgroundImage: `url(${placeholder})`}), + ...(!isLoaded && {backgroundSize: "cover"}) + } + })(); + + const handleError = (e: SyntheticEvent) => { + e.currentTarget.onerror = null; + e.currentTarget.src = errorImage || ""; + } + + const handleLoaded = () => { + setIsLoaded(() => true); + } + + return ( + + ) }