import { useEffect } from 'react'; import { FC, ImgHTMLAttributes, useState } from 'react'; import { Spinner } from '../deck-components'; interface SuspensefulImageProps extends ImgHTMLAttributes { suspenseWidth?: string | number; suspenseHeight?: string | number; } export const SuspensefulImage: FC = (props) => { const [loading, setLoading] = useState(true); const [error, setError] = useState(false); useEffect(() => { const img = new Image(); img.src = props.src || ''; img.addEventListener('load', () => { setLoading(false); }); img.addEventListener('error', () => { setError(true); }); }, []); return loading ? (
{error ? 'Missing image' : }
) : ( ); };