@esfaenza/extensions 15.2.5 → 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';
@@ -15,7 +15,9 @@ const APPSEARCH_PREFIX = new InjectionToken('APPSEARCH_PREFIX');
15
15
  /**
16
16
  * Token che indica se i metodi di estensione che utilizzano le date permettono l'uso di date in utc
17
17
  */
18
- const EXT_ALLOW_UTC = new InjectionToken('EXT_ALLOW_UTC');
18
+ const EXT_ALLOW_UTC = new InjectionToken('EXT_ALLOW_UTC');
19
+ /** Modalità di Debug */
20
+ const EXT_DEBUG_MODE = new InjectionToken('EXT_DEBUG_MODE');
19
21
 
20
22
  // Angular
21
23
  /**
@@ -293,7 +295,8 @@ class ExtensionsModule {
293
295
  ngModule: ExtensionsModule,
294
296
  providers: [
295
297
  { provide: APPSEARCH_PREFIX, useValue: config?.appsearch_prefix || 'Hot' },
296
- { provide: EXT_ALLOW_UTC, useValue: config?.allow_utc == null ? false : config?.allow_utc }
298
+ { provide: EXT_ALLOW_UTC, useValue: config?.allow_utc == null ? false : config?.allow_utc },
299
+ { provide: EXT_DEBUG_MODE, useValue: config?.debugMode || false },
297
300
  ]
298
301
  };
299
302
  }
@@ -315,52 +318,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
315
318
  * utilizzato dal servizio di esportazione per prendere il valore delle proprietà di un oggetto
316
319
  */
317
320
  const csvValueNavigator = "_csvnav";
318
- /**
319
- * Suffisso della proprietà da generare in cui salvare l'ordine di esportazione
320
- */
321
+ /** Suffisso della proprietà da generare in cui salvare l'ordine di esportazione */
321
322
  const csvOrdPrefix = "_csvord";
322
- /**
323
- * Suffisso della proprietà da generare in cui salvare la visibilità di questa proprietà
324
- */
323
+ /** Suffisso della proprietà da generare in cui salvare la visibilità di questa proprietà */
325
324
  const csvVisPrefix = "_csvvis";
326
- /**
327
- * Suffisso della proprietà da generare in cui salvare il nome della colonna in cui salvare questa proprietà
328
- */
325
+ /** Suffisso della proprietà da generare in cui salvare il nome della colonna in cui salvare questa proprietà */
329
326
  const csvHdrPrefix = "_csvhdr";
330
- /**
331
- * Suffisso della proprietà da generare in cui salvare il codice del th a cui si riferisce questo campo
332
- */
327
+ /** Suffisso della proprietà da generare in cui salvare il codice del th a cui si riferisce questo campo */
333
328
  const csvPropKey = "_csvkey";
334
- /**
335
- * Suffisso della proprietà da generare in cui salvare il valore da prendere per una proprietà di tipo Lista
336
- */
329
+ /** Suffisso della proprietà da generare in cui salvare il valore da prendere per una proprietà di tipo Lista */
337
330
  const listCsvValPrefix = "_listcsvval";
338
- /**
339
- * Suffisso della proprietà da generare in cui salvare l'Header della proprietà di tipo Lista relativo al valore esportato nella proprietà con suffisso **listCsvValPrefix**
340
- */
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** */
341
332
  const listCsvHdrPrefix = "_listcsvhdr";
342
- /**
343
- * Suffisso della proprietà da generare in cui salvare il formato della proprietà di tipo Lista relativo al valore esportato nella proprietà con suffisso **listCsvValPrefix**
344
- */
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** */
345
334
  const listCsvValFormat = "_listcsvvalformat";
346
- /**
347
- * Suffisso della proprietà da generare in cui salvare il valore da prendere per una proprietà di tipo Dizionario
348
- */
335
+ /** Suffisso della proprietà da generare in cui salvare il valore da prendere per una proprietà di tipo Dizionario */
349
336
  const dictionaryCsvValPrefix = "_flatlistcsvval";
350
- /**
351
- * Suffisso della proprietà da generare in cui salvare l'Header della proprietà di un Dizionario relativo al valore esportato nella proprietà con suffisso **dictionaryCsvValPrefix**
352
- */
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** */
353
338
  const dictionaryCsvHdrPrefix = "_flatlistcsvhdr";
354
- /**
355
- * Suffisso della proprietà da generare in cui salvare il formato della proprietà che si sta esportando
356
- */
339
+ /** Suffisso della proprietà da generare in cui salvare il formato della proprietà che si sta esportando */
357
340
  const csvFormatPrefix = "_csvfmt";
358
- /**
359
- * Nome della proprietà che contiene tutti i nomi di tutte le proprietà da esportare
360
- */
361
- 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__";
362
345
 
