2025-12-19 00:41:48 +01:00

43 lines
1.3 KiB
JavaScript

import React from 'react'
import { View, Image } from 'react-native'
import Icon from 'react-native-vector-icons/FontAwesome'
import size from '~/styles/size'
import { useTheme } from '~/contexts/theme'
const ImageMemo = React.memo(Image, (prevProps, nextProps) => {
return prevProps.source?.uri === nextProps.source?.uri
})
const ImageError = ({ source, style = {}, children = null, iconError = null, blurRadius = undefined }) => {
const [isImage, setIsImage] = React.useState(false)
const [lastSource, setLastSource] = React.useState({ uri: null })
const theme = useTheme()
React.useEffect(() => {
if (lastSource.uri === source?.uri) return
if (!source?.uri) {
setIsImage(false)
setLastSource(source)
} else {
setLastSource(source)
setIsImage(true)
}
}, [source, source?.uri])
if (isImage) return <ImageMemo source={lastSource} onError={() => setIsImage(false)} style={style} blurRadius={blurRadius} />
if (children) return children
if (iconError) return (
<View style={[{ justifyContent: 'center', alignItems: 'center' }, style]}>
<Icon name={iconError} size={size.icon.large} color={theme.primaryText} />
</View>
)
return (
<Image
source={require('~/../assets/foreground-icon.png')}
style={style}
/>
)
}
export default ImageError