import React, { useRef, useState } from 'react'; import { useImportRatesCSV } from '@/hooks/useShippingRates'; import { exportRatesCSV } from '@/api/shippingApi'; interface CSVImportExportProps { onImportComplete?: () => void; } export const CSVImportExport: React.FC = ({ onImportComplete }) => { const fileInputRef = useRef(null); const [importing, setImporting] = useState(false); const [exporting, setExporting] = useState(false); const [importResult, setImportResult] = useState<{ success: number; failed: number; errors: Array<{ row: number; message: string }>; } | null>(null); const { mutate: importCSV } = useImportRatesCSV(); const handleImportClick = () => { fileInputRef.current?.click(); }; const handleFileChange = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (!file) return; setImporting(true); setImportResult(null); importCSV(file, { onSuccess: (result) => { setImportResult(result); setImporting(false); onImportComplete?.(); // Reset file input if (fileInputRef.current) { fileInputRef.current.value = ''; } }, onError: (error: any) => { alert(error.message || 'Failed to import CSV'); setImporting(false); // Reset file input if (fileInputRef.current) { fileInputRef.current.value = ''; } }, }); }; const handleExportClick = async () => { setExporting(true); try { await exportRatesCSV(); } catch (error: any) { alert(error.message || 'Failed to export CSV'); } finally { setExporting(false); } }; return (
{' '} {importResult && (

Import results:
Succeeded: {importResult.success} rows
Failed: {importResult.failed} rows

{importResult.errors.length > 0 && (
Errors:
    {importResult.errors.map((error, idx) => (
  • Row {error.row}: {error.message}
  • ))}
)}
)}
); };