import React, { useRef, useState } from 'react'; import { useTranslation } from '@/hooks/useI18n.tsx'; import { Trash2, UploadCloud } from 'lucide-react'; import Button from '@/components/ui/Button.tsx'; import Spinner from '@/components/ui/Spinner.tsx'; interface ImageUploadProps { value: string | null | undefined; onChange: (value: string | null) => void; className?: string; } const fileToDataUrl = (file: File): Promise => { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => resolve(reader.result as string); reader.onerror = reject; reader.readAsDataURL(file); }); }; const ImageUpload: React.FC = ({ value, onChange, className }) => { const { t } = useTranslation(); const fileInputRef = useRef(null); const [isLoading, setIsLoading] = useState(false); const handleFileChange = async (event: React.ChangeEvent) => { const file = event.target.files?.[0]; if (file) { setIsLoading(true); try { const dataUrl = await fileToDataUrl(file); onChange(dataUrl); } catch (error) { console.error('Error converting file to data URL', error); onChange(null); } finally { setIsLoading(false); } } }; const handleRemoveImage = () => { onChange(null); if (fileInputRef.current) { fileInputRef.current.value = ''; // Reset file input } }; return (
!isLoading && fileInputRef.current?.click()} > {isLoading ? ( ) : value ? ( {t('imageUpload.logoAlt')} { (e.target as HTMLImageElement).style.display = 'none'; }} /> ) : (

{t('imageUpload.dropzoneHint')}

)}
{value && ( )}
); }; export default ImageUpload;