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