@eqproject/eqp-dynamic-module 2.3.42 → 2.4.1

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.
Files changed (45) hide show
  1. package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +28 -4
  2. package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +242 -90
  3. package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +5 -3
  4. package/esm2020/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.mjs +71 -0
  5. package/esm2020/lib/components/private/field-templates/image-field-template/image-field-template.component.mjs +31 -18
  6. package/esm2020/lib/components/private/field-templates/label-field-template/label-field-template.component.mjs +74 -0
  7. package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +6 -15
  8. package/esm2020/lib/components/private/field-templates/text-field-template/text-field-template.component.mjs +3 -3
  9. package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +31 -3
  10. package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +21 -18
  11. package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +3 -3
  12. package/esm2020/lib/components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component.mjs +4 -3
  13. package/esm2020/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.mjs +126 -0
  14. package/esm2020/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.mjs +5 -11
  15. package/esm2020/lib/eqp-dynamic-module.module.mjs +12 -3
  16. package/esm2020/lib/models/baseField.model.mjs +9 -2
  17. package/esm2020/lib/models/fields/imageField.model.mjs +17 -4
  18. package/esm2020/lib/models/fields/imageSelectorField.model.mjs +21 -0
  19. package/esm2020/lib/models/fields/labelField.model.mjs +4 -0
  20. package/esm2020/lib/models/fields/listValueField.model.mjs +1 -4
  21. package/esm2020/lib/models/form.model.mjs +1 -1
  22. package/esm2020/lib/models/logicOperator.model.mjs +6 -1
  23. package/esm2020/lib/models/statistic.model.mjs +1 -1
  24. package/esm2020/lib/services/utilityHelper.services.mjs +37 -14
  25. package/esm2020/public-api.mjs +2 -1
  26. package/fesm2015/eqproject-eqp-dynamic-module.mjs +711 -185
  27. package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
  28. package/fesm2020/eqproject-eqp-dynamic-module.mjs +711 -185
  29. package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
  30. package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +4 -1
  31. package/lib/components/private/add-form-field/add-form-field.component.d.ts +18 -8
  32. package/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.d.ts +31 -0
  33. package/lib/components/private/field-templates/label-field-template/label-field-template.component.d.ts +34 -0
  34. package/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.d.ts +47 -0
  35. package/lib/eqp-dynamic-module.module.d.ts +14 -11
  36. package/lib/models/baseField.model.d.ts +9 -1
  37. package/lib/models/fields/imageField.model.d.ts +4 -13
  38. package/lib/models/fields/imageSelectorField.model.d.ts +49 -0
  39. package/lib/models/fields/labelField.model.d.ts +4 -0
  40. package/lib/models/fields/listValueField.model.d.ts +1 -19
  41. package/lib/models/form.model.d.ts +1 -0
  42. package/lib/models/logicOperator.model.d.ts +4 -0
  43. package/lib/models/statistic.model.d.ts +2 -2
  44. package/package.json +1 -1
  45. package/public-api.d.ts +1 -0
