@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.
@@ -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
- * Nome della proprietà che contiene tutti i nomi di tutte le proprietà da esportare
363
- */
364
- const exportList = "__export_list__";
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 (ctor) => {
356
+ return class extends ctor {
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 lbl = obj[prop + csvHdrPrefix];
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 && lbl !== "undefined") {
672
- // Se non ho un formato esporto direttamente
673
- if (!format) {
674
- // Se è un formato data mi assicuro di non stampare mai una data 00:00:00 altrimenti in esportazione viene uno schifo
675
- var val = obj[prop] ? this.dates.trimSeconds(obj[prop].toString()) : "";
676
- Object.defineProperty(obj, prop + "_nofmt", { value: val, writable: false, enumerable: true });
677
- headers.push({ label: lbl ? lbl : prop + "_nofmt", key: prop + "_nofmt", order: order, type: "string", propKey: propKey });
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
- // Caso formato numerico
681
- if (format == "F") {
682
- // Check considerando la possibilità di zeri
683
- let val = obj[prop] != null ? obj[prop].toString() : "";
684
- // Elimino tutte le virgole (indicatori di migliaia per la culture default en-US)
685
- val = val.replace(/,/, "");
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 lbl = obj[prop + csvHdrPrefix];
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: lbl ? lbl : prop, key: prop, order: order, type: type, propKey: null });
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 header = "";
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 (!header)
776
- header = tmpRes;
787
+ if (!label)
788
+ label = !!loc ? loc.loc(tmpRes) : tmpRes;
777
789
  else
778
- header += " " + tmpRes;
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: header, key: prop + idx, order: order + idx, type: type, propKey: null });
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 header = "";
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 (!header)
829
- header = tmpRes;
841
+ if (!label)
842
+ label = !!loc ? loc.loc(tmpRes) : tmpRes;
830
843
  else
831
- header += " " + tmpRes;
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: header + " " + desc, key: propname, order: order + idx, type: 'string', propKey: null });
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