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