React components to build CSV files on the fly basing on Array/literal object of data http://elegance.abdennoor.com/react-csv/
Find a file
abdennour 34fe75070a 📝 README updated 📝 👈🏼 ✏️ ☝🏼
2016-11-26 07:50:39 +03:00
src 📝 README updated 📝 👈🏼 ✏️ ☝🏼 2016-11-26 07:50:39 +03:00
test coverage 🖼 100% of core.js 2016-11-26 02:11:41 +03:00
.babelrc 🌎 🌍 🌏 initial commit 2016-11-25 15:59:50 +03:00
.gitignore 🌎 🌍 🌏 initial commit 2016-11-25 15:59:50 +03:00
.npmignore 🌎 🌍 🌏 initial commit 2016-11-25 15:59:50 +03:00
.travis.yml 🌎 🌍 🌏 initial commit 2016-11-25 15:59:50 +03:00
index.js 🌎 🌍 🌏 initial commit 2016-11-25 15:59:50 +03:00
package.json 📝 README updated 📝 👈🏼 ✏️ ☝🏼 2016-11-26 07:50:39 +03:00
README.md 📝 README updated 📝 👈🏼 ✏️ ☝🏼 2016-11-26 07:50:39 +03:00

Overview :

Generate CSV document according to given data.

This data can be array of arrays , or array of literal objects or string which is the CSV content.

Example :

import {CSVLink, CSVDownload} from 'react-csv';


const csvData =[
  ['firstname', 'lastname', 'email'] ,
  ['Ahmed', 'Tomi' , 'ah@smthing.co.com'] ,
  ['Raed', 'Labes' , 'rl@smthing.co.com'] ,
  ['Yezzi','Min l3b', 'ymin@cocococo.com']
];
<CSVLink data={csvData} >Download me</CSVLink>
// or
<CSVDownload data={csvData} target="_blank" />

Components:

This package includes actually two components: CSVLink and CSVDownload.

0. Common Props:

The two components accepts the following Props:

  • data : a required property that represents the CSV data. This data can be array of arrays, array of literal objects or string.

.i.e (array of arrays)

//array of arrays : each item is rendered as csv line
data = =[
  ['firstname', 'lastname', 'email'] ,
  ['Ahmed', 'Tomi' , 'ah@smthing.co.com'] ,
  ['Raed', 'Labes' , 'rl@smthing.co.com'] ,
  ['Yezzi','Min l3b', 'ymin@cocococo.com']
];

.i.e (array of literal objects)

//array of literal objects : each item is rendered as csv line however the order of fields will be defined by headers props .If headers props is not defined , the component will generate headers from all data items.
data = [
  {firstname: 'Ahmed', lastname: 'Tomi' , email: 'ah@smthing.co.com'},
  {firstname:'Raed', lastname:'Labes' , email:'rl@smthing.co.com'} ,
  {firstname:'Yezzi', lastname:'Min l3b', email:'ymin@cocococo.com'}
];

.i.e (string)

//if the data is string , this means the csv content is already generated by developer/3rd party package.

data =`firstname,lastname
Ahmed,Tomi
Raed,Labes
Yezzi,Min l3b
`;
// or using 3rd party package
import json2csv from 'json2csv';
data = json2csv(arrayOfLiteralObjects);      

  • headers : Specifying headers helps to define an order of CSV fields , so , the csv content will be generated accordingly.

Notes :

  • The meaning of headers with data of type Array is to order fields AND prepend those headers at the top of CSV content.
  • The meaning of headers with data of type String data is only prepending those headers as the first line of CSV content.

It renders a hyperlink , and clicking on it will trigger the download action of the CSV document.

It does not accept only data and headers props , but also , it rendered all props of HTMLAnchor tag. (className, target,....)

example

import {CSVLink} from 'react-csv';

<CSVLink data={data}
  className="btn btn-primary"
  target="_blank">
    Download me
</CSVLink>

2. CSVDownload Component:

It triggers downloading ONLY on mounting the component. so , be careful to render this component whenever it is needed.

It does not accept only data and headers props , but also , it takes advantage of all arguments of window.open function known that its signature is :

window.open(ARG0, target, specs, replace )

Thus, target, specs and replace Props are available .

example

import {CSVDownload} from 'react-csv';

<CSVDownload data={data} target="_blank" />