Angular5-csv.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var CsvConfigConsts = (function () {
  4. function CsvConfigConsts() {
  5. }
  6. CsvConfigConsts.EOL = "\r\n";
  7. CsvConfigConsts.BOM = "\ufeff";
  8. CsvConfigConsts.DEFAULT_FIELD_SEPARATOR = ',';
  9. CsvConfigConsts.DEFAULT_DECIMAL_SEPARATOR = '.';
  10. CsvConfigConsts.DEFAULT_QUOTE = '"';
  11. CsvConfigConsts.DEFAULT_SHOW_TITLE = false;
  12. CsvConfigConsts.DEFAULT_TITLE = 'My Report';
  13. CsvConfigConsts.DEFAULT_FILENAME = 'mycsv.csv';
  14. CsvConfigConsts.DEFAULT_SHOW_LABELS = false;
  15. CsvConfigConsts.DEFAULT_USE_BOM = true;
  16. CsvConfigConsts.DEFAULT_HEADER = [];
  17. CsvConfigConsts.DEFAULT_NO_DOWNLOAD = false;
  18. CsvConfigConsts.DEFAULT_NULL_TO_EMPTY_STRING = false;
  19. return CsvConfigConsts;
  20. }());
  21. exports.CsvConfigConsts = CsvConfigConsts;
  22. exports.ConfigDefaults = {
  23. filename: CsvConfigConsts.DEFAULT_FILENAME,
  24. fieldSeparator: CsvConfigConsts.DEFAULT_FIELD_SEPARATOR,
  25. quoteStrings: CsvConfigConsts.DEFAULT_QUOTE,
  26. decimalseparator: CsvConfigConsts.DEFAULT_DECIMAL_SEPARATOR,
  27. showLabels: CsvConfigConsts.DEFAULT_SHOW_LABELS,
  28. showTitle: CsvConfigConsts.DEFAULT_SHOW_TITLE,
  29. title: CsvConfigConsts.DEFAULT_TITLE,
  30. useBom: CsvConfigConsts.DEFAULT_USE_BOM,
  31. headers: CsvConfigConsts.DEFAULT_HEADER,
  32. noDownload: CsvConfigConsts.DEFAULT_NO_DOWNLOAD,
  33. nullToEmptyString: CsvConfigConsts.DEFAULT_NULL_TO_EMPTY_STRING
  34. };
  35. var Angular5Csv = (function () {
  36. function Angular5Csv(DataJSON, filename, options) {
  37. this.csv = "";
  38. var config = options || {};
  39. this.data = typeof DataJSON != 'object' ? JSON.parse(DataJSON) : DataJSON;
  40. this._options = objectAssign({}, exports.ConfigDefaults, config);
  41. if (this._options.filename) {
  42. this._options.filename = filename;
  43. }
  44. this.generateCsv();
  45. }
  46. /**
  47. * Generate and Download Csv
  48. */
  49. Angular5Csv.prototype.generateCsv = function () {
  50. if (this._options.useBom) {
  51. this.csv += CsvConfigConsts.BOM;
  52. }
  53. if (this._options.showTitle) {
  54. this.csv += this._options.title + '\r\n\n';
  55. }
  56. this.getHeaders();
  57. this.getBody();
  58. if (this.csv == '') {
  59. console.log("Invalid data");
  60. return;
  61. }
  62. if (this._options.noDownload) {
  63. return this.csv;
  64. }
  65. var blob = new Blob([this.csv], { "type": "text/csv;charset=utf8;" });
  66. if (navigator.msSaveBlob) {
  67. var filename = this._options.filename.replace(/ /g, "_") + ".csv";
  68. navigator.msSaveBlob(blob, filename);
  69. }
  70. else {
  71. var uri = 'data:attachment/csv;charset=utf-8,' + encodeURI(this.csv);
  72. var link = document.createElement("a");
  73. link.href = URL.createObjectURL(blob);
  74. link.setAttribute('visibility', 'hidden');
  75. link.download = this._options.filename.replace(/ /g, "_") + ".csv";
  76. document.body.appendChild(link);
  77. link.click();
  78. document.body.removeChild(link);
  79. }
  80. };
  81. /**
  82. * Create Headers
  83. */
  84. Angular5Csv.prototype.getHeaders = function () {
  85. var _this = this;
  86. if (this._options.headers.length > 0) {
  87. var headers = this._options.headers;
  88. var row = headers.reduce(function (headerRow, header) {
  89. return headerRow + header + _this._options.fieldSeparator;
  90. }, '');
  91. row = row.slice(0, -1);
  92. this.csv += row + CsvConfigConsts.EOL;
  93. }
  94. };
  95. /**
  96. * Create Body
  97. */
  98. Angular5Csv.prototype.getBody = function () {
  99. for (var i = 0; i < this.data.length; i++) {
  100. var row = "";
  101. for (var index in this.data[i]) {
  102. row += this.formatData(this.data[i][index]) + this._options.fieldSeparator;
  103. }
  104. row = row.slice(0, -1);
  105. this.csv += row + CsvConfigConsts.EOL;
  106. }
  107. };
  108. /**
  109. * Format Data
  110. * @param {any} data
  111. */
  112. Angular5Csv.prototype.formatData = function (data) {
  113. if (this._options.decimalseparator === 'locale' && Angular5Csv.isFloat(data)) {
  114. return data.toLocaleString();
  115. }
  116. if (this._options.decimalseparator !== '.' && Angular5Csv.isFloat(data)) {
  117. return data.toString().replace('.', this._options.decimalseparator);
  118. }
  119. if (typeof data === 'string') {
  120. data = data.replace(/"/g, '""');
  121. if (this._options.quoteStrings || data.indexOf(',') > -1 || data.indexOf('\n') > -1 || data.indexOf('\r') > -1) {
  122. data = this._options.quoteStrings + data + this._options.quoteStrings;
  123. }
  124. return data;
  125. }
  126. if (this._options.nullToEmptyString) {
  127. if (data === null) {
  128. return data = '';
  129. }
  130. return data;
  131. }
  132. if (typeof data === 'boolean') {
  133. return data ? 'TRUE' : 'FALSE';
  134. }
  135. return data;
  136. };
  137. /**
  138. * Check if is Float
  139. * @param {any} input
  140. */
  141. Angular5Csv.isFloat = function (input) {
  142. return +input === input && (!isFinite(input) || Boolean(input % 1));
  143. };
  144. return Angular5Csv;
  145. }());
  146. exports.Angular5Csv = Angular5Csv;
  147. var hasOwnProperty = Object.prototype.hasOwnProperty;
  148. var propIsEnumerable = Object.prototype.propertyIsEnumerable;
  149. /**
  150. * Convet to Object
  151. * @param {any} val
  152. */
  153. function toObject(val) {
  154. if (val === null || val === undefined) {
  155. throw new TypeError('Object.assign cannot be called with null or undefined');
  156. }
  157. return Object(val);
  158. }
  159. /**
  160. * Assign data to new Object
  161. * @param {any} target
  162. * @param {any[]} ...source
  163. */
  164. function objectAssign(target) {
  165. var source = [];
  166. for (var _i = 1; _i < arguments.length; _i++) {
  167. source[_i - 1] = arguments[_i];
  168. }
  169. var from;
  170. var to = toObject(target);
  171. var symbols;
  172. for (var s = 1; s < arguments.length; s++) {
  173. from = Object(arguments[s]);
  174. for (var key in from) {
  175. if (hasOwnProperty.call(from, key)) {
  176. to[key] = from[key];
  177. }
  178. }
  179. if (Object.getOwnPropertySymbols) {
  180. symbols = Object.getOwnPropertySymbols(from);
  181. for (var i = 0; i < symbols.length; i++) {
  182. if (propIsEnumerable.call(from, symbols[i])) {
  183. to[symbols[i]] = from[symbols[i]];
  184. }
  185. }
  186. }
  187. }
  188. return to;
  189. }
  190. //# sourceMappingURL=Angular5-csv.js.map