import React, { useRef, useState } from 'react'; import { Upload, FileText, CheckCircle, X } from 'lucide-react'; import type { FileData } from '../types'; interface FileUploadProps { label: string; description: string; accept: string; onFileSelect: (data: FileData | null) => void; selectedFile: FileData | null; } export const FileUpload: React.FC = ({ label, description, accept, onFileSelect, selectedFile, }) => { const inputRef = useRef(null); const [isDragging, setIsDragging] = useState(false); const processFile = (file: File) => { const objectUrl = URL.createObjectURL(file); const reader = new FileReader(); reader.onload = () => { const base64String = reader.result as string; const base64Content = base64String.split(',')[1]; onFileSelect({ file, previewUrl: objectUrl, base64: base64Content, type: file.type as FileData['type'], }); }; reader.readAsDataURL(file); }; const handleDrop = (e: React.DragEvent) => { e.preventDefault(); setIsDragging(false); if (e.dataTransfer.files && e.dataTransfer.files[0]) { processFile(e.dataTransfer.files[0]); } }; const handleChange = (e: React.ChangeEvent) => { if (e.target.files && e.target.files[0]) { processFile(e.target.files[0]); } }; const clearFile = (e: React.MouseEvent) => { e.stopPropagation(); onFileSelect(null); if (inputRef.current) inputRef.current.value = ''; }; return (
{!selectedFile ? (
inputRef.current?.click()} onDragOver={(e) => { e.preventDefault(); setIsDragging(true); }} onDragLeave={() => setIsDragging(false)} onDrop={handleDrop} className={`relative border-2 border-dashed rounded-kng-lg p-8 text-center cursor-pointer transition-all duration-200 ${ isDragging ? 'border-kng-accent bg-kng-surface' : 'border-kng-border hover:border-kng-accent hover:bg-kng-surface' }`} >

Klick oder Drag & Drop

{description}

) : (
{selectedFile.type === 'application/pdf' ? ( ) : ( Preview )}

{selectedFile.file.name}

{(selectedFile.file.size / 1024 / 1024).toFixed(2)} MB

)}
); };