363
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
+ }
364
364
  /**
365
365
  * Decoratore di esportazione utilizzabile su una proprietà singola.
366
366
  * Verranno generate 3 proprietà che gestiranno l'esportazione: (prop, prop_csvvis, prop_csvhdr).
@@ -621,6 +621,7 @@ class ExportService {
621
621
  var headers = [];
622
622
  // Miracle incoming
623
623
  let exportProps = obj[exportList] || [];
624
+ let loc = this.getLocalizationService(obj);
624
625
  if (exportProps.length == 0)
625
626
  console.warn("[@esfaenza/extensions] Nessuna colonna configurata da esportare!");
626
627
  for (let i = 0; i < exportProps.length; i++) {
@@ -632,8 +633,8 @@ class ExportService {
632
633
  toCall = this.parseList.bind(this);
633
634
  }
634
635
  else if (prop.endsWith(dictionaryCsvHdrPrefix)) {
635
- toCall = this.parseDictionary.bind(this);
636
636
  propBase = prop.replace(dictionaryCsvHdrPrefix, '');
637
+ toCall = this.parseDictionary.bind(this);
637
638
  }
638
639
  else if (prop.endsWith(csvVisPrefix)) {
639
640
  propBase = prop.replace(csvVisPrefix, '');
@@ -643,10 +644,17 @@ class ExportService {
643
644
  toCall = this.parseProperty.bind(this);
644
645
  }
645
646
  if (toCall)
646
- toCall(obj, propBase, headers, columnsSelection);
647
+ toCall(obj, propBase, headers, columnsSelection, loc);
647
648
  }
648
649
  return headers;
649
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
+ }
650
658
  /**
651
659
  * Setup per l'esportazione di una singola proprietà.
652
660
  * Viene generato l'header e la proprietà relativa al valore formattato o no
@@ -654,8 +662,9 @@ class ExportService {
654
662
  * @param {any} obj Oggetto di cui esportare la proprietà **prop**
655
663
  * @param {string} prop Proprietà da esportare
656
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ò
657
666
  */
658
- parseProperty(obj, prop, headers, columnsSelection) {
667
+ parseProperty(obj, prop, headers, columnsSelection, loc) {
659
668
  let toEmit = obj[prop + csvVisPrefix];
660
669
  let format = obj[prop + csvFormatPrefix];
661
670
  let propKey = obj[prop + csvPropKey];
@@ -663,36 +672,39 @@ class ExportService {
663
672
  console.log("[@esfaenza/extensions] Colonna da non esportare: " + propKey);
664
673
  return;
665
674
  }
666
- let lbl = obj[prop + csvHdrPrefix];
675
+ let text = obj[prop + csvHdrPrefix];
676
+ let label = loc && text ? loc.loc(text) : text || "";
667
677
  let order = obj[prop + csvOrdPrefix];
668
- if (toEmit && lbl !== "undefined") {
669
- // Se non ho un formato esporto direttamente
670
- if (!format) {
671
- // Se è un formato data mi assicuro di non stampare mai una data 00:00:00 altrimenti in esportazione viene uno schifo
672
- var val = obj[prop] ? this.dates.trimSeconds(obj[prop].toString()) : "";
673
- Object.defineProperty(obj, prop + "_nofmt", { value: val, writable: false, enumerable: true });
674
- 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 });
675
700
  }
676
701
  else {
677
- // Caso formato numerico
678
- if (format == "F") {
679
- // Check considerando la possibilità di zeri
680
- let val = obj[prop] != null ? obj[prop].toString() : "";
681
- // Elimino tutte le virgole (indicatori di migliaia per la culture default en-US)
682
- val = val.replace(/,/, "");
683
- // Il singolo punto che c'è, se presente (separatore decimali) lo trasformo in virgola
684
- let valConverted = val.replace(".", ",");
685
- Object.defineProperty(obj, prop + "_fmt", { value: valConverted, writable: false, enumerable: true });
686
- headers.push({ label: lbl ? lbl : prop + "_fmt", key: prop + "_fmt", order: order, type: "number", propKey: propKey });
687
- }
688
- else {
689
- // Se ho un formato data trasformo in dayjs, formatto ed esporto
690
- // Per la trasformazione in dayjs provo prima a passargli la stringa di netto, sperando la riconosca
691
- // Se non funziona provo a definirgli la formattazione standard del metering per quel linguaggio
692
- let val = this.dates.getFormatted(obj[prop], format.length <= 10, format.length > 16);
693
- Object.defineProperty(obj, prop + "_fmt", { value: val ?? "", writable: false, enumerable: true });
694
- headers.push({ label: lbl ? lbl : prop + "_fmt", key: prop + "_fmt", order: order, type: "date", propKey: propKey });
695
- }
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 });
696
708
  }
697
709
  }
698
710
  }