@@ -0,0 +1,74 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { UtilityHelperService } from '../../../../services/utilityHelper.services';
3
+ import { interval } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../../../services/voice-recognition.service";
6
+ export class LabelFieldTemplateComponent {
7
+ constructor(voiceservice) {
8
+ this.voiceservice = voiceservice;
9
+ //Variabili per l'input vocale
10
+ this.isStillRecoginze = false;
11
+ this.source = interval(200);
12
+ this.STT = true;
13
+ this.recordChange = new EventEmitter();
14
+ this.voiceservice.init();
15
+ }
16
+ ngOnInit() {
17
+ this.updateField();
18
+ this.initStyles();
19
+ }
20
+ initStyles() {
21
+ //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html
22
+ if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)
23
+ this.FieldstyleObj = UtilityHelperService.initStyles(this.field.FieldstyleCSS);
24
+ if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)
25
+ this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);
26
+ }
27
+ ngOnChanges(changes) {
28
+ // Se viene modificato il valore di "ngModelInput" allora aggiorna l'input
29
+ if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {
30
+ this.record = changes['record'].currentValue;
31
+ this.updateField();
32
+ }
33
+ }
34
+ /**
35
+ * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.
36
+ */
37
+ updateField() {
38
+ if (this.field.Formula) {
39
+ this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);
40
+ }
41
+ if (this.field.VisibleIf) {
42
+ this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, null);
43
+ }
44
+ if (!this.isStillRecoginze) {
45
+ if (this.record[this.field.Name] != null || this.record[this.field.Name] != undefined) {
46
+ this.voiceservice.text = this.record[this.field.Name];
47
+ }
48
+ }
49
+ }
50
+ /**
51
+ * Metodo per emettere l'evento che il valore del record è cambiato.
52
+ */
53
+ onRecordValueChange() {
54
+ if (!this.field.Formula) {
55
+ this.recordChange.emit(this.record);
56
+ }
57
+ if (!this.field.VisibleIf) {
58
+ this.recordChange.emit(this.record);
59
+ }
60
+ }
61
+ }
62
+ LabelFieldTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LabelFieldTemplateComponent, deps: [{ token: i1.VoiceRecognitionService }], target: i0.ɵɵFactoryTarget.Component });
63
+ LabelFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: LabelFieldTemplateComponent, selector: "label-field-template", inputs: { field: "field", record: "record" }, outputs: { recordChange: "recordChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"dm-etichetta\" [innerHTML]=\"field.Etichetta\"></div>", styles: ["input.ng-touched.ng-invalid,input.ng-dirty.ng-invalid{border:red 2px solid!important}::ng-deep .mat-form-field-label{font-size:x-large}.dm-etichetta{margin-top:18px}\n"] });
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LabelFieldTemplateComponent, decorators: [{
65
+ type: Component,
66
+ args: [{ selector: 'label-field-template', template: "<div class=\"dm-etichetta\" [innerHTML]=\"field.Etichetta\"></div>", styles: ["input.ng-touched.ng-invalid,input.ng-dirty.ng-invalid{border:red 2px solid!important}::ng-deep .mat-form-field-label{font-size:x-large}.dm-etichetta{margin-top:18px}\n"] }]
67
+ }], ctorParameters: function () { return [{ type: i1.VoiceRecognitionService }]; }, propDecorators: { field: [{
68
+ type: Input
69
+ }], record: [{
70
+ type: Input
71
+ }], recordChange: [{
72
+ type: Output
73
+ }] } });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy9sYWJlbC1maWVsZC10ZW1wbGF0ZS9sYWJlbC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xhYmVsLWZpZWxkLXRlbXBsYXRlL2xhYmVsLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUd6RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVuRixPQUFPLEVBQUUsUUFBUSxFQUFnQixNQUFNLE1BQU0sQ0FBQzs7O0FBUTlDLE1BQU0sT0FBTywyQkFBMkI7SUFpQnRDLFlBQW1CLFlBQXFDO1FBQXJDLGlCQUFZLEdBQVosWUFBWSxDQUF5QjtRQWhCeEQsOEJBQThCO1FBQzlCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBTXZCLFFBQUcsR0FBVSxJQUFJLENBQUM7UUFLUixpQkFBWSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBSXhFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVB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O3NCQUFkLEtBQUs7Z0JBTUksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgSUJhc2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBWb2ljZVJlY29nbml0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3ZvaWNlLXJlY29nbml0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpbnRlcnZhbCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IExhYmVsRmllbGQgfSBmcm9tICdwcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9tb2RlbHMvZmllbGRzL2xhYmVsRmllbGQubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsYWJlbC1maWVsZC10ZW1wbGF0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xhYmVsLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9sYWJlbC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMYWJlbEZpZWxkVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgSUJhc2VGaWVsZENvbXBvbmVudCB7XHJcbiAgLy9WYXJpYWJpbGkgcGVyIGwnaW5wdXQgdm9jYWxlXHJcbiAgaXNTdGlsbFJlY29naW56ZSA9IGZhbHNlO1xyXG4gIHNvdXJjZSA9IGludGVydmFsKDIwMCk7XHJcbiAgbmV3dGV4dDogc3RyaW5nO1xyXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIC8vdmFyaWFiaWxpIGVzdGVybmUgcGVyIGwnaW5wdXQgZGVpIGNhbXBpXHJcbiAgQElucHV0KCkgZmllbGQ6IExhYmVsRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgU1RUOmJvb2xlYW4gPXRydWU7XHJcbiAgLy92YXJpYWJpbGkgcGVyIGdlc3RpcmUgaWwgY3NzIGRlbGxhIGxhYmVsIGUgZGVsIGZpZWxkXHJcbiAgRmllbGRzdHlsZU9iajogYW55O1xyXG4gIExhYmVsc3R5bGVPYmo6IGFueTtcclxuXHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB2b2ljZXNlcnZpY2U6IFZvaWNlUmVjb2duaXRpb25TZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnZvaWNlc2VydmljZS5pbml0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlRmllbGQoKTtcclxuICAgIHRoaXMuaW5pdFN0eWxlcygpO1xyXG4gIH1cclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgICAvL0Z1bnppb25lIHBlciBwYXJzYXJlIGlsIGNhbXBvIHN0eWxlY3NzIGRlbGwnb2dnZXR0byBmaWVsZCBlZCBhcHBsaWNhcmxvIGFsbCdodG1sXHJcbiAgICBpZih0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gdW5kZWZpbmVkKSAgIFxyXG4gICAgICB0aGlzLkZpZWxkc3R5bGVPYmo9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmluaXRTdHlsZXModGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTKTtcclxuICAgIGlmKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSBudWxsIHx8IHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSB1bmRlZmluZWQpICAgXHJcbiAgICAgIHRoaXMuTGFiZWxzdHlsZU9iaiA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmluaXRTdHlsZXModGhpcy5maWVsZC5MYWJlbHN0eWxlQ1NTKTtcclxuIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgLy8gU2UgdmllbmUgbW9kaWZpY2F0byBpbCB2YWxvcmUgZGkgXCJuZ01vZGVsSW5wdXRcIiBhbGxvcmEgYWdnaW9ybmEgbCdpbnB1dFxyXG4gICAgaWYgKGNoYW5nZXNbJ3JlY29yZCddICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VzWydyZWNvcmQnXS5maXJzdENoYW5nZSA9PSBmYWxzZSAmJiBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3JlY29yZCddLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkID0gY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFnZ2lvcm5hcmUgaWwgdmFsb3JlIGRlbCBjYW1wbyBxdWFuZG8gcXVlc3RvIMOoIHJhcHByZXNlbnRhdG8gZGEgdW5hIGZvcm11bGEuXHJcbiAgICovXHJcbiAgdXBkYXRlRmllbGQoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCBudWxsKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpZWxkLlZpc2libGVJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLlZpc2libGVJZiwgdGhpcy5yZWNvcmQsIG51bGwpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmlzU3RpbGxSZWNvZ2luemUpIHtcclxuICAgICAgaWYgKHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gIT0gbnVsbCB8fCB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMudm9pY2VzZXJ2aWNlLnRleHQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVtZXR0ZXJlIGwnZXZlbnRvIGNoZSBpbCB2YWxvcmUgZGVsIHJlY29yZCDDqCBjYW1iaWF0by5cclxuICAgKi9cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKCkge1xyXG4gICAgaWYgKCF0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZmllbGQuVmlzaWJsZUlmKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZG0tZXRpY2hldHRhXCIgW2lubmVySFRNTF09XCJmaWVsZC5FdGljaGV0dGFcIj48L2Rpdj4iXX0=