import { useState } from 'react'; import axios from '../services/api'; const DELIMITERS = [ { label: 'Komma (,)', value: ',' }, { label: 'Semikolon (;)', value: ';' }, { label: 'Tab', value: '\\t' }, { label: 'Pipe (|)', value: '|' }, ]; function CsvViewerTool() { const [text, setText] = useState(''); const [delimiter, setDelimiter] = useState(','); const [result, setResult] = useState(null); const [error, setError] = useState(''); const [sortCol, setSortCol] = useState(null); const [sortAsc, setSortAsc] = useState(true); const parse = async () => { setError(''); setResult(null); setSortCol(null); if (!text.trim()) { setError('Bitte CSV-Inhalt eingeben.'); return; } try { const res = await axios.post('/api/csv/parse', { text, delimiter }); setResult(res.data); } catch (err) { setError(err.response?.data?.message || 'Fehler beim Verarbeiten des CSV'); } }; const handleSort = (colIdx) => { if (sortCol === colIdx) { setSortAsc(!sortAsc); } else { setSortCol(colIdx); setSortAsc(true); } }; const getSortedRows = () => { if (!result) return []; if (sortCol === null) return result.rows; return [...result.rows].sort((a, b) => { const av = a[sortCol] ?? ''; const bv = b[sortCol] ?? ''; const numA = parseFloat(av); const numB = parseFloat(bv); if (!isNaN(numA) && !isNaN(numB)) { return sortAsc ? numA - numB : numB - numA; } return sortAsc ? av.localeCompare(bv) : bv.localeCompare(av); }); }; return (

CSV Viewer

CSV-Daten einfügen und als Tabelle anzeigen.