@sachin9822/reports-lib 0.0.72 → 0.0.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,107 @@
1
+ import { Injectable } from '@angular/core';
2
+ import 'jspdf-autotable';
3
+ import * as FileSaver from 'file-saver';
4
+ import * as i0 from "@angular/core";
5
+ export class ExportService {
6
+ constructor() { }
7
+ exportToPdf(headers, rows, doc, startY, fileName) {
8
+ const columnStyles = {};
9
+ headers.forEach((_, i) => {
10
+ columnStyles[i] = { cellWidth: 'auto' };
11
+ });
12
+ doc.autoTable({
13
+ head: [headers],
14
+ body: rows,
15
+ startY: startY,
16
+ theme: 'grid',
17
+ headStyles: {
18
+ fillColor: [220, 220, 220],
19
+ textColor: 0,
20
+ fontStyle: 'bold',
21
+ fontSize: 9,
22
+ halign: 'center',
23
+ },
24
+ bodyStyles: {
25
+ fontSize: 8,
26
+ fillColor: [255, 255, 255],
27
+ textColor: [0, 0, 0],
28
+ },
29
+ styles: {
30
+ cellPadding: 2,
31
+ overflow: 'linebreak',
32
+ minCellHeight: 6,
33
+ },
34
+ columnStyles: columnStyles,
35
+ });
36
+ doc.save(fileName);
37
+ }
38
+ exportToExcel(headers, rows, worksheet, workbook, fileName) {
39
+ // Add header row
40
+ const headerRow = worksheet.addRow(headers);
41
+ headerRow.font = { bold: true };
42
+ headerRow.fill = {
43
+ type: 'pattern',
44
+ pattern: 'solid',
45
+ fgColor: { argb: 'D9D9D9' }
46
+ };
47
+ headerRow.alignment = { vertical: 'middle', horizontal: 'center' };
48
+ headerRow.border = {
49
+ top: { style: 'thin' }, bottom: { style: 'thin' },
50
+ left: { style: 'thin' }, right: { style: 'thin' }
51
+ };
52
+ const dataStartRow = worksheet.lastRow.number + 1;
53
+ // Add data rows
54
+ rows.forEach(rowData => {
55
+ const dataRow = worksheet.addRow(rowData);
56
+ dataRow.border = {
57
+ top: { style: 'thin' }, bottom: { style: 'thin' },
58
+ left: { style: 'thin' }, right: { style: 'thin' }
59
+ };
60
+ });
61
+ const totalColumns = headers.length;
62
+ // Auto-width for each column
63
+ for (let i = 1; i <= totalColumns; i++) {
64
+ let maxLength = 5;
65
+ const headerVal = headerRow.getCell(i).value?.toString() ?? '';
66
+ maxLength = Math.max(maxLength, headerVal.length);
67
+ for (let rowNum = dataStartRow; rowNum <= worksheet.lastRow.number; rowNum++) {
68
+ const cell = worksheet.getRow(rowNum).getCell(i);
69
+ const val = cell.value ? cell.value.toString() : '';
70
+ maxLength = Math.max(maxLength, val.length);
71
+ }
72
+ worksheet.getColumn(i).width = maxLength + 2;
73
+ }
74
+ // Export as Excel file
75
+ workbook.xlsx.writeBuffer().then(buffer => {
76
+ const blob = new Blob([buffer], {
77
+ type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
78
+ });
79
+ FileSaver.saveAs(blob, fileName);
80
+ });
81
+ }
82
+ exportToCsv(headers, rows, metadata = [], fileName) {
83
+ // Combine metadata + blank line + headers + data
84
+ const csvContent = [...metadata, [], headers, ...rows]
85
+ .map(e => e.join(','))
86
+ .join('\n');
87
+ this.downloadFile(csvContent, fileName, 'text/csv');
88
+ }
89
+ downloadFile(data, filename, type) {
90
+ const blob = new Blob([data], { type });
91
+ const link = document.createElement('a');
92
+ link.href = URL.createObjectURL(blob);
93
+ link.setAttribute('download', filename);
94
+ document.body.appendChild(link);
95
+ link.click();
96
+ document.body.removeChild(link);
97
+ }
98
+ }
99
+ ExportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ExportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
100
+ ExportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ExportService, providedIn: 'root' });
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ExportService, decorators: [{
102
+ type: Injectable,
103
+ args: [{
104
+ providedIn: 'root'
105
+ }]
106
+ }], ctorParameters: function () { return []; } });
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRzLWxpYi9zcmMvbGliL3NoYXJlZC9leHBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8saUJBQWlCLENBQUM7QUFFekIsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7O0FBWXhDLE1BQU0sT0FBTyxhQUFhO0lBRXhCLGdCQUFnQixDQUFDO0lBS2pCLFdBQVcsQ0FBQyxPQUFpQixFQUFFLElBQWEsRUFBRSxHQUFVLEVBQUUsTUFBYyxFQUFFLFFBQWdCO1FBQ3hGLE1BQU0sWUFBWSxHQUEyQixFQUFFLENBQUM7UUFDaEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QixZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQ1osSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDO1lBQ2YsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUUsTUFBTTtZQUNkLEtBQUssRUFBRSxNQUFNO1lBQ2IsVUFBVSxFQUFFO2dCQUNWLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO2dCQUMxQixTQUFTLEVBQUUsQ0FBQztnQkFDWixTQUFTLEVBQUUsTUFBTTtnQkFDakIsUUFBUSxFQUFFLENBQUM7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsUUFBUSxFQUFFLENBQUM7Z0JBQ1gsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7Z0JBQzFC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LENBQUM7UUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7OzBHQWxJVSxhQUFhOzhHQUFiLGFBQWEsY0FGWixNQUFNOzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcbmltcG9ydCAnanNwZGYtYXV0b3RhYmxlJztcbmltcG9ydCAqIGFzIEV4Y2VsSlMgZnJvbSAnZXhjZWxqcyc7XG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XG5cblxuZGVjbGFyZSBtb2R1bGUgJ2pzcGRmJyB7XG4gIGludGVyZmFjZSBqc1BERiB7XG4gICAgYXV0b1RhYmxlOiAob3B0aW9uczogYW55KSA9PiBqc1BERjtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBFeHBvcnRTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG5cbiAgXG5cbiAgZXhwb3J0VG9QZGYoaGVhZGVyczogc3RyaW5nW10sIHJvd3M6IGFueVtdW10sIGRvYzoganNQREYsIHN0YXJ0WTogbnVtYmVyLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29sdW1uU3R5bGVzOiB7IFtrZXk6IG51bWJlcl06IGFueSB9ID0ge307XG4gICAgaGVhZGVycy5mb3JFYWNoKChfLCBpKSA9PiB7XG4gICAgICBjb2x1bW5TdHlsZXNbaV0gPSB7IGNlbGxXaWR0aDogJ2F1dG8nIH07XG4gICAgfSk7XG5cbiAgICBkb2MuYXV0b1RhYmxlKHtcbiAgICAgIGhlYWQ6IFtoZWFkZXJzXSxcbiAgICAgIGJvZHk6IHJvd3MsXG4gICAgICBzdGFydFk6IHN0YXJ0WSxcbiAgICAgIHRoZW1lOiAnZ3JpZCcsXG4gICAgICBoZWFkU3R5bGVzOiB7XG4gICAgICAgIGZpbGxDb2xvcjogWzIyMCwgMjIwLCAyMjBdLFxuICAgICAgICB0ZXh0Q29sb3I6IDAsXG4gICAgICAgIGZvbnRTdHlsZTogJ2JvbGQnLFxuICAgICAgICBmb250U2l6ZTogOSxcbiAgICAgICAgaGFsaWduOiAnY2VudGVyJyxcbiAgICAgIH0sXG4gICAgICBib2R5U3R5bGVzOiB7XG4gICAgICAgIGZvbnRTaXplOiA4LFxuICAgICAgICBmaWxsQ29sb3I6IFsyNTUsIDI1NSwgMjU1XSxcbiAgICAgICAgdGV4dENvbG9yOiBbMCwgMCwgMF0sXG4gICAgICB9LFxuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIGNlbGxQYWRkaW5nOiAyLFxuICAgICAgICBvdmVyZmxvdzogJ2xpbmVicmVhaycsXG4gICAgICAgIG1pbkNlbGxIZWlnaHQ6IDYsXG4gICAgICB9LFxuICAgICAgY29sdW1uU3R5bGVzOiBjb2x1bW5TdHlsZXMsXG4gICAgfSk7XG5cbiAgICBkb2Muc2F2ZShmaWxlTmFtZSk7XG4gIH1cblxuXG5cblxuXG4gIGV4cG9ydFRvRXhjZWwoXG4gICAgaGVhZGVyczogc3RyaW5nW10sXG4gICAgcm93czogYW55W11bXSxcbiAgICB3b3Jrc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LFxuICAgIHdvcmtib29rOiBFeGNlbEpTLldvcmtib29rLFxuICAgIGZpbGVOYW1lOiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgLy8gQWRkIGhlYWRlciByb3dcbiAgICBjb25zdCBoZWFkZXJSb3cgPSB3b3Jrc2hlZXQuYWRkUm93KGhlYWRlcnMpO1xuICAgIGhlYWRlclJvdy5mb250ID0geyBib2xkOiB0cnVlIH07XG4gICAgaGVhZGVyUm93LmZpbGwgPSB7XG4gICAgICB0eXBlOiAncGF0dGVybicsXG4gICAgICBwYXR0ZXJuOiAnc29saWQnLFxuICAgICAgZmdDb2xvcjogeyBhcmdiOiAnRDlEOUQ5JyB9XG4gICAgfTtcbiAgICBoZWFkZXJSb3cuYWxpZ25tZW50ID0geyB2ZXJ0aWNhbDogJ21pZGRsZScsIGhvcml6b250YWw6ICdjZW50ZXInIH07XG4gICAgaGVhZGVyUm93LmJvcmRlciA9IHtcbiAgICAgIHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sXG4gICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSwgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9XG4gICAgfTtcblxuICAgIGNvbnN0IGRhdGFTdGFydFJvdyA9IHdvcmtzaGVldC5sYXN0Um93IS5udW1iZXIgKyAxO1xuXG4gICAgLy8gQWRkIGRhdGEgcm93c1xuICAgIHJvd3MuZm9yRWFjaChyb3dEYXRhID0+IHtcbiAgICAgIGNvbnN0IGRhdGFSb3cgPSB3b3Jrc2hlZXQuYWRkUm93KHJvd0RhdGEpO1xuICAgICAgZGF0YVJvdy5ib3JkZXIgPSB7XG4gICAgICAgIHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sXG4gICAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b3RhbENvbHVtbnMgPSBoZWFkZXJzLmxlbmd0aDtcblxuICAgIC8vIEF1dG8td2lkdGggZm9yIGVhY2ggY29sdW1uXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdG90YWxDb2x1bW5zOyBpKyspIHtcbiAgICAgIGxldCBtYXhMZW5ndGggPSA1O1xuICAgICAgY29uc3QgaGVhZGVyVmFsID0gaGVhZGVyUm93LmdldENlbGwoaSkudmFsdWU/LnRvU3RyaW5nKCkgPz8gJyc7XG4gICAgICBtYXhMZW5ndGggPSBNYXRoLm1heChtYXhMZW5ndGgsIGhlYWRlclZhbC5sZW5ndGgpO1xuXG4gICAgICBmb3IgKGxldCByb3dOdW0gPSBkYXRhU3RhcnRSb3c7IHJvd051bSA8PSB3b3Jrc2hlZXQubGFzdFJvdyEubnVtYmVyOyByb3dOdW0rKykge1xuICAgICAgICBjb25zdCBjZWxsID0gd29ya3NoZWV0LmdldFJvdyhyb3dOdW0pLmdldENlbGwoaSk7XG4gICAgICAgIGNvbnN0IHZhbCA9IGNlbGwudmFsdWUgPyBjZWxsLnZhbHVlLnRvU3RyaW5nKCkgOiAnJztcbiAgICAgICAgbWF4TGVuZ3RoID0gTWF0aC5tYXgobWF4TGVuZ3RoLCB2YWwubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgd29ya3NoZWV0LmdldENvbHVtbihpKS53aWR0aCA9IG1heExlbmd0aCArIDI7XG4gICAgfVxuXG4gICAgLy8gRXhwb3J0IGFzIEV4Y2VsIGZpbGVcbiAgICB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCkudGhlbihidWZmZXIgPT4ge1xuICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7XG4gICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCdcbiAgICAgIH0pO1xuICAgICAgRmlsZVNhdmVyLnNhdmVBcyhibG9iLCBmaWxlTmFtZSk7XG4gICAgfSk7XG4gIH1cblxuXG5cblxuXG5cbiAgZXhwb3J0VG9Dc3YoXG4gICAgaGVhZGVyczogc3RyaW5nW10sXG4gICAgcm93czogc3RyaW5nW11bXSxcbiAgICBtZXRhZGF0YTogc3RyaW5nW11bXSA9IFtdLFxuICAgIGZpbGVOYW1lOiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgLy8gQ29tYmluZSBtZXRhZGF0YSArIGJsYW5rIGxpbmUgKyBoZWFkZXJzICsgZGF0YVxuICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBbLi4ubWV0YWRhdGEsIFtdLCBoZWFkZXJzLCAuLi5yb3dzXVxuICAgICAgLm1hcChlID0+IGUuam9pbignLCcpKVxuICAgICAgLmpvaW4oJ1xcbicpO1xuXG4gICAgdGhpcy5kb3dubG9hZEZpbGUoY3N2Q29udGVudCwgZmlsZU5hbWUsICd0ZXh0L2NzdicpO1xuICB9XG5cbiAgcHJpdmF0ZSBkb3dubG9hZEZpbGUoZGF0YTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7IHR5cGUgfSk7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVuYW1lKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgIGxpbmsuY2xpY2soKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuICB9XG5cblxuXG5cbn1cbiJdfQ==