@eqproject/eqp-dynamic-module 0.0.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 (125) hide show
  1. package/README.md +24 -0
  2. package/bundles/eqproject-eqp-dynamic-module.umd.js +3117 -0
  3. package/bundles/eqproject-eqp-dynamic-module.umd.js.map +1 -0
  4. package/bundles/eqproject-eqp-dynamic-module.umd.min.js +17 -0
  5. package/bundles/eqproject-eqp-dynamic-module.umd.min.js.map +1 -0
  6. package/eqproject-eqp-dynamic-module.d.ts +5 -0
  7. package/eqproject-eqp-dynamic-module.metadata.json +1 -0
  8. package/esm2015/eqproject-eqp-dynamic-module.js +6 -0
  9. package/esm2015/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.js +65 -0
  10. package/esm2015/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.js +534 -0
  11. package/esm2015/lib/components/private/add-form-field/add-form-field.component.js +486 -0
  12. package/esm2015/lib/components/private/dynamic-module-field/dynamic-module-field.component.js +127 -0
  13. package/esm2015/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.js +181 -0
  14. package/esm2015/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.js +56 -0
  15. package/esm2015/lib/components/private/field-templates/date-field-template/date-field-template.component.js +71 -0
  16. package/esm2015/lib/components/private/field-templates/image-field-template/image-field-template.component.js +54 -0
  17. package/esm2015/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.js +118 -0
  18. package/esm2015/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.js +63 -0
  19. package/esm2015/lib/components/private/field-templates/text-field-template/text-field-template.component.js +51 -0
  20. package/esm2015/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.js +51 -0
  21. package/esm2015/lib/components/private/form-records/add-form-record/add-form-record.component.js +126 -0
  22. package/esm2015/lib/components/private/form-records/list-form-record/list-form-record.component.js +210 -0
  23. package/esm2015/lib/eqp-dynamic-module.module.js +67 -0
  24. package/esm2015/lib/interfaces/iBaseFieldComponent.interface.js +1 -0
  25. package/esm2015/lib/interfaces/iRootObject.interface.js +1 -0
  26. package/esm2015/lib/models/baseField.model.js +36 -0
  27. package/esm2015/lib/models/baseObj.model.js +9 -0
  28. package/esm2015/lib/models/context.model.js +8 -0
  29. package/esm2015/lib/models/entity.model.js +7 -0
  30. package/esm2015/lib/models/fields/attachmentField.model.js +22 -0
  31. package/esm2015/lib/models/fields/booleanField.model.js +12 -0
  32. package/esm2015/lib/models/fields/dateField.model.js +11 -0
  33. package/esm2015/lib/models/fields/imageField.model.js +4 -0
  34. package/esm2015/lib/models/fields/listValueField.model.js +12 -0
  35. package/esm2015/lib/models/fields/lookupField.model.js +5 -0
  36. package/esm2015/lib/models/fields/numericField.model.js +5 -0
  37. package/esm2015/lib/models/fields/testareaField.model.js +4 -0
  38. package/esm2015/lib/models/fields/textField.model.js +5 -0
  39. package/esm2015/lib/models/form.model.js +24 -0
  40. package/esm2015/lib/models/record.model.js +3 -0
  41. package/esm2015/lib/modules/material.module.js +108 -0
  42. package/esm2015/lib/services/custom-form-validators.service.js +19 -0
  43. package/esm2015/lib/services/eqp-dynamic-module-dialog.service.js +104 -0
  44. package/esm2015/lib/services/utilityHelper.services.js +220 -0
  45. package/esm2015/public-api.js +37 -0
  46. package/esm5/eqproject-eqp-dynamic-module.js +6 -0
  47. package/esm5/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.js +66 -0
  48. package/esm5/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.js +546 -0
  49. package/esm5/lib/components/private/add-form-field/add-form-field.component.js +497 -0
  50. package/esm5/lib/components/private/dynamic-module-field/dynamic-module-field.component.js +128 -0
  51. package/esm5/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.js +184 -0
  52. package/esm5/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.js +57 -0
  53. package/esm5/lib/components/private/field-templates/date-field-template/date-field-template.component.js +72 -0
  54. package/esm5/lib/components/private/field-templates/image-field-template/image-field-template.component.js +55 -0
  55. package/esm5/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.js +121 -0
  56. package/esm5/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.js +64 -0
  57. package/esm5/lib/components/private/field-templates/text-field-template/text-field-template.component.js +52 -0
  58. package/esm5/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.js +52 -0
  59. package/esm5/lib/components/private/form-records/add-form-record/add-form-record.component.js +129 -0
  60. package/esm5/lib/components/private/form-records/list-form-record/list-form-record.component.js +216 -0
  61. package/esm5/lib/eqp-dynamic-module.module.js +70 -0
  62. package/esm5/lib/interfaces/iBaseFieldComponent.interface.js +1 -0
  63. package/esm5/lib/interfaces/iRootObject.interface.js +1 -0
  64. package/esm5/lib/models/baseField.model.js +43 -0
  65. package/esm5/lib/models/baseObj.model.js +13 -0
  66. package/esm5/lib/models/context.model.js +14 -0
  67. package/esm5/lib/models/entity.model.js +14 -0
  68. package/esm5/lib/models/fields/attachmentField.model.js +29 -0
  69. package/esm5/lib/models/fields/booleanField.model.js +19 -0
  70. package/esm5/lib/models/fields/dateField.model.js +18 -0
  71. package/esm5/lib/models/fields/imageField.model.js +11 -0
  72. package/esm5/lib/models/fields/listValueField.model.js +19 -0
  73. package/esm5/lib/models/fields/lookupField.model.js +12 -0
  74. package/esm5/lib/models/fields/numericField.model.js +12 -0
  75. package/esm5/lib/models/fields/testareaField.model.js +11 -0
  76. package/esm5/lib/models/fields/textField.model.js +12 -0
  77. package/esm5/lib/models/form.model.js +39 -0
  78. package/esm5/lib/models/record.model.js +7 -0
  79. package/esm5/lib/modules/material.module.js +111 -0
  80. package/esm5/lib/services/custom-form-validators.service.js +23 -0
  81. package/esm5/lib/services/eqp-dynamic-module-dialog.service.js +113 -0
  82. package/esm5/lib/services/utilityHelper.services.js +225 -0
  83. package/esm5/public-api.js +37 -0
  84. package/fesm2015/eqproject-eqp-dynamic-module.js +2757 -0
  85. package/fesm2015/eqproject-eqp-dynamic-module.js.map +1 -0
  86. package/fesm5/eqproject-eqp-dynamic-module.js +2902 -0
  87. package/fesm5/eqproject-eqp-dynamic-module.js.map +1 -0
  88. package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +21 -0
  89. package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +186 -0
  90. package/lib/components/private/add-form-field/add-form-field.component.d.ts +160 -0
  91. package/lib/components/private/dynamic-module-field/dynamic-module-field.component.d.ts +55 -0
  92. package/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.d.ts +84 -0
  93. package/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.d.ts +21 -0
  94. package/lib/components/private/field-templates/date-field-template/date-field-template.component.d.ts +27 -0
  95. package/lib/components/private/field-templates/image-field-template/image-field-template.component.d.ts +16 -0
  96. package/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.d.ts +59 -0
  97. package/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.d.ts +26 -0
  98. package/lib/components/private/field-templates/text-field-template/text-field-template.component.d.ts +20 -0
  99. package/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.d.ts +20 -0
  100. package/lib/components/private/form-records/add-form-record/add-form-record.component.d.ts +50 -0
  101. package/lib/components/private/form-records/list-form-record/list-form-record.component.d.ts +59 -0
  102. package/lib/eqp-dynamic-module.module.d.ts +2 -0
  103. package/lib/interfaces/iBaseFieldComponent.interface.d.ts +8 -0
  104. package/lib/interfaces/iRootObject.interface.d.ts +10 -0
  105. package/lib/models/baseField.model.d.ts +56 -0
  106. package/lib/models/baseObj.model.d.ts +9 -0
  107. package/lib/models/context.model.d.ts +9 -0
  108. package/lib/models/entity.model.d.ts +10 -0
  109. package/lib/models/fields/attachmentField.model.d.ts +17 -0
  110. package/lib/models/fields/booleanField.model.d.ts +11 -0
  111. package/lib/models/fields/dateField.model.d.ts +12 -0
  112. package/lib/models/fields/imageField.model.d.ts +10 -0
  113. package/lib/models/fields/listValueField.model.d.ts +21 -0
  114. package/lib/models/fields/lookupField.model.d.ts +10 -0
  115. package/lib/models/fields/numericField.model.d.ts +9 -0
  116. package/lib/models/fields/testareaField.model.d.ts +7 -0
  117. package/lib/models/fields/textField.model.d.ts +7 -0
  118. package/lib/models/form.model.d.ts +45 -0
  119. package/lib/models/record.model.d.ts +5 -0
  120. package/lib/modules/material.module.d.ts +2 -0
  121. package/lib/services/custom-form-validators.service.d.ts +5 -0
  122. package/lib/services/eqp-dynamic-module-dialog.service.d.ts +28 -0
  123. package/lib/services/utilityHelper.services.d.ts +48 -0
  124. package/package.json +39 -0
  125. package/public-api.d.ts +35 -0
