import React, { useMemo, useState } from 'react'; import { parseCsv } from '../../utils/index.ts'; import type { CsvRow } from '../../types/index.ts'; interface UploadCsvModalProps { isOpen: boolean; onClose: () => void; onAnalyze: (file: File) => Promise; isAnalyzing: boolean; } const UploadCsvModal = ({ isOpen, onClose, onAnalyze, isAnalyzing }: UploadCsvModalProps) => { const [selectedFile, setSelectedFile] = useState(null); const [rows, setRows] = useState([]); const [error, setError] = useState(null); const fileName = useMemo( () => selectedFile?.name ?? 'Select a CSV file with arguments', [selectedFile] ); const handleFileChange = async (event: React.ChangeEvent) => { const file = event.target.files?.[0] ?? null; setSelectedFile(file); setError(null); setRows([]); if (!file) { return; } // Parse CSV try { const content = await file.text(); const parsed = parseCsv(content); setRows(parsed.rows); if (parsed.rows.length === 0) { setError('No data found in the CSV file.'); } } catch (err) { setError( err instanceof Error ? err.message : 'Unable to read the CSV file.' ); setRows([]); } }; const handleAnalyze = async () => { if (!selectedFile) { setError('Please choose a CSV file to analyze.'); return; } if (rows.length === 0) { setError('No data found in the CSV file.'); return; } await onAnalyze(selectedFile); }; if (!isOpen) return null; return (
e.stopPropagation()} >

Analyze New Arguments

{error &&

{error}

}
{isAnalyzing && (

Analyzing arguments...

)}
); }; export default UploadCsvModal;