// src/components/FileUpload.tsx import React, { useState } from 'react'; import axios from 'axios'; interface FilterOptions { [key: string]: string[]; } interface FileUploadProps { onUploadSuccess: (filters: FilterOptions) => void; setIsLoading: (isLoading: boolean) => void; setError: (error: string | null) => void; } const FileUpload: React.FC = ({ onUploadSuccess, setIsLoading, setError }) => { const [selectedFile, setSelectedFile] = useState(null); const handleFileChange = (event: React.ChangeEvent) => { if (event.target.files) { setSelectedFile(event.target.files[0]); } }; const handleSubmit = async (event: React.FormEvent) => { event.preventDefault(); if (!selectedFile) { setError("Please select a file first."); return; } if (!selectedFile.name.endsWith('.xlsx')) { setError("Invalid file type. Please upload an .xlsx file."); return; } const formData = new FormData(); formData.append('file', selectedFile); setIsLoading(true); setError(null); try { const response = await axios.post('http://localhost:8000/api/upload', formData, { headers: { 'Content-Type': 'multipart/form-data', }, }); onUploadSuccess(response.data.filters); } catch (error: any) { if (axios.isAxiosError(error) && error.response) { setError(`Upload failed: ${error.response.data.detail || error.message}`); } else { setError(`Upload failed: ${error.message}`); } } finally { setIsLoading(false); } }; return (

Upload XLSX File

); }; export default FileUpload;