angular7-csv
Version:
Helper library for create CSV file in Angular 7
182 lines • 6.35 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var CsvConfigConsts = /** @class */ (function () {
function 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;
CsvConfigConsts.DEFAULT_USE_BOM = true;
CsvConfigConsts.DEFAULT_HEADER = [];
CsvConfigConsts.DEFAULT_NO_DOWNLOAD = false;
return CsvConfigConsts;
}());
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,
useBom: CsvConfigConsts.DEFAULT_USE_BOM,
headers: CsvConfigConsts.DEFAULT_HEADER,
noDownload: CsvConfigConsts.DEFAULT_NO_DOWNLOAD
};
var AngularCsv = /** @class */ (function () {
function AngularCsv(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
*/
AngularCsv.prototype.generateCsv = function () {
if (this._options.useBom) {
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 (this._options.noDownload) {
return this.csv;
}
var blob = new Blob([this.csv], { "type": "text/csv;charset=utf8;" });
if (navigator.msSaveBlob) {
var filename = this._options.filename.replace(/ /g, "_") + ".csv";
navigator.msSaveBlob(blob, filename);
}
else {
var uri = 'data:attachment/csv;charset=utf-8,' + encodeURI(this.csv);
var link = document.createElement("a");
link.href = URL.createObjectURL(blob);
link.setAttribute('visibility', 'hidden');
link.download = this._options.filename.replace(/ /g, "_") + ".csv";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
};
/**
* Create Headers
*/
AngularCsv.prototype.getHeaders = function () {
var _this = this;
if (this._options.headers.length > 0) {
var headers = this._options.headers;
var row = headers.reduce(function (headerRow, header) {
return headerRow + header + _this._options.fieldSeparator;
}, '');
row = row.slice(0, -1);
this.csv += row + CsvConfigConsts.EOL;
}
};
/**
* Create Body
*/
AngularCsv.prototype.getBody = function () {
for (var i = 0; i < this.data.length; i++) {
var row = "";
for (var index in this.data[i]) {
row += this.formartData(this.data[i][index]) + this._options.fieldSeparator;
}
row = row.slice(0, -1);
this.csv += row + CsvConfigConsts.EOL;
}
};
/**
* Format Data
* @param {any} data
*/
AngularCsv.prototype.formartData = function (data) {
if (this._options.decimalseparator === 'locale' && AngularCsv.isFloat(data)) {
return data.toLocaleString();
}
if (this._options.decimalseparator !== '.' && AngularCsv.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
*/
AngularCsv.isFloat = function (input) {
return +input === input && (!isFinite(input) || Boolean(input % 1));
};
return AngularCsv;
}());
exports.AngularCsv = AngularCsv;
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=Angular-csv.js.map
;