'use client' import { useState, useCallback } from 'react' import { API_BASE } from './types' export function UploadTab({ onUploadComplete }: { onUploadComplete: () => void }) { const [isDragging, setIsDragging] = useState(false) const [files, setFiles] = useState([]) const [uploading, setUploading] = useState(false) const handleDrop = useCallback((e: React.DragEvent) => { e.preventDefault() setIsDragging(false) const droppedFiles = Array.from(e.dataTransfer.files) const validFiles = droppedFiles.filter(f => f.name.endsWith('.zip') || f.name.endsWith('.pdf')) setFiles(prev => [...prev, ...validFiles]) }, []) const handleFileSelect = useCallback((e: React.ChangeEvent) => { if (e.target.files) { setFiles(prev => [...prev, ...Array.from(e.target.files!)]) } }, []) const removeFile = useCallback((index: number) => { setFiles(prev => prev.filter((_, i) => i !== index)) }, []) const handleUpload = async () => { if (files.length === 0) return setUploading(true) try { for (const file of files) { const formData = new FormData() formData.append('file', file) formData.append('collection', 'bp_nibis_eh') await fetch(`${API_BASE}/api/v1/admin/rag/upload`, { method: 'POST', body: formData }) } setFiles([]) onUploadComplete() } catch (err) { console.error('Upload failed:', err) } finally { setUploading(false) } } return (

Dokumente hochladen

ZIP-Archive oder einzelne PDFs hochladen. ZIPs werden automatisch entpackt.

{/* Drop Zone */}
{ e.preventDefault(); setIsDragging(true) }} onDragLeave={() => setIsDragging(false)} onDrop={handleDrop} className={`border-2 border-dashed rounded-lg p-12 text-center transition-colors ${ isDragging ? 'border-primary-500 bg-primary-50' : 'border-slate-300 hover:border-slate-400' }`} >

ZIP-Datei oder Ordner hierher ziehen

oder

Unterstützt: .zip, .pdf

{/* File Queue */} {files.length > 0 && (

Upload-Queue ({files.length})

{files.map((file, index) => (

{file.name}

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

))}
)}
) }