@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.
@@ -532,125 +532,17 @@ class ExportHandler {
532
532
  if (!this.est.ExportFunction)
533
533
  return;
534
534
  else
535
- this.est.ExportFunction(async (data, cancel = false) => {
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.setupExport(data);
543
- if (format == "CSV") {
544
- this.exportCSV();
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
  /**