"use client" import { useState, useRef } from 'react' import { Box, Typography, Button, CircularProgress, Chip, Stack } from '@mui/material' import UploadFileIcon from '@mui/icons-material/UploadFile' import InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile' interface FileUploadProps { onDocumentsLoaded: (documents: { text: string }[]) => void; } export default function FileUpload({ onDocumentsLoaded }: FileUploadProps) { const [loading, setLoading] = useState(false) const [error, setError] = useState(null) const [uploadedFiles, setUploadedFiles] = useState([]) const fileInputRef = useRef(null) const handleButtonClick = () => { fileInputRef.current?.click() } const handleFileUpload = async (e: React.ChangeEvent) => { const files = e.target.files if (!files?.length) return setLoading(true) setError(null) try { const formData = new FormData() const fileNames: string[] = [] Array.from(files).forEach(file => { formData.append('files', file) fileNames.push(file.name) }) const response = await fetch('/api/upload', { method: 'POST', body: formData, }) if (!response.ok) { const errorData = await response.json() throw new Error(errorData.error || 'Upload failed') } const data = await response.json() setUploadedFiles(prev => [...prev, ...fileNames]) onDocumentsLoaded(data.documents) } catch (err) { console.error('Upload error:', err) setError(err instanceof Error ? err.message : 'Failed to process files. Please try again.') } finally { setLoading(false) if (fileInputRef.current) { fileInputRef.current.value = '' } } } return ( Upload Documents You can upload multiple PDF and Word documents at once {uploadedFiles.length > 0 && ( {uploadedFiles.length} {uploadedFiles.length === 1 ? 'file' : 'files'} uploaded {uploadedFiles.map((fileName, index) => ( } label={fileName} variant="outlined" sx={{ backgroundColor: 'rgba(37, 99, 235, 0.1)', borderColor: 'rgba(37, 99, 235, 0.2)', '& .MuiChip-icon': { color: 'primary.main', } }} /> ))} )} {error && ( {error} )} ) }