"use client"; import React, { useState } from "react"; import { RAGEngine } from "../../../../rag"; interface DocumentUploaderProps { ragEngine?: RAGEngine; onDocumentUploaded?: (document: any) => void; onDocumentDeleted?: (documentId: string) => void; } export function DocumentUploader({ ragEngine, onDocumentUploaded, onDocumentDeleted, }: DocumentUploaderProps) { const [isUploading, setIsUploading] = useState(false); const [uploadResults, setUploadResults] = useState([]); const [uploadErrors, setUploadErrors] = useState([]); const [dragActive, setDragActive] = useState(false); const handleFileUpload = async (files: FileList | File[]) => { if (!files || files.length === 0) return; setIsUploading(true); setUploadResults([]); setUploadErrors([]); try { const formData = new FormData(); Array.from(files).forEach((file) => { formData.append("files", file); }); const response = await fetch("/api/rag/upload", { method: "POST", body: formData, }); const data = await response.json(); if (data.success) { setUploadResults(data.results || []); if (data.errors && data.errors.length > 0) { setUploadErrors(data.errors); } // Notify parent component if (onDocumentUploaded && data.results) { data.results.forEach((result: any) => { onDocumentUploaded(result); }); } } else { setUploadErrors([data.error || "업로드 중 오류가 발생했습니다."]); } } catch (error) { console.error("업로드 실패:", error); setUploadErrors(["네트워크 오류가 발생했습니다."]); } finally { setIsUploading(false); } }; const handleFileSelect = (e: React.ChangeEvent) => { if (e.target.files) { handleFileUpload(e.target.files); } }; const handleDrag = (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); if (e.type === "dragenter" || e.type === "dragover") { setDragActive(true); } else if (e.type === "dragleave") { setDragActive(false); } }; const handleDrop = (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setDragActive(false); if (e.dataTransfer.files && e.dataTransfer.files.length > 0) { handleFileUpload(e.dataTransfer.files); } }; return (

문서 업로더

PDF, Word, 텍스트 파일을 업로드하여 RAG 시스템에 추가할 수 있습니다.

{isUploading ? (

파일 업로드 중...

) : ( <>

파일을 드래그하여 놓거나 클릭하여 선택하세요

지원 형식: PDF, DOC, DOCX, TXT, MD (최대 10MB)

)}
{/* 업로드 결과 */} {uploadResults.length > 0 && (

✅ 업로드 완료 ({uploadResults.length}개 파일)

{uploadResults.map((result, index) => (

{result.fileName}

크기: {(result.fileSize / 1024).toFixed(1)}KB | ID:{" "} {result.documentId}

{result.status}
))}
)} {/* 업로드 에러 */} {uploadErrors.length > 0 && (

❌ 업로드 오류

{uploadErrors.map((error, index) => (

{error}

))}
)}
); }