import {SyntheticEvent, useState} from 'react'; import {FormattedMessage} from 'react-intl'; import { Card, Container, Icon, Image, Label, Message, Modal, Placeholder, } from 'semantic-ui-react'; import {isBrowserLoadable} from '../../util/gedcom_util'; interface Props { url: string; filename: string; title?: string; } export function WrappedImage(props: Props) { const [imageOpen, setImageOpen] = useState(false); const [imageLoaded, setImageLoaded] = useState(false); const [imageFailed, setImageFailed] = useState(false); const [imageSrc, setImageSrc] = useState(''); if (!isBrowserLoadable(props.url)) { return ( {props.title || props.filename} ); } if (imageLoaded && imageSrc !== props.url) { setImageLoaded(false); } return ( <> setImageOpen(true)} onLoad={() => { setImageLoaded(true); setImageSrc(props.url); setImageFailed(false); }} onError={(e: SyntheticEvent) => { setImageLoaded(true); setImageSrc(props.url); setImageFailed(true); e.currentTarget.alt = ''; }} src={props.url} alt={props.title || props.filename} centered={true} /> {imageFailed && ( )} } open={imageOpen} onClose={() => setImageOpen(false)} onOpen={() => setImageOpen(true)} centered={false} > {props.title} {props.title} wrapped /> ); }