import { SyntheticEvent, useEffect, useState } from 'react' import { supportsWebP } from '@utils/Tools' import Logger from '@utils/Logger' const BaseImage: React.FC = props => { const fallback = '/img/default.png' const [ webpUnavailable, setWebpUnavailable ] = useState() useEffect(()=> { setWebpUnavailable(localStorage.webp === 'false') }, []) return {props.alt)=> { if(webpUnavailable) { (e.target as ImageTarget).onerror = (event) => { // All Fails (event.target as ImageTarget).onerror = () => { Logger.warn('FALLBACK IMAGE LOAD FAIL') } (event.target as ImageTarget).src = fallback } } else if (props.fallbackSrc) { (e.target as ImageTarget).onerror = (event) => { // All Fails (event.target as ImageTarget).onerror = () => { Logger.warn('FALLBACK IMAGE LOAD FAIL') } (event.target as ImageTarget).src = fallback } // Webp Load Fail (e.target as ImageTarget).src = props.fallbackSrc if(!supportsWebP()) localStorage.setItem('webp', 'false') } else { (e.target as ImageTarget).src = fallback } }} /> } interface ImageProps { alt?: string className?: string src: string fallbackSrc?: string } interface ImageEvent extends Event { target: ImageTarget } interface ImageTarget extends EventTarget { src: string onerror: (event: SyntheticEvent) => void } export default BaseImage