@@ -705,8 +717,9 @@ class ExportService {
705
717
  * @param {any} obj Oggetto di cui esportare la proprietà **prop**
706
718
  * @param {string} prop Proprietà da esportare
707
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ò
708
721
  */
709
- parseObject(obj, prop, headers) {
722
+ parseObject(obj, prop, headers, loc) {
710
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
711
724
  let valuenavigator = obj[prop + csvValueNavigator];
712
725
  //Es. di valuenavigator obj.subobj.subsubobj.property
@@ -720,7 +733,8 @@ class ExportService {
720
733
  jmps.forEach(pp => { clone = clone[pp]; });
721
734
  //Valore finale :D
722
735
  let value = clone;
723
- let lbl = obj[prop + csvHdrPrefix];
736
+ let text = obj[prop + csvHdrPrefix];
737
+ let label = loc && text ? loc.loc(text) : text || "";
724
738
  let order = obj[prop + csvOrdPrefix];
725
739
  //Se per questa proprietà ho un formato lo applico
726
740
  let format = obj[prop + csvFormatPrefix];
@@ -736,7 +750,7 @@ class ExportService {
736
750
  type = "date";
737
751
  }
738
752
  Object.defineProperty(obj, prop, { value: value ?? "", writable: false, enumerable: true });
739
- headers.push({ label: lbl ? lbl : prop, key: prop, order: order, type: type, propKey: null });
753
+ headers.push({ label, key: prop, order, type, propKey: null });
740
754
  }
741
755
  /**
742
756
  * Setup per l'esportazione di una lista di valori pivottati dinamicamente:
@@ -752,8 +766,9 @@ class ExportService {
752
766
  * @param {any} obj Oggetto di cui esportare la proprietà **prop**
753
767
  * @param {string} prop Proprietà da esportare
754
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ò
755
770
  */
756
- parseList(obj, prop, headers) {
771
+ parseList(obj, prop, headers, loc) {
757
772
  let headernavigator = obj[prop + listCsvHdrPrefix];
758
773
  let valuenavigator = obj[prop + listCsvValPrefix];
759
774
  let valueformat = obj[prop + listCsvValFormat];
@@ -763,16 +778,16 @@ class ExportService {
763
778
  for (let idx = 0; idx < objs.length; idx++) {
764
779
  let listitem = objs[idx];
765
780
  var headersplit = headernavigator.split(" ");
766
- var header = "";
781
+ var label = "";
767
782
  // Per l'header si considera a se stante ogni pezzo separato da spazio per fare le concatenazioni
768
783
  headersplit.forEach(pr => {
769
784
  jumps = pr.split(".");
770
785
  tmpRes = JSON.parse(JSON.stringify(listitem));
771
786
  jumps.forEach(pp => { tmpRes = tmpRes[pp]; });
772
- if (!header)
773
- header = tmpRes;
787
+ if (!label)
788
+ label = !!loc ? loc.loc(tmpRes) : tmpRes;
774
789
  else
775
- header += " " + tmpRes;
790
+ label += " " + !!loc ? loc.loc(tmpRes) : tmpRes;
776
791
  });
777
792
  jumps = valuenavigator.split(".");
778
793
  tmpRes = JSON.parse(JSON.stringify(listitem));
@@ -790,7 +805,7 @@ class ExportService {
790
805
  type = "date";
791
806
  }
792
807
  Object.defineProperty(obj, prop + idx, { value: value ?? "", writable: false });
793
- 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 });
794
809
  }
795
810
  }
796
811
  /**
@@ -807,8 +822,9 @@ class ExportService {
807
822
  * @param {any} obj Oggetto di cui esportare la proprietà **prop**
808
823
  * @param {string} prop Proprietà da esportare
809
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ò
810
826
  */
811
- parseDictionary(obj, prop, headers) {
827
+ parseDictionary(obj, prop, headers, loc) {
812
828
  let headernavigator = obj[prop + dictionaryCsvHdrPrefix];
813
829
  let valuenavigator = obj[prop + dictionaryCsvValPrefix];
814
830
  let order = obj[prop + csvOrdPrefix];
@@ -817,15 +833,15 @@ class ExportService {
817
833
  for (let idx = 0; idx < objs.length; idx++) {
818
834
  let listitem = objs[idx];
819
835
  var headersplit = headernavigator.split(" ");
820
- var header = "";
836
+ var label = "";
821
837
  headersplit.forEach(pr => {
822
838
  jumps = pr.split(".");
823
839
  tmpRes = JSON.parse(JSON.stringify(listitem));
824
840
  jumps.forEach(pp => { tmpRes = tmpRes[pp]; });
825
- if (!header)
826
- header = tmpRes;
841
+ if (!label)
842
+ label = !!loc ? loc.loc(tmpRes) : tmpRes;
827
843
  else
828
- header += " " + tmpRes;
844
+ label += " " + !!loc ? loc.loc(tmpRes) : tmpRes;
829
845
  });
830
846
  var valuesplit = valuenavigator.split(",");
831
847
  valuesplit.forEach((t, idxinternal) => {
@@ -837,7 +853,7 @@ class ExportService {
837
853
  let value = tmpRes;
838
854
  let propname = prop + idx.toString() + idxinternal.toString();
839
855
  Object.defineProperty(obj, propname, { value: value ?? "", writable: false });
840
- 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 });
841
857
  });
842
858
  }
843
859
  }
@@ -2095,5 +2111,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
2095
2111
  * Generated bundle index. Do not edit.
2096
2112
  */
2097
2113
 
2098
- export { APPSEARCH_PREFIX, CallResult, ClipboardService, CsvHeaders, DateService, EXT_ALLOW_UTC, 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 };
2099
2115
  //# sourceMappingURL=esfaenza-extensions.mjs.map