import React, { useCallback, useState } from 'react'; import { useDropzone } from 'react-dropzone'; import axios from 'axios'; import { UploadCloud, File, CheckCircle, AlertCircle, Loader2 } from 'lucide-react'; import { motion, AnimatePresence } from 'framer-motion'; const DropZone = ({ onUploadSuccess }) => { const [uploading, setUploading] = useState(false); const [uploadStatus, setUploadStatus] = useState(null); // 'success' | 'error' | null const [message, setMessage] = useState(''); const onDrop = useCallback(async (acceptedFiles) => { const file = acceptedFiles[0]; if (!file) return; setUploading(true); setUploadStatus(null); setMessage(''); const formData = new FormData(); formData.append('file', file); try { // Assuming backend is on port 8000 await axios.post('http://localhost:8000/upload', formData, { headers: { 'Content-Type': 'multipart/form-data', }, }); setUploadStatus('success'); setMessage(`Successfully uploaded ${file.name}`); if (onUploadSuccess) onUploadSuccess(); } catch (error) { console.error(error); setUploadStatus('error'); setMessage(error.response?.data?.detail || 'Upload failed'); } finally { setUploading(false); } }, [onUploadSuccess]); const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop, accept: { 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': ['.xlsx'], 'application/vnd.ms-excel': ['.xls'] }, maxFiles: 1, multiple: false }); return (
Support for .xlsx files (Max 1 file)