It resolves #3
This commit is contained in:
parent
298ca64675
commit
7918cadcd9
12 changed files with 8667 additions and 173 deletions
|
|
@ -16,7 +16,10 @@ class CSVDownload extends React.Component {
|
|||
}
|
||||
|
||||
componentDidMount(){
|
||||
this.state.page = window.open(this.buildURI(this.props.data, this.props.headers), this.props.target, this.props.specs, this.props.replace);
|
||||
const {data, headers, separator, target, specs, replace} = this.props;
|
||||
this.state.page = window.open(
|
||||
this.buildURI(data, headers, separator), target, specs, replace
|
||||
);
|
||||
}
|
||||
|
||||
getWindow() {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import React from 'react';
|
||||
import {buildURI} from '../core';
|
||||
import {defaultProps, PropTypes, PropsNotForwarded} from '../metaProps';
|
||||
import {defaultProps, PropTypes} from '../metaProps';
|
||||
|
||||
class CSVLink extends React.Component {
|
||||
constructor(props) {
|
||||
|
|
@ -13,10 +13,10 @@ class CSVLink extends React.Component {
|
|||
}
|
||||
|
||||
render(){
|
||||
const {data, headers, children , ...rest} = this.props;
|
||||
const {data, headers, separator, children , ...rest} = this.props;
|
||||
return (
|
||||
<a {...rest}
|
||||
href={this.buildURI(data, headers)}>
|
||||
href={this.buildURI(data, headers, separator)}>
|
||||
{children}
|
||||
</a>
|
||||
)
|
||||
|
|
|
|||
28
src/core.js
28
src/core.js
|
|
@ -18,30 +18,30 @@ export const jsons2arrays = (jsons, headers) => {
|
|||
object[header] ? object[header] : ''))]
|
||||
};
|
||||
|
||||
export const joiner = ((data) =>
|
||||
data.map((row, index) => row.join(',')).join(`\n`)
|
||||
export const joiner = ((data,separator = ',') =>
|
||||
data.map((row, index) => row.join(separator)).join(`\n`)
|
||||
);
|
||||
|
||||
export const arrays2csv = ((data, headers) =>
|
||||
joiner(headers ? [headers, ...data] : data)
|
||||
export const arrays2csv = ((data, headers, separator) =>
|
||||
joiner(headers ? [headers, ...data] : data, separator)
|
||||
);
|
||||
|
||||
export const jsons2csv = ((data, headers) =>
|
||||
joiner(jsons2arrays(data, headers))
|
||||
export const jsons2csv = ((data, headers, separator) =>
|
||||
joiner(jsons2arrays(data, headers), separator)
|
||||
);
|
||||
|
||||
export const string2csv = ((data, headers) =>
|
||||
(headers) ? `${headers.join(`,`)}\n${data}`: data
|
||||
export const string2csv = ((data, headers, separator) =>
|
||||
(headers) ? `${headers.join(separator)}\n${data}`: data
|
||||
)
|
||||
|
||||
export const toCSV = (data, headers) => {
|
||||
if (isJsons(data)) return jsons2csv(data, headers);
|
||||
if (isArrays(data)) return arrays2csv(data, headers);
|
||||
if (typeof data ==='string') return string2csv(data, headers);
|
||||
export const toCSV = (data, headers, separator) => {
|
||||
if (isJsons(data)) return jsons2csv(data, headers, separator);
|
||||
if (isArrays(data)) return arrays2csv(data, headers, separator);
|
||||
if (typeof data ==='string') return string2csv(data, headers, separator);
|
||||
throw new TypeError(`Data should be a "String", "Array of arrays" OR "Array of objects" `);
|
||||
};
|
||||
|
||||
export const buildURI = ((data, headers) => encodeURI(
|
||||
`data:text/csv;charset=utf-8,${toCSV(data, headers)}`
|
||||
export const buildURI = ((data, headers, separator) => encodeURI(
|
||||
`data:text/csv;charset=utf-8,${toCSV(data, headers, separator)}`
|
||||
)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -7,11 +7,12 @@ export const PropTypes = {
|
|||
React.PropTypes.array
|
||||
]).isRequired,
|
||||
headers: React.PropTypes.array,
|
||||
target: React.PropTypes.string
|
||||
target: React.PropTypes.string,
|
||||
separator: React.PropTypes.string
|
||||
};
|
||||
|
||||
export const defaultProps = {
|
||||
|
||||
separator: ','
|
||||
};
|
||||
|
||||
export const PropsNotForwarded = [
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue