@esfaenza/es-table 15.2.10 → 15.2.12
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.
- package/esm2020/lib/components/es-table/es_table.component.mjs +1 -1
- package/esm2020/lib/core/handlers/ExportHandler.mjs +6 -114
- package/fesm2015/esfaenza-es-table.mjs +5 -115
- package/fesm2015/esfaenza-es-table.mjs.map +1 -1
- package/fesm2020/esfaenza-es-table.mjs +5 -113
- package/fesm2020/esfaenza-es-table.mjs.map +1 -1
- package/lib/components/es-table/es_table.component.d.ts +4 -12
- package/lib/core/handlers/ExportHandler.d.ts +1 -15
- package/package.json +3 -4
|
@@ -532,125 +532,17 @@ class ExportHandler {
|
|
|
532
532
|
if (!this.est.ExportFunction)
|
|
533
533
|
return;
|
|
534
534
|
else
|
|
535
|
-
this.est.ExportFunction(async (data,
|
|
536
|
-
if (cancel)
|
|
537
|
-
return;
|
|
535
|
+
this.est.ExportFunction(async (data, type) => {
|
|
538
536
|
if (data.length == 0) {
|
|
539
537
|
this.msgExts.simpleWarning(this.est.lc.loc("Cannot export an empty dataset"));
|
|
540
538
|
return;
|
|
541
539
|
}
|
|
542
|
-
this.
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
else if (format == "XLSX") {
|
|
547
|
-
if (this.ExcelJS != null) {
|
|
548
|
-
this.exportExcel();
|
|
549
|
-
return;
|
|
550
|
-
}
|
|
551
|
-
try {
|
|
552
|
-
this.ExcelJS = await import('exceljs');
|
|
553
|
-
this.exportExcel();
|
|
554
|
-
}
|
|
555
|
-
catch {
|
|
556
|
-
throw "Impossibile caricare la libreria per l'esportazione in Excel";
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
else
|
|
560
|
-
throw "Formato di esportazione non riconosciuto";
|
|
540
|
+
let drcd = this.est.DynamicRowColumnsDefinition;
|
|
541
|
+
let columnsFilter = this.est.ExportOnlyVisibleColumns ? this.est.ColumnsList.filter(t => t.visible).map(t => t.id) : null;
|
|
542
|
+
let csvHeadersOverride = drcd && drcd.length > 0 ? drcd.map(t => { return { label: t.Description, key: t.PropertyName, propKey: t.PropertyName, order: t.ColumnOrder, type: 'string' }; }) : null;
|
|
543
|
+
this.expExts.export(data, format, this.est.ExportFileName, type, columnsFilter, csvHeadersOverride);
|
|
561
544
|
}, format);
|
|
562
545
|
}
|
|
563
|
-
/** Effettua l'esportazione in file CSV, va a sostituire quel coso inutile di @ctrl/ngx-csv */
|
|
564
|
-
exportCSV() {
|
|
565
|
-
var csvData = this.convertToCSV();
|
|
566
|
-
var blob = new Blob([csvData], { type: 'text/csv' });
|
|
567
|
-
var objectUrl = window.URL.createObjectURL(blob);
|
|
568
|
-
let fn = this.est.ExportFileName;
|
|
569
|
-
this.utiExts.fileDownload(objectUrl, fn.endsWith('.xlsx') ? fn.replace('.xlsx', '.csv') : fn.endsWith('.csv') ? fn : fn + ".csv");
|
|
570
|
-
}
|
|
571
|
-
/** Generazione specifica del CSV */
|
|
572
|
-
convertToCSV() {
|
|
573
|
-
let csv = '', row = '', sep = ';';
|
|
574
|
-
for (let i = 0; i < this.est.headers.length; i++) {
|
|
575
|
-
let h = this.est.headers[i];
|
|
576
|
-
row += `${row != '' ? sep : ''}"${h.label}"`;
|
|
577
|
-
}
|
|
578
|
-
csv += row + '\r\n';
|
|
579
|
-
for (let i = 0; i < this.est.data.length; i++) {
|
|
580
|
-
row = '';
|
|
581
|
-
let item = this.est.data[i];
|
|
582
|
-
for (let j = 0; j < this.est.headers.length; j++) {
|
|
583
|
-
let val = item[this.est.headers[j].key];
|
|
584
|
-
row += `${row != '' ? sep : ''}"${val}"`;
|
|
585
|
-
}
|
|
586
|
-
csv += row + '\r\n';
|
|
587
|
-
}
|
|
588
|
-
return csv;
|
|
589
|
-
}
|
|
590
|
-
/** Effettua l'esportazione del file Excel basandosi sul modulo **ExcelJS**, sugli header **this.est.headers** e sui dati **this.est.data** */
|
|
591
|
-
async exportExcel() {
|
|
592
|
-
let iFix = 1;
|
|
593
|
-
let workbook = new this.ExcelJS.Workbook();
|
|
594
|
-
workbook.creator = "Ema's big Es-Table";
|
|
595
|
-
workbook.created = new Date();
|
|
596
|
-
let sheet = workbook.addWorksheet('Data');
|
|
597
|
-
let header = sheet.getRow(1);
|
|
598
|
-
header.font = { bold: true };
|
|
599
|
-
this.est.headers = this.est.headers.sort((a, b) => a.order - b.order);
|
|
600
|
-
for (let i = 0; i < this.est.headers.length; i++) {
|
|
601
|
-
let h = this.est.headers[i];
|
|
602
|
-
header.getCell(i + iFix).value = h.label;
|
|
603
|
-
}
|
|
604
|
-
for (let i = 0; i < this.est.data.length; i++) {
|
|
605
|
-
let row = sheet.getRow(i + iFix + 1);
|
|
606
|
-
let item = this.est.data[i];
|
|
607
|
-
for (let i = 0; i < this.est.headers.length; i++) {
|
|
608
|
-
let h = this.est.headers[i];
|
|
609
|
-
let cell = row.getCell(i + 1);
|
|
610
|
-
let val = item[h.key];
|
|
611
|
-
if (!val) {
|
|
612
|
-
cell.value = "";
|
|
613
|
-
continue;
|
|
614
|
-
}
|
|
615
|
-
switch (h.type) {
|
|
616
|
-
case 'date':
|
|
617
|
-
// ExcelJS va di default in UTC quindi rischierebbe di tirare giù 2 ore ad ogni esportazione
|
|
618
|
-
// Bisogna aggiungere l'utc offset alla data attuale
|
|
619
|
-
let date = this.dateExts.getDateConvertion(val);
|
|
620
|
-
if (date) {
|
|
621
|
-
let correctedDate = date.add(date.utcOffset(), 'minute');
|
|
622
|
-
cell.value = correctedDate.toDate();
|
|
623
|
-
cell.numFmt = val.length > 10 ? 'dd/mm/yyyy h:m:s' : '';
|
|
624
|
-
}
|
|
625
|
-
break;
|
|
626
|
-
case 'number':
|
|
627
|
-
let converted = parseFloat(val.replace(',', '.'));
|
|
628
|
-
cell.value = isNaN(converted) ? "" : converted;
|
|
629
|
-
break;
|
|
630
|
-
default:
|
|
631
|
-
cell.value = val;
|
|
632
|
-
break;
|
|
633
|
-
}
|
|
634
|
-
}
|
|
635
|
-
}
|
|
636
|
-
let buffer = await workbook.xlsx.writeBuffer();
|
|
637
|
-
let blob = new Blob([buffer], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;" });
|
|
638
|
-
let objectUrl = window.URL.createObjectURL(blob);
|
|
639
|
-
let fn = this.est.ExportFileName;
|
|
640
|
-
this.utiExts.fileDownload(objectUrl, fn.endsWith('.csv') ? fn.replace('.csv', '.xlsx') : fn.endsWith('.xlsx') ? fn : fn + ".xlsx");
|
|
641
|
-
}
|
|
642
|
-
/**
|
|
643
|
-
* Metodo che effettivamente genera gli header e i dati per l'esportazione con **ngx-csv**
|
|
644
|
-
*
|
|
645
|
-
* @param {any[]} items Oggetti da esportare
|
|
646
|
-
*/
|
|
647
|
-
setupExport(items) {
|
|
648
|
-
let drcd = this.est.DynamicRowColumnsDefinition;
|
|
649
|
-
this.est.headers = drcd && drcd.length > 0 ?
|
|
650
|
-
this.expExts.setupForGenericExport(items, drcd.map(t => { return { label: t.Description, key: t.PropertyName, propKey: t.PropertyName, order: t.ColumnOrder, type: 'string' }; })) :
|
|
651
|
-
this.expExts.setupForExport(items, this.est.ExportOnlyVisibleColumns ? this.est.ColumnsList.filter(t => t.visible).map(t => t.id) : null);
|
|
652
|
-
this.est.data = items;
|
|
653
|
-
}
|
|
654
546
|
}
|
|
655
547
|
|
|
656
548
|
/**
|