@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.
@@ -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
- * Nome della proprietà che contiene tutti i nomi di tutte le proprietà da esportare
367
- */
368
- const exportList = "__export_list__";
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 function integrateLoc(constructor) {
360
+ return class extends constructor {
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 lbl = obj[prop + csvHdrPrefix];
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 && lbl !== "undefined") {
676
- // Se non ho un formato esporto direttamente
677
- if (!format) {
678
- // Se è un formato data mi assicuro di non stampare mai una data 00:00:00 altrimenti in esportazione viene uno schifo
679
- var val = obj[prop] ? this.dates.trimSeconds(obj[prop].toString()) : "";
680
- Object.defineProperty(obj, prop + "_nofmt", { value: val, writable: false, enumerable: true });
681
- headers.push({ label: lbl ? lbl : prop + "_nofmt", key: prop + "_nofmt", order: order, type: "string", propKey: propKey });
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
- // Caso formato numerico
685
- if (format == "F") {
686
- // Check considerando la possibilità di zeri
687
- let val = obj[prop] != null ? obj[prop].toString() : "";
688
- // Elimino tutte le virgole (indicatori di migliaia per la culture default en-US)
689
- val = val.replace(/,/, "");
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 lbl = obj[prop + csvHdrPrefix];
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: lbl ? lbl : prop, key: prop, order: order, type: type, propKey: null });
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 header = "";
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 (!header)
780
- header = tmpRes;
791
+ if (!label)
792
+ label = !!loc ? loc.loc(tmpRes) : tmpRes;
781
793
  else
782
- header += " " + tmpRes;
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: header, key: prop + idx, order: order + idx, type: type, propKey: null });
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 header = "";
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 (!header)
833
- header = tmpRes;
845
+ if (!label)
846
+ label = !!loc ? loc.loc(tmpRes) : tmpRes;
834
847
  else
835
- header += " " + tmpRes;
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: header + " " + desc, key: propname, order: order + idx, type: 'string', propKey: null });
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