angular2-csv-headers
Version:
Helper library for create CSV file in Angular 2
185 lines • 6.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var CsvConfigConsts = (function () {
function CsvConfigConsts() {
}
return CsvConfigConsts;
}());
CsvConfigConsts.EOL = "\r\n";
CsvConfigConsts.BOM = "\ufeff";
CsvConfigConsts.DEFAULT_FIELD_SEPARATOR = ',';
CsvConfigConsts.DEFAULT_DECIMAL_SEPARATOR = '.';
CsvConfigConsts.DEFAULT_QUOTE = '"';
CsvConfigConsts.DEFAULT_SHOW_TITLE = false;
CsvConfigConsts.DEFAULT_TITLE = 'My Report';
CsvConfigConsts.DEFAULT_FILENAME = 'mycsv.csv';
CsvConfigConsts.DEFAULT_SHOW_LABELS = false;
exports.CsvConfigConsts = CsvConfigConsts;
exports.ConfigDefaults = {
filename: CsvConfigConsts.DEFAULT_FILENAME,
fieldSeparator: CsvConfigConsts.DEFAULT_FIELD_SEPARATOR,
quoteStrings: CsvConfigConsts.DEFAULT_QUOTE,
decimalseparator: CsvConfigConsts.DEFAULT_DECIMAL_SEPARATOR,
showLabels: CsvConfigConsts.DEFAULT_SHOW_LABELS,
showTitle: CsvConfigConsts.DEFAULT_SHOW_TITLE,
title: CsvConfigConsts.DEFAULT_TITLE,
headers: null
};
var Angular2Csv = (function () {
function Angular2Csv(DataJSON, filename, options) {
this.csv = "";
var config = options || {};
this.data = typeof DataJSON != 'object' ? JSON.parse(DataJSON) : DataJSON;
this._options = objectAssign({}, exports.ConfigDefaults, config);
if (this._options.filename) {
this._options.filename = filename;
}
this.generateCsv();
}
/**
* Generate and Download Csv
*/
Angular2Csv.prototype.generateCsv = function () {
this.csv += CsvConfigConsts.BOM;
if (this._options.showTitle) {
this.csv += this._options.title + '\r\n\n';
}
this.getHeaders();
this.getBody();
if (this.csv == '') {
console.log("Invalid data");
return;
}
if (navigator.msSaveBlob) {
var filename = this._options.filename.replace(/ /g, "_") + ".csv";
var blob = new Blob([this.csv], { "type": "text/csv;charset=utf8;" });
navigator.msSaveBlob(blob, filename);
}
else {
var uri = 'data:text/csv;charset=utf-8,' + encodeURI(this.csv);
var link = document.createElement("a");
link.href = uri;
link.setAttribute('visibility', 'hidden');
link.download = this._options.filename.replace(/ /g, "_") + ".csv";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
};
/**
* Create Headers
*/
Angular2Csv.prototype.getHeaders = function () {
if (this._options.showLabels) {
var row = "";
if (this._options.headers != null) {
for (var i = 0; i < this._options.headers.length; i++) {
row += this._options.headers[i] + this._options.fieldSeparator;
}
}
else {
this._options.headers = [];
for (var index in this.data[0]) {
row += index + this._options.fieldSeparator;
this._options.headers.push(index);
}
}
row = row.slice(0, -1);
this.csv += row + CsvConfigConsts.EOL;
}
};
/**
* Create Body
*/
Angular2Csv.prototype.getBody = function () {
for (var i = 0; i < this.data.length; i++) {
var row = "";
for (var c = 0; c < this._options.headers.length; c++) {
if (this.data[i][this._options.headers[c]] == null && this.data[i][this._options.headers[c]] == undefined) {
row += this._options.fieldSeparator;
}
else {
row += this.formartData(this.data[i][this._options.headers[c]]) + this._options.fieldSeparator;
}
}
row = row.slice(0, -1);
this.csv += row + CsvConfigConsts.EOL;
}
};
/**
* Format Data
* @param {any} data
*/
Angular2Csv.prototype.formartData = function (data) {
if (this._options.decimalseparator === 'locale' && this.isFloat(data)) {
return data.toLocaleString();
}
if (this._options.decimalseparator !== '.' && this.isFloat(data)) {
return data.toString().replace('.', this._options.decimalseparator);
}
if (typeof data === 'string') {
data = data.replace(/"/g, '""');
if (this._options.quoteStrings || data.indexOf(',') > -1 || data.indexOf('\n') > -1 || data.indexOf('\r') > -1) {
data = this._options.quoteStrings + data + this._options.quoteStrings;
}
return data;
}
if (typeof data === 'boolean') {
return data ? 'TRUE' : 'FALSE';
}
return data;
};
/**
* Check if is Float
* @param {any} input
*/
Angular2Csv.prototype.isFloat = function (input) {
return +input === input && (!isFinite(input) || Boolean(input % 1));
};
return Angular2Csv;
}());
exports.Angular2Csv = Angular2Csv;
var hasOwnProperty = Object.prototype.hasOwnProperty;
var propIsEnumerable = Object.prototype.propertyIsEnumerable;
/**
* Convet to Object
* @param {any} val
*/
function toObject(val) {
if (val === null || val === undefined) {
throw new TypeError('Object.assign cannot be called with null or undefined');
}
return Object(val);
}
/**
* Assign data to new Object
* @param {any} target
* @param {any[]} ...source
*/
function objectAssign(target) {
var source = [];
for (var _i = 1; _i < arguments.length; _i++) {
source[_i - 1] = arguments[_i];
}
var from;
var to = toObject(target);
var symbols;
for (var s = 1; s < arguments.length; s++) {
from = Object(arguments[s]);
for (var key in from) {
if (hasOwnProperty.call(from, key)) {
to[key] = from[key];
}
}
if (Object.getOwnPropertySymbols) {
symbols = Object.getOwnPropertySymbols(from);
for (var i = 0; i < symbols.length; i++) {
if (propIsEnumerable.call(from, symbols[i])) {
to[symbols[i]] = from[symbols[i]];
}
}
}
}
return to;
}
//# sourceMappingURL=Angular2-csv.js.map