@esfaenza/extensions 15.2.6 → 15.2.8
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/models/ExportConsts.mjs +14 -34
- package/esm2020/lib/services/extensions.exports.service.mjs +83 -48
- package/fesm2015/esfaenza-extensions.mjs +94 -81
- package/fesm2015/esfaenza-extensions.mjs.map +1 -1
- package/fesm2020/esfaenza-extensions.mjs +94 -81
- package/fesm2020/esfaenza-extensions.mjs.map +1 -1
- package/lib/models/ExportConsts.d.ts +13 -33
- package/lib/services/extensions.exports.service.d.ts +20 -0
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, Injectable, Optional, Inject, Pipe, NgModule, Injector } from '@angular/core';
|
|
3
3
|
import * as i1 from '@esfaenza/localizations';
|
|
4
|
-
import { LocalizationModule } from '@esfaenza/localizations';
|
|
4
|
+
import { LocalizationModule, LocalizationService } from '@esfaenza/localizations';
|
|
5
5
|
import { first, map } from 'rxjs/operators';
|
|
6
6
|
import { Deserialize } from 'cerialize';
|
|
7
7
|
import swal from 'sweetalert2';
|
|
@@ -318,52 +318,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
318
318
|
* utilizzato dal servizio di esportazione per prendere il valore delle proprietà di un oggetto
|
|
319
319
|
*/
|
|
320
320
|
const csvValueNavigator = "_csvnav";
|
|
321
|
-
/**
|
|
322
|
-
* Suffisso della proprietà da generare in cui salvare l'ordine di esportazione
|
|
323
|
-
*/
|
|
321
|
+
/** Suffisso della proprietà da generare in cui salvare l'ordine di esportazione */
|
|
324
322
|
const csvOrdPrefix = "_csvord";
|
|
325
|
-
/**
|
|
326
|
-
* Suffisso della proprietà da generare in cui salvare la visibilità di questa proprietà
|
|
327
|
-
*/
|
|
323
|
+
/** Suffisso della proprietà da generare in cui salvare la visibilità di questa proprietà */
|
|
328
324
|
const csvVisPrefix = "_csvvis";
|
|
329
|
-
/**
|
|
330
|
-
* Suffisso della proprietà da generare in cui salvare il nome della colonna in cui salvare questa proprietà
|
|
331
|
-
*/
|
|
325
|
+
/** Suffisso della proprietà da generare in cui salvare il nome della colonna in cui salvare questa proprietà */
|
|
332
326
|
const csvHdrPrefix = "_csvhdr";
|
|
333
|
-
/**
|
|
334
|
-
* Suffisso della proprietà da generare in cui salvare il codice del th a cui si riferisce questo campo
|
|
335
|
-
*/
|
|
327
|
+
/** Suffisso della proprietà da generare in cui salvare il codice del th a cui si riferisce questo campo */
|
|
336
328
|
const csvPropKey = "_csvkey";
|
|
337
|
-
/**
|
|
338
|
-
* Suffisso della proprietà da generare in cui salvare il valore da prendere per una proprietà di tipo Lista
|
|
339
|
-
*/
|
|
329
|
+
/** Suffisso della proprietà da generare in cui salvare il valore da prendere per una proprietà di tipo Lista */
|
|
340
330
|
const listCsvValPrefix = "_listcsvval";
|
|
341
|
-
/**
|
|
342
|
-
* Suffisso della proprietà da generare in cui salvare l'Header della proprietà di tipo Lista relativo al valore esportato nella proprietà con suffisso **listCsvValPrefix**
|
|
343
|
-
*/
|
|
331
|
+
/** Suffisso della proprietà da generare in cui salvare l'Header della proprietà di tipo Lista relativo al valore esportato nella proprietà con suffisso **listCsvValPrefix** */
|
|
344
332
|
const listCsvHdrPrefix = "_listcsvhdr";
|
|
345
|
-
/**
|
|
346
|
-
* Suffisso della proprietà da generare in cui salvare il formato della proprietà di tipo Lista relativo al valore esportato nella proprietà con suffisso **listCsvValPrefix**
|
|
347
|
-
*/
|
|
333
|
+
/** Suffisso della proprietà da generare in cui salvare il formato della proprietà di tipo Lista relativo al valore esportato nella proprietà con suffisso **listCsvValPrefix** */
|
|
348
334
|
const listCsvValFormat = "_listcsvvalformat";
|
|
349
|
-
/**
|
|
350
|
-
* Suffisso della proprietà da generare in cui salvare il valore da prendere per una proprietà di tipo Dizionario
|
|
351
|
-
*/
|
|
335
|
+
/** Suffisso della proprietà da generare in cui salvare il valore da prendere per una proprietà di tipo Dizionario */
|
|
352
336
|
const dictionaryCsvValPrefix = "_flatlistcsvval";
|
|
353
|
-
/**
|
|
354
|
-
* Suffisso della proprietà da generare in cui salvare l'Header della proprietà di un Dizionario relativo al valore esportato nella proprietà con suffisso **dictionaryCsvValPrefix**
|
|
355
|
-
*/
|
|
337
|
+
/** Suffisso della proprietà da generare in cui salvare l'Header della proprietà di un Dizionario relativo al valore esportato nella proprietà con suffisso **dictionaryCsvValPrefix** */
|
|
356
338
|
const dictionaryCsvHdrPrefix = "_flatlistcsvhdr";
|
|
357
|
-
/**
|
|
358
|
-
* Suffisso della proprietà da generare in cui salvare il formato della proprietà che si sta esportando
|
|
359
|
-
*/
|
|
339
|
+
/** Suffisso della proprietà da generare in cui salvare il formato della proprietà che si sta esportando */
|
|
360
340
|
const csvFormatPrefix = "_csvfmt";
|
|
361
|
-
/**
|
|
362
|
-
|
|
363
|
-
*/
|
|
364
|
-
const
|
|
341
|
+
/** Nome della proprietà che contiene tutti i nomi di tutte le proprietà da esportare */
|
|
342
|
+
const exportList = "__export_list__";
|
|
343
|
+
/** Nome della proprietà che contiene la classe di localizzazione da utilizzare per una data esportazione */
|
|
344
|
+
const locProperty = "__loc__";
|
|
365
345
|
|
|
366
346
|
// Angular
|
|
347
|
+
/**
|
|
348
|
+
* Decoratore che fornisce la classe di localizzazione per tutte le proprietà esportate con @Export e qualsiasi altro tag che richieda localizzazioni.
|
|
349
|
+
*
|
|
350
|
+
* Sostanzilamente aggiunge la proprietà **__loc__** all'oggetto creato dalla classe corrente assegnandogli come valore il tipo del LocalizationService da usare per la traduzione
|
|
351
|
+
*
|
|
352
|
+
* @param {Type<LocalizationService>} loc Tipo ereditato dal LocalizationService che può essere creato a runtime sotto contesto della DI di Angular
|
|
353
|
+
*/
|
|
354
|
+
function ExportLocalization(loc) {
|
|
355
|
+
return function integrateLoc(constructor) {
|
|
356
|
+
return class extends constructor {
|
|
357
|
+
constructor() {
|
|
358
|
+
super(...arguments);
|
|
359
|
+
this.__loc__ = loc;
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
};
|
|
363
|
+
}
|
|
367
364
|
/**
|
|
368
365
|
* Decoratore di esportazione utilizzabile su una proprietà singola.
|
|
369
366
|
* Verranno generate 3 proprietà che gestiranno l'esportazione: (prop, prop_csvvis, prop_csvhdr).
|
|
@@ -624,6 +621,7 @@ class ExportService {
|
|
|
624
621
|
var headers = [];
|
|
625
622
|
// Miracle incoming
|
|
626
623
|
let exportProps = obj[exportList] || [];
|
|
624
|
+
let loc = this.getLocalizationService(obj);
|
|
627
625
|
if (exportProps.length == 0)
|
|
628
626
|
console.warn("[@esfaenza/extensions] Nessuna colonna configurata da esportare!");
|
|
629
627
|
for (let i = 0; i < exportProps.length; i++) {
|
|
@@ -635,8 +633,8 @@ class ExportService {
|
|
|
635
633
|
toCall = this.parseList.bind(this);
|
|
636
634
|
}
|
|
637
635
|
else if (prop.endsWith(dictionaryCsvHdrPrefix)) {
|
|
638
|
-
toCall = this.parseDictionary.bind(this);
|
|
639
636
|
propBase = prop.replace(dictionaryCsvHdrPrefix, '');
|
|
637
|
+
toCall = this.parseDictionary.bind(this);
|
|
640
638
|
}
|
|
641
639
|
else if (prop.endsWith(csvVisPrefix)) {
|
|
642
640
|
propBase = prop.replace(csvVisPrefix, '');
|
|
@@ -646,10 +644,17 @@ class ExportService {
|
|
|
646
644
|
toCall = this.parseProperty.bind(this);
|
|
647
645
|
}
|
|
648
646
|
if (toCall)
|
|
649
|
-
toCall(obj, propBase, headers, columnsSelection);
|
|
647
|
+
toCall(obj, propBase, headers, columnsSelection, loc);
|
|
650
648
|
}
|
|
651
649
|
return headers;
|
|
652
650
|
}
|
|
651
|
+
/** Helper per ottenere il servizio di localizzazione relativo ad un'entità */
|
|
652
|
+
getLocalizationService(object) {
|
|
653
|
+
if (!object[locProperty])
|
|
654
|
+
return null;
|
|
655
|
+
const injector = Injector.create({ providers: [{ provide: LocalizationService, useClass: object[locProperty] }] });
|
|
656
|
+
return injector.get(LocalizationService);
|
|
657
|
+
}
|
|
653
658
|
/**
|
|
654
659
|
* Setup per l'esportazione di una singola proprietà.
|
|
655
660
|
* Viene generato l'header e la proprietà relativa al valore formattato o no
|
|
@@ -657,8 +662,9 @@ class ExportService {
|
|
|
657
662
|
* @param {any} obj Oggetto di cui esportare la proprietà **prop**
|
|
658
663
|
* @param {string} prop Proprietà da esportare
|
|
659
664
|
* @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione
|
|
665
|
+
* @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può
|
|
660
666
|
*/
|
|
661
|
-
parseProperty(obj, prop, headers, columnsSelection) {
|
|
667
|
+
parseProperty(obj, prop, headers, columnsSelection, loc) {
|
|
662
668
|
let toEmit = obj[prop + csvVisPrefix];
|
|
663
669
|
let format = obj[prop + csvFormatPrefix];
|
|
664
670
|
let propKey = obj[prop + csvPropKey];
|
|
@@ -666,36 +672,39 @@ class ExportService {
|
|
|
666
672
|
console.log("[@esfaenza/extensions] Colonna da non esportare: " + propKey);
|
|
667
673
|
return;
|
|
668
674
|
}
|
|
669
|
-
let
|
|
675
|
+
let text = obj[prop + csvHdrPrefix];
|
|
676
|
+
let label = loc && text ? loc.loc(text) : text || "";
|
|
670
677
|
let order = obj[prop + csvOrdPrefix];
|
|
671
|
-
if (toEmit
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
+
if (!toEmit)
|
|
679
|
+
return;
|
|
680
|
+
// Se non ho un formato esporto direttamente
|
|
681
|
+
if (!format) {
|
|
682
|
+
// Se è un formato data mi assicuro di non stampare mai una data 00:00:00 altrimenti in esportazione viene uno schifo
|
|
683
|
+
let val = obj[prop] ? this.dates.trimSeconds(obj[prop].toString()) : "";
|
|
684
|
+
let key = prop + "_nofmt";
|
|
685
|
+
Object.defineProperty(obj, key, { value: val, writable: false, enumerable: true });
|
|
686
|
+
headers.push({ label, key, order, type: "string", propKey });
|
|
687
|
+
}
|
|
688
|
+
else {
|
|
689
|
+
let key = prop + "_fmt";
|
|
690
|
+
// Caso formato numerico
|
|
691
|
+
if (format == "F") {
|
|
692
|
+
// Check considerando la possibilità di zeri
|
|
693
|
+
let val = obj[prop] != null ? obj[prop].toString() : "";
|
|
694
|
+
// Elimino tutte le virgole (indicatori di migliaia per la culture default en-US)
|
|
695
|
+
val = val.replace(/,/, "");
|
|
696
|
+
// Il singolo punto che c'è, se presente (separatore decimali) lo trasformo in virgola
|
|
697
|
+
let valConverted = val.replace(".", ",");
|
|
698
|
+
Object.defineProperty(obj, key, { value: valConverted, writable: false, enumerable: true });
|
|
699
|
+
headers.push({ label, key, order, type: "number", propKey });
|
|
678
700
|
}
|
|
679
701
|
else {
|
|
680
|
-
//
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
// Il singolo punto che c'è, se presente (separatore decimali) lo trasformo in virgola
|
|
687
|
-
let valConverted = val.replace(".", ",");
|
|
688
|
-
Object.defineProperty(obj, prop + "_fmt", { value: valConverted, writable: false, enumerable: true });
|
|
689
|
-
headers.push({ label: lbl ? lbl : prop + "_fmt", key: prop + "_fmt", order: order, type: "number", propKey: propKey });
|
|
690
|
-
}
|
|
691
|
-
else {
|
|
692
|
-
// Se ho un formato data trasformo in dayjs, formatto ed esporto
|
|
693
|
-
// Per la trasformazione in dayjs provo prima a passargli la stringa di netto, sperando la riconosca
|
|
694
|
-
// Se non funziona provo a definirgli la formattazione standard del metering per quel linguaggio
|
|
695
|
-
let val = this.dates.getFormatted(obj[prop], format.length <= 10, format.length > 16);
|
|
696
|
-
Object.defineProperty(obj, prop + "_fmt", { value: val ?? "", writable: false, enumerable: true });
|
|
697
|
-
headers.push({ label: lbl ? lbl : prop + "_fmt", key: prop + "_fmt", order: order, type: "date", propKey: propKey });
|
|
698
|
-
}
|
|
702
|
+
// Se ho un formato data trasformo in dayjs, formatto ed esporto
|
|
703
|
+
// Per la trasformazione in dayjs provo prima a passargli la stringa di netto, sperando la riconosca
|
|
704
|
+
// Se non funziona provo a definirgli la formattazione standard del metering per quel linguaggio
|
|
705
|
+
let val = this.dates.getFormatted(obj[prop], format.length <= 10, format.length > 16);
|
|
706
|
+
Object.defineProperty(obj, key, { value: val ?? "", writable: false, enumerable: true });
|
|
707
|
+
headers.push({ label, key, order, type: "date", propKey });
|
|
699
708
|
}
|
|
700
709
|
}
|
|
701
710
|
}
|
|
@@ -708,8 +717,9 @@ class ExportService {
|
|
|
708
717
|
* @param {any} obj Oggetto di cui esportare la proprietà **prop**
|
|
709
718
|
* @param {string} prop Proprietà da esportare
|
|
710
719
|
* @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione
|
|
720
|
+
* @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può
|
|
711
721
|
*/
|
|
712
|
-
parseObject(obj, prop, headers) {
|
|
722
|
+
parseObject(obj, prop, headers, loc) {
|
|
713
723
|
//se questa proprietà ha un navigator significa che deriva da un oggetto interno, recupero il valore in questa fase dato che prima non ce l'ho
|
|
714
724
|
let valuenavigator = obj[prop + csvValueNavigator];
|
|
715
725
|
//Es. di valuenavigator obj.subobj.subsubobj.property
|
|
@@ -723,7 +733,8 @@ class ExportService {
|
|
|
723
733
|
jmps.forEach(pp => { clone = clone[pp]; });
|
|
724
734
|
//Valore finale :D
|
|
725
735
|
let value = clone;
|
|
726
|
-
let
|
|
736
|
+
let text = obj[prop + csvHdrPrefix];
|
|
737
|
+
let label = loc && text ? loc.loc(text) : text || "";
|
|
727
738
|
let order = obj[prop + csvOrdPrefix];
|
|
728
739
|
//Se per questa proprietà ho un formato lo applico
|
|
729
740
|
let format = obj[prop + csvFormatPrefix];
|
|
@@ -739,7 +750,7 @@ class ExportService {
|
|
|
739
750
|
type = "date";
|
|
740
751
|
}
|
|
741
752
|
Object.defineProperty(obj, prop, { value: value ?? "", writable: false, enumerable: true });
|
|
742
|
-
headers.push({ label
|
|
753
|
+
headers.push({ label, key: prop, order, type, propKey: null });
|
|
743
754
|
}
|
|
744
755
|
/**
|
|
745
756
|
* Setup per l'esportazione di una lista di valori pivottati dinamicamente:
|
|
@@ -755,8 +766,9 @@ class ExportService {
|
|
|
755
766
|
* @param {any} obj Oggetto di cui esportare la proprietà **prop**
|
|
756
767
|
* @param {string} prop Proprietà da esportare
|
|
757
768
|
* @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione
|
|
769
|
+
* @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può
|
|
758
770
|
*/
|
|
759
|
-
parseList(obj, prop, headers) {
|
|
771
|
+
parseList(obj, prop, headers, loc) {
|
|
760
772
|
let headernavigator = obj[prop + listCsvHdrPrefix];
|
|
761
773
|
let valuenavigator = obj[prop + listCsvValPrefix];
|
|
762
774
|
let valueformat = obj[prop + listCsvValFormat];
|
|
@@ -766,16 +778,16 @@ class ExportService {
|
|
|
766
778
|
for (let idx = 0; idx < objs.length; idx++) {
|
|
767
779
|
let listitem = objs[idx];
|
|
768
780
|
var headersplit = headernavigator.split(" ");
|
|
769
|
-
var
|
|
781
|
+
var label = "";
|
|
770
782
|
// Per l'header si considera a se stante ogni pezzo separato da spazio per fare le concatenazioni
|
|
771
783
|
headersplit.forEach(pr => {
|
|
772
784
|
jumps = pr.split(".");
|
|
773
785
|
tmpRes = JSON.parse(JSON.stringify(listitem));
|
|
774
786
|
jumps.forEach(pp => { tmpRes = tmpRes[pp]; });
|
|
775
|
-
if (!
|
|
776
|
-
|
|
787
|
+
if (!label)
|
|
788
|
+
label = !!loc ? loc.loc(tmpRes) : tmpRes;
|
|
777
789
|
else
|
|
778
|
-
|
|
790
|
+
label += " " + !!loc ? loc.loc(tmpRes) : tmpRes;
|
|
779
791
|
});
|
|
780
792
|
jumps = valuenavigator.split(".");
|
|
781
793
|
tmpRes = JSON.parse(JSON.stringify(listitem));
|
|
@@ -793,7 +805,7 @@ class ExportService {
|
|
|
793
805
|
type = "date";
|
|
794
806
|
}
|
|
795
807
|
Object.defineProperty(obj, prop + idx, { value: value ?? "", writable: false });
|
|
796
|
-
headers.push({ label
|
|
808
|
+
headers.push({ label, key: prop + idx, order: order + idx, type, propKey: null });
|
|
797
809
|
}
|
|
798
810
|
}
|
|
799
811
|
/**
|
|
@@ -810,8 +822,9 @@ class ExportService {
|
|
|
810
822
|
* @param {any} obj Oggetto di cui esportare la proprietà **prop**
|
|
811
823
|
* @param {string} prop Proprietà da esportare
|
|
812
824
|
* @param {CsvHeaders} headers Contenitore degli header, verrà riempito da questa funzione
|
|
825
|
+
* @param {LocalizationService} loc Servizio di localizzazione che traduce tutti i nomi che può
|
|
813
826
|
*/
|
|
814
|
-
parseDictionary(obj, prop, headers) {
|
|
827
|
+
parseDictionary(obj, prop, headers, loc) {
|
|
815
828
|
let headernavigator = obj[prop + dictionaryCsvHdrPrefix];
|
|
816
829
|
let valuenavigator = obj[prop + dictionaryCsvValPrefix];
|
|
817
830
|
let order = obj[prop + csvOrdPrefix];
|
|
@@ -820,15 +833,15 @@ class ExportService {
|
|
|
820
833
|
for (let idx = 0; idx < objs.length; idx++) {
|
|
821
834
|
let listitem = objs[idx];
|
|
822
835
|
var headersplit = headernavigator.split(" ");
|
|
823
|
-
var
|
|
836
|
+
var label = "";
|
|
824
837
|
headersplit.forEach(pr => {
|
|
825
838
|
jumps = pr.split(".");
|
|
826
839
|
tmpRes = JSON.parse(JSON.stringify(listitem));
|
|
827
840
|
jumps.forEach(pp => { tmpRes = tmpRes[pp]; });
|
|
828
|
-
if (!
|
|
829
|
-
|
|
841
|
+
if (!label)
|
|
842
|
+
label = !!loc ? loc.loc(tmpRes) : tmpRes;
|
|
830
843
|
else
|
|
831
|
-
|
|
844
|
+
label += " " + !!loc ? loc.loc(tmpRes) : tmpRes;
|
|
832
845
|
});
|
|
833
846
|
var valuesplit = valuenavigator.split(",");
|
|
834
847
|
valuesplit.forEach((t, idxinternal) => {
|
|
@@ -840,7 +853,7 @@ class ExportService {
|
|
|
840
853
|
let value = tmpRes;
|
|
841
854
|
let propname = prop + idx.toString() + idxinternal.toString();
|
|
842
855
|
Object.defineProperty(obj, propname, { value: value ?? "", writable: false });
|
|
843
|
-
headers.push({ label:
|
|
856
|
+
headers.push({ label: label + " " + !!loc ? loc.loc(desc) : desc, key: propname, order: order + idx, type: 'string', propKey: null });
|
|
844
857
|
});
|
|
845
858
|
}
|
|
846
859
|
}
|
|
@@ -2098,5 +2111,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
2098
2111
|
* Generated bundle index. Do not edit.
|
|
2099
2112
|
*/
|
|
2100
2113
|
|
|
2101
|
-
export { APPSEARCH_PREFIX, CallResult, ClipboardService, CsvHeaders, DateService, EXT_ALLOW_UTC, EXT_DEBUG_MODE, Export, ExportAs, ExportDictionary, ExportList, ExportService, ExtensionsModule, GenericItem, HashingService, InboundMessageTypes, InterComMessage, InterComService, LocDatePipe, MessageService, UtilityService };
|
|
2114
|
+
export { APPSEARCH_PREFIX, CallResult, ClipboardService, CsvHeaders, DateService, EXT_ALLOW_UTC, EXT_DEBUG_MODE, Export, ExportAs, ExportDictionary, ExportList, ExportLocalization, ExportService, ExtensionsModule, GenericItem, HashingService, InboundMessageTypes, InterComMessage, InterComService, LocDatePipe, MessageService, UtilityService };
|
|
2102
2115
|
//# sourceMappingURL=esfaenza-extensions.mjs.map
|