import message from '@/components/ui/message'; import { Spin } from '@/components/ui/spin'; import request from '@/utils/request'; import classNames from 'classnames'; import { useEffect, useState } from 'react'; interface ImagePreviewerProps { className?: string; url: string; } export const ImagePreviewer: React.FC = ({ className, url, }) => { // const url = useGetDocumentUrl(); const [imageSrc, setImageSrc] = useState(null); const [isLoading, setIsLoading] = useState(true); const fetchImage = async () => { setIsLoading(true); const res = await request(url, { method: 'GET', responseType: 'blob', onError: () => { message.error('Failed to load image'); setIsLoading(false); }, }); const objectUrl = URL.createObjectURL(res.data); setImageSrc(objectUrl); setIsLoading(false); }; useEffect(() => { if (url) { fetchImage(); } }, [url]); useEffect(() => { return () => { if (imageSrc) { URL.revokeObjectURL(imageSrc); } }; }, [imageSrc]); return (
{isLoading && (
)} {!isLoading && imageSrc && (
{'image'} URL.revokeObjectURL(imageSrc!)} />
)}
); };