| import { Image as AntImage } from 'antd'; | |
| import { useEffect, useState } from 'react'; | |
| import { Authorization } from '@/constants/authorization'; | |
| import { getAuthorization } from '@/utils/authorization-util'; | |
| interface ImageProps { | |
| src: string; | |
| preview?: boolean; | |
| } | |
| const Image = ({ src, preview = false }: ImageProps) => { | |
| const [imageSrc, setImageSrc] = useState<string>(''); | |
| useEffect(() => { | |
| const loadImage = async () => { | |
| try { | |
| const response = await fetch(src, { | |
| headers: { | |
| [Authorization]: getAuthorization(), | |
| }, | |
| }); | |
| const blob = await response.blob(); | |
| const objectUrl = URL.createObjectURL(blob); | |
| setImageSrc(objectUrl); | |
| } catch (error) { | |
| console.error('Failed to load image:', error); | |
| } | |
| }; | |
| loadImage(); | |
| return () => { | |
| if (imageSrc) { | |
| URL.revokeObjectURL(imageSrc); | |
| } | |
| }; | |
| }, [src]); | |
| return imageSrc ? <AntImage src={imageSrc} preview={preview} /> : null; | |
| }; | |
| export default Image; | |