@@ -0,0 +1,118 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { ListPresentationEnum } from '../../../../models/fields/listValueField.model';
4
+ import { UtilityHelperService } from '../../../../services/utilityHelper.services';
5
+ let ListValueFieldTemplateComponent = class ListValueFieldTemplateComponent {
6
+ constructor() {
7
+ this.recordChange = new EventEmitter();
8
+ this.ListPresentationEnum = ListPresentationEnum;
9
+ this.arrayData = [];
10
+ }
11
+ ngOnInit() {
12
+ this.setArrayData();
13
+ if (this.field.IsMultiChoiche && !this.record[this.field.Name]) {
14
+ this.record[this.field.Name] = [];
15
+ }
16
+ // Nel caso in cui sono in modifica di un Record aggiorno il valore
17
+ // e il validator del FormControl. Se non viene eseguita questa riga
18
+ // l'utente deve modificare la selezione fatta per aggiornare la form.
19
+ this.setFormControlValue();
20
+ }
21
+ ngOnChanges(changes) {
22
+ // Se viene modificato il valore di "ngModelInput" allora aggiorna l'input
23
+ if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {
24
+ this.record = changes['record'].currentValue;
25
+ this.updateField();
26
+ }
27
+ }
28
+ /**
29
+ * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.
30
+ */
31
+ updateField() {
32
+ if (this.field.Formula) {
33
+ this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);
34
+ }
35
+ }
36
+ /**
37
+ * Metodo per recuperare la classe da applicare al button (nella relativa visualizzazione).
38
+ * Se il pulsante è stato selezionato imposta la classe "selected-button".
39
+ * @param data Oggetto bindato al pulsante
40
+ * @returns Restituisce la classe da applicare tramite [ngClass]
41
+ */
42
+ getSelectButtonClass(data) {
43
+ const selectedButtonClass = "selected-button";
44
+ return data.Selected ? selectedButtonClass : null;
45
+ }
46
+ /**
47
+ * Metodo invocato quando viene selezionata un'opzione nella visualizzazione a button
48
+ * @param data Rappresenta l'oggetto selezionato
49
+ */
50
+ buttonSelectClick(data) {
51
+ if (this.field.IsMultiChoiche) {
52
+ data.Selected = !data.Selected;
53
+ this.updateSelected(false);
54
+ }
55
+ else {
56
+ this.record[this.field.Name] = data.Value;
57
+ }
58
+ this.onRecordValueChange();
59
+ }
60
+ /**
61
+ * Metodo per aggiornare il/i valore/i selezionato/i dall'utente.
62
+ * @param emitChange Se true scatena l'evento di output della modifica del valore di record
63
+ */
64
+ updateSelected(emitChange = true) {
65
+ this.record[this.field.Name] = this.arrayData.filter(data => data.Selected).map(data => data.Value);
66
+ this.setFormControlValue();
67
+ if (emitChange) {
68
+ this.onRecordValueChange();
69
+ }
70
+ }
71
+ /**
72
+ * Metodo per emettere l'evento che il valore del record è cambiato.
73
+ */
74
+ onRecordValueChange() {
75
+ if (!this.field.Formula) {
76
+ this.recordChange.emit(this.record);
77
+ }
78
+ }
79
+ /**
80
+ * Metodo per creare un array di oggetti del tipo { Key: string, Value: any } da usare come sorgente dati per la eqp-select.
81
+ */
82
+ setArrayData() {
83
+ Object.keys(this.field.ValuePairs).forEach(k => {
84
+ var isOptionSelected;
85
+ if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {
86
+ isOptionSelected = !!this.record[this.field.Name].find(v => v == this.field.ValuePairs[k]);
87
+ }
88
+ else {
89
+ isOptionSelected = this.record[this.field.Name] === this.field.ValuePairs[k];
90
+ }
91
+ this.arrayData.push({ Key: k, Value: this.field.ValuePairs[k], Selected: isOptionSelected });
92
+ });
93
+ }
94
+ /**
95
+ * Metodo per aggiornare il valore e il validator del FormControl associato al campo.
96
+ */
97
+ setFormControlValue() {
98
+ this.field.FormFormGroup.controls[this.field.Name].setValue(this.record[this.field.Name]);
99
+ }
100
+ };
101
+ __decorate([
102
+ Input()
103
+ ], ListValueFieldTemplateComponent.prototype, "field", void 0);
104
+ __decorate([
105
+ Input()
106
+ ], ListValueFieldTemplateComponent.prototype, "record", void 0);
107
+ __decorate([
108
+ Output()
109
+ ], ListValueFieldTemplateComponent.prototype, "recordChange", void 0);
110
+ ListValueFieldTemplateComponent = __decorate([
111
+ Component({
112
+ selector: 'list-value-field-template',
113
+ template: "<eqp-select *ngIf=\"field.PresentationMode == ListPresentationEnum['Combo box']\" [arrayData]=\"arrayData\"\n [arrayKeyProperty]=\"'Value'\" [showCancelButton]=\"!field.Required\" [arrayValueProperty]=\"'Key'\"\n [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\" [placeholder]=\"field.Label\"\n [includeFullObject]=\"false\" [isRequired]=\"field.Required\" [isDisabled]=\"field.FormFormGroup.disabled\"\n [(ngModelInput)]=\"record[field.Name]\" [isMultiSelect]=\"field.IsMultiChoiche\"\n (ngModelInputChange)=\"onRecordValueChange()\">\n</eqp-select>\n\n<div *ngIf=\"field.PresentationMode != ListPresentationEnum['Combo box']\" [formGroup]=\"field.FormFormGroup\">\n\n <mat-label class=\"mr-3\"> {{field.Label + (field.Required ? \" *\" : \"\")}} </mat-label>\n\n <!-- VISUALIZZAZIONE A RADIO BUTTON (SENZA SELEZIONE MULTIPLA) -->\n <mat-radio-group *ngIf=\"field.PresentationMode == ListPresentationEnum['Radio button'] && !field.IsMultiChoiche\"\n [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\n [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\n <mat-radio-button class=\"mr-2\" *ngFor=\"let data of arrayData\" [value]=\"data.Value\" color=\"primary\">\n {{data.Key}}\n </mat-radio-button>\n </mat-radio-group>\n\n <!-- VISUALIZZAZIONE A CHECKBOX (SELEZIONE MULTIPLA) -->\n <div class=\"d-inline-block\"\n *ngIf=\"field.PresentationMode == ListPresentationEnum['Radio button'] && field.IsMultiChoiche\">\n <mat-checkbox class=\"mr-2\" *ngFor=\"let data of arrayData\" [disabled]=\"field.FormFormGroup.disabled\"\n [formControlName]=\"field.Name\" [(ngModel)]=\"data.Selected\" (ngModelChange)=\"updateSelected()\">\n {{data.Key}}\n </mat-checkbox>\n </div>\n\n <!-- VISUALIZZAZIONE A PULSANTI (CON TESTO) -->\n <div class=\"d-inline-block\" *ngIf=\"field.PresentationMode == ListPresentationEnum['Pulsante con testo']\">\n <button mat-raised-button color=\"primary\" class=\"btn btn-primary mr-2\" *ngFor=\"let data of arrayData\"\n (click)=\"buttonSelectClick(data)\" [ngClass]=\"getSelectButtonClass(data)\"\n [disabled]=\"field.FormFormGroup.disabled\">\n {{data.Key}}\n </button>\n </div>\n\n <!-- TODO: VISUALIZZAZIONE A PULSANTI (CON IMMAGINI) ?? -->\n</div>",
114
+ styles: [".selected-button{opacity:.7}.selected-button:disabled{background-color:var(--primary)!important;opacity:.3;color:#fff}"]
115
+ })
116
+ ], ListValueFieldTemplateComponent);
117
+ export { ListValueFieldTemplateComponent };
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZXFwcm9qZWN0L2VxcC1keW5hbWljLW1vZHVsZS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUV6RyxPQUFPLEVBQUUsb0JBQW9CLEVBQWtCLE1BQU0sZ0RBQWdELENBQUM7QUFFdEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFPbkYsSUFBYSwrQkFBK0IsR0FBNUMsTUFBYSwrQkFBK0I7SUFTMUM7UUFMVSxpQkFBWSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRTFFLHlCQUFvQixHQUFHLG9CQUFvQixDQUFDO1FBQzVDLGNBQVMsR0FBc0QsRUFBRSxDQUFDO0lBRWxELENBQUM7SUFFakIsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzlELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDbkM7UUFDRCxtRUFBbUU7UUFDbkUsb0VBQW9FO1FBQ3BFLHNFQUFzRTtRQUN0RSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLDBFQUEwRTtR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LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBMaXN0UHJlc2VudGF0aW9uRW51bSwgTGlzdFZhbHVlRmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSUJhc2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXN0VmFsdWVGaWVsZFRlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIElCYXNlRmllbGRDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBmaWVsZDogTGlzdFZhbHVlRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuXHJcbiAgTGlzdFByZXNlbnRhdGlvbkVudW0gPSBMaXN0UHJlc2VudGF0aW9uRW51bTtcclxuICBhcnJheURhdGE6IHsgS2V5OiBzdHJpbmcsIFZhbHVlOiBhbnksIFNlbGVjdGVkPzogYm9vbGVhbiB9W10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEFycmF5RGF0YSgpO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUgJiYgIXRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0pIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IFtdO1xyXG4gICAgfVxyXG4gICAgLy8gTmVsIGNhc28gaW4gY3VpIHNvbm8gaW4gbW9kaWZpY2EgZGkgdW4gUmVjb3JkIGFnZ2lvcm5vIGlsIHZhbG9yZVxyXG4gICAgLy8gZSBpbCB2YWxpZGF0b3IgZGVsIEZvcm1Db250cm9sLiBTZSBub24gdmllbmUgZXNlZ3VpdGEgcXVlc3RhIHJpZ2FcclxuICAgIC8vIGwndXRlbnRlIGRldmUgbW9kaWZpY2FyZSBsYSBzZWxlemlvbmUgZmF0dGEgcGVyIGFnZ2lvcm5hcmUgbGEgZm9ybS5cclxuICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgLy8gU2UgdmllbmUgbW9kaWZpY2F0byBpbCB2YWxvcmUgZGkgXCJuZ01vZGVsSW5wdXRcIiBhbGxvcmEgYWdnaW9ybmEgbCdpbnB1dFxyXG4gICAgaWYgKGNoYW5nZXNbJ3JlY29yZCddICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VzWydyZWNvcmQnXS5maXJzdENoYW5nZSA9PSBmYWxzZSAmJiBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3JlY29yZCddLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkID0gY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFnZ2lvcm5hcmUgaWwgdmFsb3JlIGRlbCBjYW1wbyBxdWFuZG8gcXVlc3RvIMOoIHJhcHByZXNlbnRhdG8gZGEgdW5hIGZvcm11bGEuXHJcbiAgICovXHJcbiAgdXBkYXRlRmllbGQoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCBudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSBsYSBjbGFzc2UgZGEgYXBwbGljYXJlIGFsIGJ1dHRvbiAobmVsbGEgcmVsYXRpdmEgdmlzdWFsaXp6YXppb25lKS5cclxuICAgKiBTZSBpbCBwdWxzYW50ZSDDqCBzdGF0byBzZWxlemlvbmF0byBpbXBvc3RhIGxhIGNsYXNzZSBcInNlbGVjdGVkLWJ1dHRvblwiLlxyXG4gICAqIEBwYXJhbSBkYXRhIE9nZ2V0dG8gYmluZGF0byBhbCBwdWxzYW50ZVxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIGxhIGNsYXNzZSBkYSBhcHBsaWNhcmUgdHJhbWl0ZSBbbmdDbGFzc11cclxuICAgKi9cclxuICBnZXRTZWxlY3RCdXR0b25DbGFzcyhkYXRhOiB7IEtleTogc3RyaW5nLCBWYWx1ZTogYW55LCBTZWxlY3RlZD86IGJvb2xlYW4gfSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEJ1dHRvbkNsYXNzOiBzdHJpbmcgPSBcInNlbGVjdGVkLWJ1dHRvblwiO1xyXG4gICAgcmV0dXJuIGRhdGEuU2VsZWN0ZWQgPyBzZWxlY3RlZEJ1dHRvbkNsYXNzIDogbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBxdWFuZG8gdmllbmUgc2VsZXppb25hdGEgdW4nb3B6aW9uZSBuZWxsYSB2aXN1YWxpenphemlvbmUgYSBidXR0b25cclxuICAgKiBAcGFyYW0gZGF0YSBSYXBwcmVzZW50YSBsJ29nZ2V0dG8gc2VsZXppb25hdG9cclxuICAgKi9cclxuICBidXR0b25TZWxlY3RDbGljayhkYXRhOiB7IEtleTogc3RyaW5nLCBWYWx1ZTogYW55LCBTZWxlY3RlZD86IGJvb2xlYW4gfSkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUpIHtcclxuICAgICAgZGF0YS5TZWxlY3RlZCA9ICFkYXRhLlNlbGVjdGVkO1xyXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKGZhbHNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBkYXRhLlZhbHVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vblJlY29yZFZhbHVlQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFnZ2lvcm5hcmUgaWwvaSB2YWxvcmUvaSBzZWxlemlvbmF0by9pIGRhbGwndXRlbnRlLlxyXG4gICAqIEBwYXJhbSBlbWl0Q2hhbmdlIFNlIHRydWUgc2NhdGVuYSBsJ2V2ZW50byBkaSBvdXRwdXQgZGVsbGEgbW9kaWZpY2EgZGVsIHZhbG9yZSBkaSByZWNvcmRcclxuICAgKi9cclxuICB1cGRhdGVTZWxlY3RlZChlbWl0Q2hhbmdlOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IHRoaXMuYXJyYXlEYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuU2VsZWN0ZWQpLm1hcChkYXRhID0+IGRhdGEuVmFsdWUpO1xyXG4gICAgdGhpcy5zZXRGb3JtQ29udHJvbFZhbHVlKCk7XHJcbiAgICBpZiAoZW1pdENoYW5nZSkge1xyXG4gICAgICB0aGlzLm9uUmVjb3JkVmFsdWVDaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZW1ldHRlcmUgbCdldmVudG8gY2hlIGlsIHZhbG9yZSBkZWwgcmVjb3JkIMOoIGNhbWJpYXRvLlxyXG4gICAqL1xyXG4gIG9uUmVjb3JkVmFsdWVDaGFuZ2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGQuRm9ybXVsYSkge1xyXG4gICAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIHVuIGFycmF5IGRpIG9nZ2V0dGkgZGVsIHRpcG8geyBLZXk6IHN0cmluZywgVmFsdWU6IGFueSB9IGRhIHVzYXJlIGNvbWUgc29yZ2VudGUgZGF0aSBwZXIgbGEgZXFwLXNlbGVjdC5cclxuICAgKi9cclxuICBwcml2YXRlIHNldEFycmF5RGF0YSgpIHtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGQuVmFsdWVQYWlycykuZm9yRWFjaChrID0+IHtcclxuICAgICAgdmFyIGlzT3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICAgIGlmICh0aGlzLmZpZWxkLklzTXVsdGlDaG9pY2hlICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gJiYgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaXNPcHRpb25TZWxlY3RlZCA9ICEhdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5maW5kKHYgPT4gdiA9PSB0aGlzLmZpZWxkLlZhbHVlUGFpcnNba10pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09PSB0aGlzLmZpZWxkLlZhbHVlUGFpcnNba107XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hcnJheURhdGEucHVzaCh7IEtleTogaywgVmFsdWU6IHRoaXMuZmllbGQuVmFsdWVQYWlyc1trXSwgU2VsZWN0ZWQ6IGlzT3B0aW9uU2VsZWN0ZWQgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZSBpbCB2YWxpZGF0b3IgZGVsIEZvcm1Db250cm9sIGFzc29jaWF0byBhbCBjYW1wby5cclxuICAgKi9cclxuICBwcml2YXRlIHNldEZvcm1Db250cm9sVmFsdWUoKSB7XHJcbiAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5OYW1lXS5zZXRWYWx1ZSh0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdKTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,63 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { UtilityHelperService } from '../../../../services/utilityHelper.services';
4
+ let NumericFieldTemplateComponent = class NumericFieldTemplateComponent {
5
+ constructor() {
6
+ this.recordChange = new EventEmitter();
7
+ this.eqpNumericOptions = {};
8
+ }
9
+ ngOnInit() {
10
+ this.configureEqpNumericOptions();
11
+ }
12
+ ngOnChanges(changes) {
13
+ // Se viene modificato il valore di "ngModelInput" allora aggiorna l'input
14
+ if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {
15
+ this.record = changes['record'].currentValue;
16
+ this.updateField();
17
+ }
18
+ }
19
+ /**
20
+ * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.
21
+ */
22
+ updateField() {
23
+ if (this.field.Formula) {
24
+ this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);
25
+ }
26
+ }
27
+ /**
28
+ * Metodo per emettere l'evento che il valore del record è cambiato.
29
+ */
30
+ onRecordValueChange() {
31
+ if (!this.field.Formula) {
32
+ this.recordChange.emit(this.record);
33
+ }
34
+ }
35
+ /**
36
+ * Metodo per configurare eqp-numeric
37
+ */
38
+ configureEqpNumericOptions() {
39
+ this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol : "";
40
+ if (this.field.MinValue != null && this.field.MinValue != undefined)
41
+ this.eqpNumericOptions.min = this.field.MinValue;
42
+ if (this.field.MaxValue != null && this.field.MaxValue != undefined)
43
+ this.eqpNumericOptions.max = this.field.MaxValue;
44
+ }
45
+ };
46
+ __decorate([
47
+ Input()
48
+ ], NumericFieldTemplateComponent.prototype, "field", void 0);
49
+ __decorate([
50
+ Input()
51
+ ], NumericFieldTemplateComponent.prototype, "record", void 0);
52
+ __decorate([
53
+ Output()
54
+ ], NumericFieldTemplateComponent.prototype, "recordChange", void 0);
55
+ NumericFieldTemplateComponent = __decorate([
56
+ Component({
57
+ selector: 'numeric-field-template',
58
+ template: "<mat-form-field [formGroup]=\"field.FormFormGroup\">\n <mat-label> {{field.Label}} </mat-label>\n <input matInput eqpNumericMask [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\"\n [required]=\"field.Required\" [(ngModel)]=\"record[field.Name]\" [options]=\"eqpNumericOptions\"\n [step]=\"field.IsInteger ? 1 : null\" (ngModelChange)=\"onRecordValueChange()\" />\n</mat-form-field>",
59
+ styles: [""]
60
+ })
61
+ ], NumericFieldTemplateComponent);
62
+ export { NumericFieldTemplateComponent };
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtZXJpYy1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZXFwcm9qZWN0L2VxcC1keW5hbWljLW1vZHVsZS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL251bWVyaWMtZmllbGQtdGVtcGxhdGUvbnVtZXJpYy1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUV6RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQVVuRixJQUFhLDZCQUE2QixHQUExQyxNQUFhLDZCQUE2QjtJQVF4QztRQUpVLGlCQUFZLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFFMUUsc0JBQWlCLEdBQStCLEVBQUUsQ0FBQztJQUVuQyxDQUFDO0lBRWpCLFFBQVE7UUFDTixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLDBFQUEwRTtRQUMxRSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxTQUFTLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDakwsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQzdDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2pIO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSywwQkFBMEI7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzRixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxTQUFTO1lBQ2pFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDbkQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksU0FBUztZQUNqRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ3JELENBQUM7Q0FDRixDQUFBO0FBaERVO0lBQVIsS0FBSyxFQUFFOzREQUFxQjtBQUNwQjtJQUFSLEtBQUssRUFBRTs2REFBZ0I7QUFDZDtJQUFULE1BQU0sRUFBRTttRUFBaUU7QUFKL0QsNkJBQTZCO0lBTHpDLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSx3QkFBd0I7UUFDbEMsd2JBQXNEOztLQUV2RCxDQUFDO0dBQ1csNkJBQTZCLENBa0R6QztTQWxEWSw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTnVtZXJpY01hc2tDb25maWcgfSBmcm9tICdAZXFwcm9qZWN0L2VxcC1udW1lcmljJztcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSUJhc2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdudW1lcmljLWZpZWxkLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbnVtZXJpYy1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbnVtZXJpYy1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljRmllbGRUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBJQmFzZUZpZWxkQ29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgZmllbGQ6IE51bWVyaWNGaWVsZDtcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZDtcclxuICBAT3V0cHV0KCkgcmVjb3JkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG5cclxuICBlcXBOdW1lcmljT3B0aW9uczogUGFydGlhbDxOdW1lcmljTWFza0NvbmZpZz4gPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUVxcE51bWVyaWNPcHRpb25zKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAvLyBTZSB2aWVuZSBtb2RpZmljYXRvIGlsIHZhbG9yZSBkaSBcIm5nTW9kZWxJbnB1dFwiIGFsbG9yYSBhZ2dpb3JuYSBsJ2lucHV0XHJcbiAgICBpZiAoY2hhbmdlc1sncmVjb3JkJ10gIT0gdW5kZWZpbmVkICYmIGNoYW5nZXNbJ3JlY29yZCddLmZpcnN0Q2hhbmdlID09IGZhbHNlICYmIEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZSkgIT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10ucHJldmlvdXNWYWx1ZSkpIHtcclxuICAgICAgdGhpcy5yZWNvcmQgPSBjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMudXBkYXRlRmllbGQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZGVsIGNhbXBvIHF1YW5kbyBxdWVzdG8gw6ggcmFwcHJlc2VudGF0byBkYSB1bmEgZm9ybXVsYS5cclxuICAgKi9cclxuICB1cGRhdGVGaWVsZCgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuRm9ybXVsYSwgdGhpcy5yZWNvcmQsIG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBlbWV0dGVyZSBsJ2V2ZW50byBjaGUgaWwgdmFsb3JlIGRlbCByZWNvcmQgw6ggY2FtYmlhdG8uXHJcbiAgICovXHJcbiAgb25SZWNvcmRWYWx1ZUNoYW5nZSgpIHtcclxuICAgIGlmICghdGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBlcXAtbnVtZXJpY1xyXG4gICAqL1xyXG4gIHByaXZhdGUgY29uZmlndXJlRXFwTnVtZXJpY09wdGlvbnMoKSB7XHJcbiAgICB0aGlzLmVxcE51bWVyaWNPcHRpb25zLnByZWZpeCA9IHRoaXMuZmllbGQuQ3VycmVuY3lTeW1ib2wgPyB0aGlzLmZpZWxkLkN1cnJlbmN5U3ltYm9sIDogXCJcIjtcclxuICAgIGlmICh0aGlzLmZpZWxkLk1pblZhbHVlICE9IG51bGwgJiYgdGhpcy5maWVsZC5NaW5WYWx1ZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuZXFwTnVtZXJpY09wdGlvbnMubWluID0gdGhpcy5maWVsZC5NaW5WYWx1ZTtcclxuICAgIGlmICh0aGlzLmZpZWxkLk1heFZhbHVlICE9IG51bGwgJiYgdGhpcy5maWVsZC5NYXhWYWx1ZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuZXFwTnVtZXJpY09wdGlvbnMubWF4ID0gdGhpcy5maWVsZC5NYXhWYWx1ZTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,51 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { UtilityHelperService } from '../../../../services/utilityHelper.services';
4
+ let TextFieldTemplateComponent = class TextFieldTemplateComponent {
5
+ constructor() {
6
+ this.recordChange = new EventEmitter();
7
+ }
8
+ ngOnInit() {
9
+ }
10
+ ngOnChanges(changes) {
11
+ // Se viene modificato il valore di "ngModelInput" allora aggiorna l'input
12
+ if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {
13
+ this.record = changes['record'].currentValue;
14
+ this.updateField();
15
+ }
16
+ }
17
+ /**
18
+ * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.
19
+ */
20
+ updateField() {
21
+ if (this.field.Formula) {
22
+ this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);
23
+ }
24
+ }
25
+ /**
26
+ * Metodo per emettere l'evento che il valore del record è cambiato.
27
+ */
28
+ onRecordValueChange() {
29
+ if (!this.field.Formula) {
30
+ this.recordChange.emit(this.record);
31
+ }
32
+ }
33
+ };
34
+ __decorate([
35
+ Input()
36
+ ], TextFieldTemplateComponent.prototype, "field", void 0);
37
+ __decorate([
38
+ Input()
39
+ ], TextFieldTemplateComponent.prototype, "record", void 0);
40
+ __decorate([
41
+ Output()
42
+ ], TextFieldTemplateComponent.prototype, "recordChange", void 0);
43
+ TextFieldTemplateComponent = __decorate([
44
+ Component({
45
+ selector: 'text-field-template',
46
+ template: "<mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n <mat-label> {{field.Label}} </mat-label>\r\n <input matInput type=\"text\" [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\"\r\n [required]=\"field.Required\" [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n</mat-form-field>",
47
+ styles: [""]
48
+ })
49
+ ], TextFieldTemplateComponent);
50
+ export { TextFieldTemplateComponent };
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZXFwcm9qZWN0L2VxcC1keW5hbWljLW1vZHVsZS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL3RleHQtZmllbGQtdGVtcGxhdGUvdGV4dC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUl6RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQU9uRixJQUFhLDBCQUEwQixHQUF2QyxNQUFhLDBCQUEwQjtJQU1yQztRQUZVLGlCQUFZLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7SUFFMUQsQ0FBQztJQUVqQixRQUFRO0lBQ1IsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQywwRUFBMEU7UUFDMUUsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksU0FBUyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ2pMLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUM3QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNqSDtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztDQUNGLENBQUE7QUFsQ1U7SUFBUixLQUFLLEVBQUU7eURBQWtCO0FBQ2pCO0lBQVIsS0FBSyxFQUFFOzBEQUFnQjtBQUNkO0lBQVQsTUFBTSxFQUFFO2dFQUFpRTtBQUovRCwwQkFBMEI7SUFMdEMsU0FBUyxDQUFDO1FBQ1QsUUFBUSxFQUFFLHFCQUFxQjtRQUMvQiw4V0FBbUQ7O0tBRXBELENBQUM7R0FDVywwQkFBMEIsQ0FvQ3RDO1NBcENZLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgVGV4dEZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy90ZXh0RmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBJQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RleHQtZmllbGQtdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0LWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90ZXh0LWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRleHRGaWVsZFRlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIElCYXNlRmllbGRDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBmaWVsZDogVGV4dEZpZWxkO1xyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBPdXRwdXQoKSByZWNvcmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgLy8gU2UgdmllbmUgbW9kaWZpY2F0byBpbCB2YWxvcmUgZGkgXCJuZ01vZGVsSW5wdXRcIiBhbGxvcmEgYWdnaW9ybmEgbCdpbnB1dFxyXG4gICAgaWYgKGNoYW5nZXNbJ3JlY29yZCddICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VzWydyZWNvcmQnXS5maXJzdENoYW5nZSA9PSBmYWxzZSAmJiBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3JlY29yZCddLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkID0gY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFnZ2lvcm5hcmUgaWwgdmFsb3JlIGRlbCBjYW1wbyBxdWFuZG8gcXVlc3RvIMOoIHJhcHByZXNlbnRhdG8gZGEgdW5hIGZvcm11bGEuXHJcbiAgICovXHJcbiAgdXBkYXRlRmllbGQoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCBudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZW1ldHRlcmUgbCdldmVudG8gY2hlIGlsIHZhbG9yZSBkZWwgcmVjb3JkIMOoIGNhbWJpYXRvLlxyXG4gICAqL1xyXG4gIG9uUmVjb3JkVmFsdWVDaGFuZ2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGQuRm9ybXVsYSkge1xyXG4gICAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,51 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { UtilityHelperService } from '../../../../services/utilityHelper.services';
4
+ let TextareaFieldTemplateComponent = class TextareaFieldTemplateComponent {
5
+ constructor() {
6
+ this.recordChange = new EventEmitter();
7
+ }
8
+ ngOnInit() {
9
+ }
10
+ ngOnChanges(changes) {
11
+ // Se viene modificato il valore di "ngModelInput" allora aggiorna l'input
12
+ if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {
13
+ this.record = changes['record'].currentValue;
14
+ this.updateField();
15
+ }
16
+ }
17
+ /**
18
+ * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.
19
+ */
20
+ updateField() {
21
+ if (this.field.Formula) {
22
+ this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);
23
+ }
24
+ }
25
+ /**
26
+ * Metodo per emettere l'evento che il valore del record è cambiato.
27
+ */
28
+ onRecordValueChange() {
29
+ if (!this.field.Formula) {
30
+ this.recordChange.emit(this.record);
31
+ }
32
+ }
33
+ };
34
+ __decorate([
35
+ Input()
36
+ ], TextareaFieldTemplateComponent.prototype, "field", void 0);
37
+ __decorate([
38
+ Input()
39
+ ], TextareaFieldTemplateComponent.prototype, "record", void 0);
40
+ __decorate([
41
+ Output()
42
+ ], TextareaFieldTemplateComponent.prototype, "recordChange", void 0);
43
+ TextareaFieldTemplateComponent = __decorate([
44
+ Component({
45
+ selector: 'textarea-field-template',
46
+ template: "<mat-form-field [formGroup]=\"field.FormFormGroup\">\n <textarea matInput [placeholder]=\"field.Label\" [rows]=\"field.Rows\" [formControlName]=\"field.Name\"\n [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\" [(ngModel)]=\"record[field.Name]\"\n (ngModelChange)=\"onRecordValueChange()\"></textarea>\n</mat-form-field>",
47
+ styles: [""]
48
+ })
49
+ ], TextareaFieldTemplateComponent);
50
+ export { TextareaFieldTemplateComponent };
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGVxcHJvamVjdC9lcXAtZHluYW1pYy1tb2R1bGUvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy90ZXh0YXJlYS1maWVsZC10ZW1wbGF0ZS90ZXh0YXJlYS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUV6RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQVNuRixJQUFhLDhCQUE4QixHQUEzQyxNQUFhLDhCQUE4QjtJQU16QztRQUZVLGlCQUFZLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7SUFFMUQsQ0FBQztJQUVqQixRQUFRO0lBQ1IsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQywwRUFBMEU7UUFDMUUsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksU0FBUyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ2pMLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUM3QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNqSDtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztDQUNGLENBQUE7QUFsQ1U7SUFBUixLQUFLLEVBQUU7NkRBQXNCO0FBQ3JCO0lBQVIsS0FBSyxFQUFFOzhEQUFnQjtBQUNkO0lBQVQsTUFBTSxFQUFFO29FQUFpRTtBQUovRCw4QkFBOEI7SUFMMUMsU0FBUyxDQUFDO1FBQ1QsUUFBUSxFQUFFLHlCQUF5QjtRQUNuQyxxWEFBdUQ7O0tBRXhELENBQUM7R0FDVyw4QkFBOEIsQ0FvQzFDO1NBcENZLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBUZXh0YXJlYUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy90ZXN0YXJlYUZpZWxkLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGV4dGFyZWEtZmllbGQtdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0YXJlYS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dGFyZWEtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dGFyZWFGaWVsZFRlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIElCYXNlRmllbGRDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBmaWVsZDogVGV4dGFyZWFGaWVsZDtcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZDtcclxuICBAT3V0cHV0KCkgcmVjb3JkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIC8vIFNlIHZpZW5lIG1vZGlmaWNhdG8gaWwgdmFsb3JlIGRpIFwibmdNb2RlbElucHV0XCIgYWxsb3JhIGFnZ2lvcm5hIGwnaW5wdXRcclxuICAgIGlmIChjaGFuZ2VzWydyZWNvcmQnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1sncmVjb3JkJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlKSAhPSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkZWwgY2FtcG8gcXVhbmRvIHF1ZXN0byDDqCByYXBwcmVzZW50YXRvIGRhIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRm9ybXVsYSkge1xyXG4gICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5Gb3JtdWxhLCB0aGlzLnJlY29yZCwgbnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVtZXR0ZXJlIGwnZXZlbnRvIGNoZSBpbCB2YWxvcmUgZGVsIHJlY29yZCDDqCBjYW1iaWF0by5cclxuICAgKi9cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKCkge1xyXG4gICAgaWYgKCF0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,126 @@
1
+ import { __decorate } from "tslib";
2
+ import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core';
3
+ import { DynamicModuleFieldComponent, UtilityHelperService } from 'projects/eqp-dynamic-module/src/public-api';
4
+ import { FieldTypeEnum } from '../../../../models/baseField.model';
5
+ import { Form, FormScalarTypeEnum } from '../../../../models/form.model';
6
+ import { Record } from '../../../../models/record.model';
7
+ let AddFormRecordComponent = class AddFormRecordComponent {
8
+ constructor(cdr, utilityService) {
9
+ this.cdr = cdr;
10
+ this.utilityService = utilityService;
11
+ this.showButtons = true;
12
+ this.form = new Form();
13
+ this.fieldGroups = {};
14
+ this.FormScalarTypeEnum = FormScalarTypeEnum;
15
+ this.FieldTypeEnum = FieldTypeEnum;
16
+ this.saveRecordEvent = new EventEmitter();
17
+ }
18
+ ngOnInit() {
19
+ if (this.record == null) {
20
+ this.record = new Record();
21
+ }
22
+ this.createRecordProperties();
23
+ this.reorderFormFields();
24
+ this.createFormGroup();
25
+ if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {
26
+ this.createFieldGroups();
27
+ }
28
+ this.cdr.detectChanges();
29
+ }
30
+ /**
31
+ * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.
32
+ * Serve ad aggiornare il valore di tutti i campi che hanno una formula.
33
+ */
34
+ onRecordChange() {
35
+ if (this.fieldTemplate && this.fieldTemplate.length > 0) {
36
+ this.fieldTemplate.forEach(f => f.updateField());
37
+ }
38
+ }
39
+ /**
40
+ * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.
41
+ */
42
+ saveOrExitForm(exit) {
43
+ if (exit) {
44
+ this.saveRecordEvent.emit(null);
45
+ }
46
+ else {
47
+ this.saveRecordEvent.emit(this.record);
48
+ }
49
+ }
50
+ /**
51
+ * Metodo per creare nell'oggetto Record le proprietà mancanti rispetto ai campi che compongono la form.
52
+ */
53
+ createRecordProperties() {
54
+ const recordProperties = Object.keys(this.record);
55
+ this.form.Fields.forEach(field => {
56
+ if (!recordProperties.find(p => p === field.Name)) {
57
+ this.record[field.Name] = null;
58
+ }
59
+ });
60
+ if (this.form.InnerForms && this.form.InnerForms.length > 0) {
61
+ this.form.InnerForms.forEach(form => {
62
+ const arrayName = form.Name.split(" ").join("_");
63
+ if (!recordProperties.find(p => p === arrayName)) {
64
+ this.record[arrayName] = [];
65
+ }
66
+ });
67
+ }
68
+ }
69
+ /**
70
+ * Metodo per riordinare i campi che compongono la form.
71
+ */
72
+ reorderFormFields() {
73
+ if (this.form.Fields && this.form.Fields.length > 0) {
74
+ this.form.Fields.sort((a, b) => (a.OrdinalPosition > b.OrdinalPosition) ? 1 : ((b.OrdinalPosition > a.OrdinalPosition) ? -1 : 0));
75
+ }
76
+ }
77
+ /**
78
+ * Metodo per creare il FormGroup che rappresenta la form.
79
+ */
80
+ createFormGroup() {
81
+ this.formForm = this.utilityService.CreateFormFormGroup(this.form.Fields, this.record, this.onlyView);
82
+ }
83
+ /**
84
+ * Metodo per creare i gruppi in cui raggruppare i campi della form in base
85
+ * a come è stata configurata dall'utente.
86
+ */
87
+ createFieldGroups() {
88
+ this.form.FormFieldsGroups
89
+ .sort((a, b) => (a.OrdinalPosition > b.OrdinalPosition) ? 1 : ((b.OrdinalPosition > a.OrdinalPosition) ? -1 : 0))
90
+ .map(g => g.Name)
91
+ .forEach(groupName => {
92
+ this.fieldGroups[groupName] = this.form.Fields.filter(f => f.FieldGroup == groupName);
93
+ });
94
+ }
95
+ };
96
+ AddFormRecordComponent.ctorParameters = () => [
97
+ { type: ChangeDetectorRef },
98
+ { type: UtilityHelperService }
99
+ ];
100
+ __decorate([
101
+ Input()
102
+ ], AddFormRecordComponent.prototype, "showButtons", void 0);
103
+ __decorate([
104
+ Input()
105
+ ], AddFormRecordComponent.prototype, "form", void 0);
106
+ __decorate([
107
+ Input()
108
+ ], AddFormRecordComponent.prototype, "record", void 0);
109
+ __decorate([
110
+ Input()
111
+ ], AddFormRecordComponent.prototype, "onlyView", void 0);
112
+ __decorate([
113
+ Output()
114
+ ], AddFormRecordComponent.prototype, "saveRecordEvent", void 0);
115
+ __decorate([
116
+ ViewChildren("fieldTemplate")
117
+ ], AddFormRecordComponent.prototype, "fieldTemplate", void 0);
118
+ AddFormRecordComponent = __decorate([
119
+ Component({
120
+ selector: 'add-form-record',
121
+ template: "<div class=\"row eqp-dynamic-module-title\">\n <div class=\"col-md-12 text-center\">\n <h4><b>{{form.Name}}</b></h4>\n </div>\n</div>\n\n<form [formGroup]=\"formForm\">\n\n <!-- VISUALIZZAZIONE SEMPLICE -->\n <ng-container *ngIf=\"form.FormScalarType == FormScalarTypeEnum.Semplice\" [ngTemplateOutlet]=\"fieldTemplates\"\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\">\n </ng-container>\n\n <!-- VISUALIZZAZIONE A STEPPER -->\n <mat-horizontal-stepper linear *ngIf=\"form.FormScalarType == FormScalarTypeEnum['A step']\">\n <mat-step *ngFor=\"let group of form.FormFieldsGroups\">\n <ng-template matStepLabel>\n {{group.Name}}\n </ng-template>\n\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\n </ng-container>\n </mat-step>\n </mat-horizontal-stepper>\n\n <!-- VISUALIZZAZIONE A TAB -->\n <mat-tab-group *ngIf=\"form.FormScalarType == FormScalarTypeEnum['In tab']\">\n <mat-tab *ngFor=\"let group of form.FormFieldsGroups\" [label]=\"group.Name\">\n <div class=\"mt-3\">\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\n </ng-container>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <!-- VISUALIZZAZIONE AD ACCORDION -->\n <mat-accordion multi *ngIf=\"form.FormScalarType == FormScalarTypeEnum['In accordion']\">\n <mat-expansion-panel *ngFor=\"let group of form.FormFieldsGroups\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{group.Name}}\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\n </ng-container>\n </mat-expansion-panel>\n </mat-accordion>\n</form>\n\n<div class=\"row mt-2\" *ngIf=\"showButtons\">\n <div class=\"col-sm-12 text-right\">\n <button class=\"mr-2\" mat-raised-button (click)=\"saveOrExitForm(true)\" type=\"button\">\n Annulla\n </button>\n <button class=\"mr-2\" mat-raised-button color=\"primary\" (click)=\"saveOrExitForm(false)\"\n [disabled]=\"formForm.invalid || formForm.disabled\" type=\"button\">\n Salva\n </button>\n </div>\n</div>\n\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\n<ng-template #fieldTemplates let-fields='fields'>\n <div class=\"row\">\n <div class=\"mt-2\" *ngFor=\"let field of fields\" [ngClass]=\"utilityService.getFieldSyleClass(field)\">\n <dynamic-module-field #fieldTemplate [field]=\"field\" [form]=\"form\" [record]=\"record\" (recordChange)=\"onRecordChange()\"></dynamic-module-field>\n </div>\n </div>\n</ng-template>",
122
+ styles: [""]
123
+ })
124
+ ], AddFormRecordComponent);
125
+ export { AddFormRecordComponent };
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BlcXByb2plY3QvZXFwLWR5bmFtaWMtbW9kdWxlLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvYWRkLWZvcm0tcmVjb3JkL2FkZC1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0gsT0FBTyxFQUFFLDJCQUEyQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDL0csT0FBTyxFQUFhLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFPekQsSUFBYSxzQkFBc0IsR0FBbkMsTUFBYSxzQkFBc0I7SUFlakMsWUFDVSxHQUFzQixFQUN2QixjQUFvQztRQURuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN2QixtQkFBYyxHQUFkLGNBQWMsQ0FBc0I7UUFmcEMsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsU0FBSSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFJakMsZ0JBQVcsR0FBd0MsRUFBRSxDQUFDO1FBQ3RELHVCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQ3hDLGtCQUFhLEdBQUcsYUFBYSxDQUFDO1FBRXBCLG9CQUFlLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7SUFPekUsQ0FBQztJQUVMLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO1lB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QU1qQjtJQUFULE1BQU0sRUFBRTsrREFBb0U7QUFFOUM7SUFBOUIsWUFBWSxDQUFDLGVBQWUsQ0FBQzs2REFBdUQ7QUFiMUUsc0JBQXNCO0lBTGxDLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxpQkFBaUI7UUFDM0Iscy9GQUErQzs7S0FFaEQsQ0FBQztHQUNXLHNCQUFzQixDQXNHbEM7U0F0R1ksc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUZpZWxkQ29tcG9uZW50LCBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJ3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvcHVibGljLWFwaSc7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtLCBGb3JtU2NhbGFyVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhZGQtZm9ybS1yZWNvcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FkZC1mb3JtLXJlY29yZC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRGb3JtUmVjb3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgc2hvd0J1dHRvbnMgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBJbnB1dCgpIG9ubHlWaWV3OiBib29sZWFuO1xyXG4gIGZvcm1Gb3JtOiBGb3JtR3JvdXA7XHJcbiAgZmllbGRHcm91cHM6IHsgW2tleTogc3RyaW5nXTogQXJyYXk8QmFzZUZpZWxkPiB9ID0ge307XHJcbiAgRm9ybVNjYWxhclR5cGVFbnVtID0gRm9ybVNjYWxhclR5cGVFbnVtO1xyXG4gIEZpZWxkVHlwZUVudW0gPSBGaWVsZFR5cGVFbnVtO1xyXG5cclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZEV2ZW50OiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFwiZmllbGRUZW1wbGF0ZVwiKSBmaWVsZFRlbXBsYXRlOiBRdWVyeUxpc3Q8RHluYW1pY01vZHVsZUZpZWxkQ29tcG9uZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZWNvcmQgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgIH1cclxuICAgIHRoaXMuY3JlYXRlUmVjb3JkUHJvcGVydGllcygpO1xyXG4gICAgdGhpcy5yZW9yZGVyRm9ybUZpZWxkcygpO1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtR3JvdXAoKTtcclxuICAgIGlmICh0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cHMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBjYW1iaW8gZGVsIHZhbG9yZSBkaSBvZ25pIHByb3ByaWV0w6AgZGVsbCdvZ2dldHRvIHJlY29yZC5cclxuICAgKiBTZXJ2ZSBhZCBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkaSB0dXR0aSBpIGNhbXBpIGNoZSBoYW5ubyB1bmEgZm9ybXVsYS5cclxuICAgKi9cclxuICBvblJlY29yZENoYW5nZSgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkVGVtcGxhdGUgJiYgdGhpcy5maWVsZFRlbXBsYXRlLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5maWVsZFRlbXBsYXRlLmZvckVhY2goZiA9PiBmLnVwZGF0ZUZpZWxkKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGkgZGF0aSBpbnNlcml0aSBkYWxsJ3V0ZW50ZSB1bmEgdm9sdGEgY29uY2x1c2EgbGEgY29tcGlsYXppb25lIGRlbGxhIGZvcm0uXHJcbiAgICovXHJcbiAgc2F2ZU9yRXhpdEZvcm0oZXhpdDogYm9vbGVhbikge1xyXG4gICAgaWYgKGV4aXQpIHtcclxuICAgICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChudWxsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgbmVsbCdvZ2dldHRvIFJlY29yZCBsZSBwcm9wcmlldMOgIG1hbmNhbnRpIHJpc3BldHRvIGFpIGNhbXBpIGNoZSBjb21wb25nb25vIGxhIGZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVSZWNvcmRQcm9wZXJ0aWVzKCkge1xyXG4gICAgY29uc3QgcmVjb3JkUHJvcGVydGllczogQXJyYXk8c3RyaW5nPiA9IE9iamVjdC5rZXlzKHRoaXMucmVjb3JkKTtcclxuICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGlmICghcmVjb3JkUHJvcGVydGllcy5maW5kKHAgPT4gcCA9PT0gZmllbGQuTmFtZSkpIHtcclxuICAgICAgICB0aGlzLnJlY29yZFtmaWVsZC5OYW1lXSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Jbm5lckZvcm1zICYmIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMuZm9yRWFjaChmb3JtID0+IHtcclxuICAgICAgICBjb25zdCBhcnJheU5hbWU6IHN0cmluZyA9IGZvcm0uTmFtZS5zcGxpdChcIiBcIikuam9pbihcIl9cIik7XHJcbiAgICAgICAgaWYgKCFyZWNvcmRQcm9wZXJ0aWVzLmZpbmQocCA9PiBwID09PSBhcnJheU5hbWUpKSB7XHJcbiAgICAgICAgICB0aGlzLnJlY29yZFthcnJheU5hbWVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmlvcmRpbmFyZSBpIGNhbXBpIGNoZSBjb21wb25nb25vIGxhIGZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZW9yZGVyRm9ybUZpZWxkcygpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uRmllbGRzICYmIHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLnNvcnQoKGEsIGIpID0+IChhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uKSA/IDEgOiAoKGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb24pID8gLTEgOiAwKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBpbCBGb3JtR3JvdXAgY2hlIHJhcHByZXNlbnRhIGxhIGZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtR3JvdXAoKSB7XHJcbiAgICB0aGlzLmZvcm1Gb3JtID0gdGhpcy51dGlsaXR5U2VydmljZS5DcmVhdGVGb3JtRm9ybUdyb3VwKHRoaXMuZm9ybS5GaWVsZHMsIHRoaXMucmVjb3JkLCB0aGlzLm9ubHlWaWV3KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGkgZ3J1cHBpIGluIGN1aSByYWdncnVwcGFyZSBpIGNhbXBpIGRlbGxhIGZvcm0gaW4gYmFzZSBcclxuICAgKiBhIGNvbWUgw6ggc3RhdGEgY29uZmlndXJhdGEgZGFsbCd1dGVudGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWVsZEdyb3VwcygpIHtcclxuICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvbikgPyAxIDogKChiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uKSA/IC0xIDogMCkpXHJcbiAgICAgIC5tYXAoZyA9PiBnLk5hbWUpXHJcbiAgICAgIC5mb3JFYWNoKGdyb3VwTmFtZSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWVsZEdyb3Vwc1tncm91cE5hbWVdID0gdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoZiA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==