mirror of
https://github.com/koreanbots/core.git
synced 2025-12-15 14:10:22 +00:00
fix: webp
This commit is contained in:
parent
db09287ca0
commit
ac4d00bf8b
@ -1,6 +1,7 @@
|
||||
import { SyntheticEvent } from 'react'
|
||||
import { SyntheticEvent, useEffect, useState } from 'react'
|
||||
import { ImageSize } from '../types'
|
||||
import { DiscordEnpoints } from '../utils/Constants'
|
||||
import { supportsWebP } from '../utils/Tools'
|
||||
|
||||
const DiscordAvatar = (props: {
|
||||
alt?: string
|
||||
@ -10,19 +11,30 @@ const DiscordAvatar = (props: {
|
||||
className?: string
|
||||
size? : ImageSize
|
||||
}) => {
|
||||
const fallback ='/img/default.png'
|
||||
const webp = localStorage.webp === 'true'
|
||||
const fallback = '/img/default.png'
|
||||
const [ webpUnavailable, setWebpUnavailable ] = useState<boolean>()
|
||||
useEffect(()=> {
|
||||
setWebpUnavailable(localStorage.webp === 'false')
|
||||
}, [])
|
||||
return (
|
||||
<img
|
||||
alt={props.alt ?? 'IMage'}
|
||||
alt={props.alt ?? 'Image'}
|
||||
className={props.className}
|
||||
src={
|
||||
props.avatarHash
|
||||
? DiscordEnpoints.CDN.user(props.userID, props.avatarHash, { format: webp ? 'webp' : 'png', size: props.size ?? 256})
|
||||
: DiscordEnpoints.CDN.default(props.tag, { format: webp ? 'webp' : 'png', size: props.size ?? 256})
|
||||
? DiscordEnpoints.CDN.user(props.userID, props.avatarHash, { format: !webpUnavailable ? 'webp' : 'png', size: props.size ?? 256})
|
||||
: DiscordEnpoints.CDN.default(props.tag, { format: !webpUnavailable ? 'webp' : 'png', size: props.size ?? 256})
|
||||
}
|
||||
onError={(e: SyntheticEvent<HTMLImageElement, ImageEvent>)=> {
|
||||
if(webp) {
|
||||
if(webpUnavailable) {
|
||||
(e.target as ImageTarget).onerror = (event) => {
|
||||
// All Fails
|
||||
(event.target as ImageTarget).onerror = ()=> { console.log('FALLBACK IMAGE LOAD FAIL') }
|
||||
(event.target as ImageTarget).src = fallback
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
(e.target as ImageTarget).onerror = (event) => {
|
||||
// All Fails
|
||||
(event.target as ImageTarget).onerror = ()=> { console.log('FALLBACK IMAGE LOAD FAIL') }
|
||||
@ -32,17 +44,8 @@ const DiscordAvatar = (props: {
|
||||
(e.target as ImageTarget).src = props.avatarHash
|
||||
? DiscordEnpoints.CDN.user(props.userID, props.avatarHash, { size: props.size ?? 256 })
|
||||
: DiscordEnpoints.CDN.default(props.tag, { size: props.size ?? 256})
|
||||
if(!supportsWebP()) localStorage.setItem('webp', 'false')
|
||||
}
|
||||
else (e.target as ImageTarget).onerror = (event) => {
|
||||
// All Fails
|
||||
(event.target as ImageTarget).onerror = ()=> { console.log('FALLBACK IMAGE LOAD FAIL') }
|
||||
(event.target as ImageTarget).src = fallback
|
||||
}
|
||||
// Webp Load Fail
|
||||
(e.target as ImageTarget).src = props.avatarHash
|
||||
? DiscordEnpoints.CDN.user(props.userID, props.avatarHash, { size: props.size ?? 256 })
|
||||
: DiscordEnpoints.CDN.default(props.tag, { size: props.size ?? 256})
|
||||
|
||||
}}
|
||||
/>
|
||||
)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user