Founding price: $35, then $79.99 after 23:59 UTC on 4 November, then $79.99
Get ProA three-step CSV import: choose a file, map its columns to your fields (matched automatically by name), review the first rows and the rows that failed validation, then import. Includes a quote-aware CSV parser.
This item has no props to tune. Use the lens above to change theme, density, direction and more.
Everything runs in the browser: the file is read with File.text() and parsed locally, and onImport receives clean rows keyed by your field keys. For very large files, parse in a worker or send the file to the server and use this only for the mapping step (parseCsv, autoMap are exported).
| Export | Description |
|---|---|
CsvColumnMapper | The three-step flow. |
parseCsv(text, delimiter?) | A quote-aware CSV parser, returns string[][]. |
autoMap(headers, fields) | The automatic column match, as { fieldKey: columnIndex | null }. |
detectDelimiter(text) | ,, ; or tab. |
| Prop | Type | Default | Description |
|---|---|---|---|
fields | { key, label, required?, aliases? }[] | - | What you want to import. |
validateRow | (row) => string | null | - | A message flags the row; flagged rows are skipped. |
onImport | (rows, { skipped, fileName }) => void | Promise<void> | - | Gets the valid rows. A throw shows the message and stays on Review. |
maxRows | number | 10000 | Data rows allowed. |
aria-current="step". When the step changes, focus moves to its heading so keyboard and screen reader users start at the new content.aria-invalid while a required field is unmatched; the list of what is missing is a status message.role="alert".The component ships with a Testing Library test (csv-column-mapper.test.tsx) that covers: its main behaviour, the keyboard path and the error or empty states.