@esfaenza/forms-and-validations 16.2.31 → 17.3.0
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.
- package/esm2022/esfaenza-forms-and-validations.mjs +4 -4
- package/esm2022/lib/forms/base-form-control.mjs +558 -558
- package/esm2022/lib/forms/form-adaptive/form-adaptive.component.loc.mjs +21 -21
- package/esm2022/lib/forms/form-adaptive/form-adaptive.component.mjs +420 -420
- package/esm2022/lib/forms/form-autocomplete/form-autocomplete.component.loc.mjs +20 -20
- package/esm2022/lib/forms/form-autocomplete/form-autocomplete.component.mjs +289 -289
- package/esm2022/lib/forms/form-checkbox/form-checkbox.component.mjs +74 -74
- package/esm2022/lib/forms/form-date/form-date.component.mjs +69 -69
- package/esm2022/lib/forms/form-datetime/form-datetime.component.mjs +67 -67
- package/esm2022/lib/forms/form-empty/form-empty.component.mjs +29 -29
- package/esm2022/lib/forms/form-error/form-error.component.mjs +41 -41
- package/esm2022/lib/forms/form-file/form-file.component.loc.mjs +21 -21
- package/esm2022/lib/forms/form-file/form-file.component.mjs +175 -175
- package/esm2022/lib/forms/form-info/form-info.component.mjs +41 -41
- package/esm2022/lib/forms/form-input/form-input.component.mjs +83 -83
- package/esm2022/lib/forms/form-multiselect/form-multiselect.component.loc.mjs +22 -22
- package/esm2022/lib/forms/form-multiselect/form-multiselect.component.mjs +163 -163
- package/esm2022/lib/forms/form-select/form-select.component.loc.mjs +20 -20
- package/esm2022/lib/forms/form-select/form-select.component.mjs +165 -165
- package/esm2022/lib/forms/form-template/form-template.component.mjs +76 -76
- package/esm2022/lib/forms/form-textarea/form-textarea.component.mjs +57 -57
- package/esm2022/lib/forms/form-time/form-time.component.mjs +115 -115
- package/esm2022/lib/forms-and-validations.module.mjs +199 -199
- package/esm2022/lib/models/AppFile.mjs +13 -13
- package/esm2022/lib/models/ChangeEvent.mjs +6 -6
- package/esm2022/lib/models/FormsAndValidationsModuleConfig.mjs +5 -5
- package/esm2022/lib/models/dayjs-adapter/dayjs-date-adapter.mjs +89 -89
- package/esm2022/lib/tokens.mjs +7 -7
- package/esm2022/lib/validations/base-validation.loc.mjs +22 -22
- package/esm2022/lib/validations/base-validation.mjs +328 -328
- package/esm2022/lib/validations/customValidators/CustomRequiredDirective.mjs +40 -40
- package/esm2022/lib/validations/validation-autocomplete/validation-autocomplete.component.mjs +147 -147
- package/esm2022/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.mjs +240 -240
- package/esm2022/lib/validations/validation-currency/validation-currency.component.mjs +75 -75
- package/esm2022/lib/validations/validation-date/validation-date.component.mjs +183 -183
- package/esm2022/lib/validations/validation-datetime/validation-datetime.component.mjs +212 -212
- package/esm2022/lib/validations/validation-input/validation-input.component.mjs +222 -222
- package/esm2022/lib/validations/validation-select/validation-select.component.mjs +183 -183
- package/esm2022/lib/validations/validation-text-area/validation-text-area.component.mjs +78 -78
- package/esm2022/public-api.mjs +39 -39
- package/fesm2022/esfaenza-forms-and-validations.mjs +4152 -4152
- package/fesm2022/esfaenza-forms-and-validations.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/forms/base-form-control.d.ts +276 -276
- package/lib/forms/form-adaptive/form-adaptive.component.d.ts +126 -126
- package/lib/forms/form-adaptive/form-adaptive.component.loc.d.ts +14 -14
- package/lib/forms/form-autocomplete/form-autocomplete.component.d.ts +84 -84
- package/lib/forms/form-autocomplete/form-autocomplete.component.loc.d.ts +14 -14
- package/lib/forms/form-checkbox/form-checkbox.component.d.ts +23 -23
- package/lib/forms/form-date/form-date.component.d.ts +21 -21
- package/lib/forms/form-datetime/form-datetime.component.d.ts +23 -23
- package/lib/forms/form-empty/form-empty.component.d.ts +15 -15
- package/lib/forms/form-error/form-error.component.d.ts +19 -19
- package/lib/forms/form-file/form-file.component.d.ts +46 -46
- package/lib/forms/form-file/form-file.component.loc.d.ts +14 -14
- package/lib/forms/form-info/form-info.component.d.ts +19 -19
- package/lib/forms/form-input/form-input.component.d.ts +33 -33
- package/lib/forms/form-multiselect/form-multiselect.component.d.ts +67 -67
- package/lib/forms/form-multiselect/form-multiselect.component.loc.d.ts +14 -14
- package/lib/forms/form-select/form-select.component.d.ts +43 -43
- package/lib/forms/form-select/form-select.component.loc.d.ts +14 -14
- package/lib/forms/form-template/form-template.component.d.ts +38 -38
- package/lib/forms/form-textarea/form-textarea.component.d.ts +18 -18
- package/lib/forms/form-time/form-time.component.d.ts +40 -40
- package/lib/forms-and-validations.module.d.ts +47 -47
- package/lib/models/AppFile.d.ts +21 -21
- package/lib/models/ChangeEvent.d.ts +5 -5
- package/lib/models/FormsAndValidationsModuleConfig.d.ts +11 -11
- package/lib/models/dayjs-adapter/dayjs-date-adapter.d.ts +49 -49
- package/lib/tokens.d.ts +7 -7
- package/lib/validations/base-validation.d.ts +219 -219
- package/lib/validations/base-validation.loc.d.ts +14 -14
- package/lib/validations/customValidators/CustomRequiredDirective.d.ts +24 -24
- package/lib/validations/validation-autocomplete/validation-autocomplete.component.d.ts +58 -58
- package/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.d.ts +88 -88
- package/lib/validations/validation-currency/validation-currency.component.d.ts +28 -28
- package/lib/validations/validation-date/validation-date.component.d.ts +79 -79
- package/lib/validations/validation-datetime/validation-datetime.component.d.ts +109 -109
- package/lib/validations/validation-input/validation-input.component.d.ts +134 -134
- package/lib/validations/validation-select/validation-select.component.d.ts +95 -95
- package/lib/validations/validation-text-area/validation-text-area.component.d.ts +28 -28
- package/package.json +13 -13
- package/public-api.d.ts +31 -31
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
/// <amd-module name="@esfaenza/forms-and-validations" />
|
|
5
|
-
export * from './public-api';
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
/// <amd-module name="@esfaenza/forms-and-validations" />
|
|
5
|
+
export * from './public-api';
|
|
@@ -1,276 +1,276 @@
|
|
|
1
|
-
import { ControlValueAccessor, NgControl, NgForm, NgModel } from "@angular/forms";
|
|
2
|
-
import { EventEmitter, ChangeDetectorRef } from "@angular/core";
|
|
3
|
-
import { AccessControlService, ComponentContext } from "@esfaenza/access-control";
|
|
4
|
-
import { Subject } from "rxjs";
|
|
5
|
-
import { TemplateRef } from "@angular/core";
|
|
6
|
-
import { ChangeEvent } from "../models/ChangeEvent";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
/** Componente base da cui tutti i componenti Form implementano */
|
|
9
|
-
export declare abstract class BaseFormControl implements ControlValueAccessor {
|
|
10
|
-
protected cdr: ChangeDetectorRef;
|
|
11
|
-
ngControl: NgControl;
|
|
12
|
-
protected _validators: Array<any>;
|
|
13
|
-
private ac;
|
|
14
|
-
AppContext: ComponentContext;
|
|
15
|
-
private ACO_CUSTOMKEY;
|
|
16
|
-
private FAV_DEBUG_MODE;
|
|
17
|
-
private nativeInput;
|
|
18
|
-
/**
|
|
19
|
-
* https://github.com/angular/angular/issues/14988
|
|
20
|
-
* TL:DR; Il primo valore passato al writeValue è nullo perché quando i cagnacci fanno new FormControl()
|
|
21
|
-
* scrivono un writeValue nullo... quindi al primo binding salto l'inizializzazione se ho la coppia null-firstBind
|
|
22
|
-
* poi mettendo firstBind a false di lì in poi funziono come devo. Vista la casistica evito essenzialmente metà detectChanges
|
|
23
|
-
*/
|
|
24
|
-
private firstBind;
|
|
25
|
-
/**
|
|
26
|
-
* Indica di utilizzare i validatori che l'utente piazza sul componente.
|
|
27
|
-
* Da non usare nel caso di form-adaptive dato che i validatori vengono valutati in base al tipo ecc
|
|
28
|
-
*/
|
|
29
|
-
protected UseUserValidators: boolean;
|
|
30
|
-
/** Indica se il campo è obbligatorio i opzionale */
|
|
31
|
-
Required: boolean;
|
|
32
|
-
/** Modello rappresentato da questo campo */
|
|
33
|
-
Model: any;
|
|
34
|
-
/** Valore del Modello */
|
|
35
|
-
EvaluatedModel: string;
|
|
36
|
-
/** Nome generato per il controllo interno. Di default è il nome del controllo esterno con l'aggiunta di "_internal". Serve per evitare cross-bind */
|
|
37
|
-
GeneratedName: string;
|
|
38
|
-
/** Indica se il Form che contiene questo campo è già stato registrato */
|
|
39
|
-
protected formHasBennBound: boolean;
|
|
40
|
-
/**
|
|
41
|
-
* Indica se questo campo è staccato dal Form, ad esempio nel caso sia in un ng-template proiettato nel form.
|
|
42
|
-
*
|
|
43
|
-
* In quel caso la variabile **Form** del componente dev'essere valorizzata
|
|
44
|
-
*/
|
|
45
|
-
protected detatchedFromform: boolean;
|
|
46
|
-
/** @ignore */
|
|
47
|
-
protected propagateChange: (_: any) => void;
|
|
48
|
-
/** @ignore */
|
|
49
|
-
protected onTouched: () => void;
|
|
50
|
-
/** @ignore Vedi getter e setter */
|
|
51
|
-
_readonly: boolean;
|
|
52
|
-
/**
|
|
53
|
-
* Qualora ci fosse un contesto collegato questa variabile identifica se Sono l'Owner o meno.
|
|
54
|
-
*
|
|
55
|
-
* Se non lo sono, il campo risulterà in sola lettura
|
|
56
|
-
*/
|
|
57
|
-
private AppContextOwnership;
|
|
58
|
-
/** Subject a cui l'oggetto interno si collega per effettuare il focus dell'elemento input sottostante */
|
|
59
|
-
FocusSubject: Subject<void>;
|
|
60
|
-
/**
|
|
61
|
-
* @EXPERIMENTAL
|
|
62
|
-
*/
|
|
63
|
-
SetValidationSubject: Subject<{
|
|
64
|
-
fieldName: string;
|
|
65
|
-
error: string;
|
|
66
|
-
}>;
|
|
67
|
-
/** Modalità in cui viene mostrato il campo, 1-1 rispetto alle definizioni di Angular Material */
|
|
68
|
-
FieldAppearence: "legacy" | "standard" | "fill" | "outline";
|
|
69
|
-
/** Utilizza o meno il Layout di un form (Label con input di fianco), se false mostra solo l'input */
|
|
70
|
-
FormLayout: boolean;
|
|
71
|
-
/** Definisce se richiamare l'EventEmitter **inputChange** in maniera classica (true) o solo per la change considerate definitive come tasto invio / blur / ecc... (false) */
|
|
72
|
-
EmitPendingChanges: boolean;
|
|
73
|
-
/** Attiva o disattiva la validazione per questo componente */
|
|
74
|
-
Validation: boolean;
|
|
75
|
-
/**
|
|
76
|
-
* Permette di scrivere o meno nel campo di Input. Si differenzia dal Readonly in quanto fisicamente l'Input è scrivibile e vengono mantenuti i temi della validazione
|
|
77
|
-
* ma interagire direttamente con la casella di Input per l'utente non è possibile
|
|
78
|
-
*/
|
|
79
|
-
Frozen: boolean;
|
|
80
|
-
/** Placeholder per quando l'input è vuoto */
|
|
81
|
-
Placeholder: string;
|
|
82
|
-
/** Classe extra per il form-group in cui viene wrappato l'input */
|
|
83
|
-
FormGroupClass: string;
|
|
84
|
-
/** Messaggio da mostrare quando la validazione fallisce per questo componente. Di default viene proposta dalla libreria */
|
|
85
|
-
FailedValidationMessage: string;
|
|
86
|
-
/** Input che forza l'invalidità del componente */
|
|
87
|
-
ForcedError: boolean;
|
|
88
|
-
/** Mostra un testo a sinistra dell'input (FormLayout permettendo) */
|
|
89
|
-
Label: string;
|
|
90
|
-
/** col-md-X per la label */
|
|
91
|
-
LabelColWidth: number;
|
|
92
|
-
/** col-md-X per l'input */
|
|
93
|
-
InputColWidth: number;
|
|
94
|
-
/** Indica se è l'ultimo componente di un form (serve per rimuovere il margine finale) */
|
|
95
|
-
Last: boolean;
|
|
96
|
-
/** Associa il componente Form a questo input */
|
|
97
|
-
Form: NgForm;
|
|
98
|
-
/** Sorgente da cui scegliere valori per i componenti Form che lo consentono */
|
|
99
|
-
Source: any[];
|
|
100
|
-
/** Nome della proprietà che contiene l'Id degli oggetti bindati nella **Source** */
|
|
101
|
-
IdField: string;
|
|
102
|
-
/**
|
|
103
|
-
* Indica se il **Placeholder** dev'essere usato come una floating label di material o solo come un placeholder standard
|
|
104
|
-
*
|
|
105
|
-
* Ignorata lato autocomplete, autocomplete-multi e select in quanto hanno gestioni particolari di placeholder ecc...
|
|
106
|
-
*/
|
|
107
|
-
FloatingLabel: boolean;
|
|
108
|
-
/** Indica che la parte input del controllo dev'essere una label readonly e la parte label di titolo dev'essere in bold. Per utilizzare un solo componente sia per la modifica che per il dettaglio */
|
|
109
|
-
DisplayMode: boolean;
|
|
110
|
-
/** Indica la condizione per cui un elemento in Modalità Display può essere visibile in base a ulteriori controlli */
|
|
111
|
-
DisplayCondition: boolean;
|
|
112
|
-
/** Template per visualizzare la modalità **DisplayMode** come vuole il programmatore frocio di turno */
|
|
113
|
-
DisplayModeTemplate: TemplateRef<any>;
|
|
114
|
-
/** Layout del Form quando è in modalità Display. Di default mantiene la formattazione a form */
|
|
115
|
-
DisplayLayout: 'form' | 'inline' | 'hidden';
|
|
116
|
-
/** Separatore da mettere in automatico fra un elemento Form e l'altro quando sono in **DisplayMode** con **DisplayLayout** inline */
|
|
117
|
-
InlineSeparator: string;
|
|
118
|
-
/** Type HTML (password/text/etc...) */
|
|
119
|
-
Type: string;
|
|
120
|
-
/**
|
|
121
|
-
* Espressione simil-Angular per cambiare il testo dei componenti che scelgono il proprio modello da una **Source**
|
|
122
|
-
*
|
|
123
|
-
* Il funzionamento è identico al binder di angular, solo con una graffa invece che 2.
|
|
124
|
-
* È inoltre possibile aggiungere pezzi di descrizione in maniera condizionale con la sintassi **:prop?(Prop vale {prop})**
|
|
125
|
-
*/
|
|
126
|
-
Display: string;
|
|
127
|
-
/** Risultato dell'unione fra le informazioni degli oggetti in **Source** e le impostazioni specificate nell'Input **Display** */
|
|
128
|
-
BoundSource: {
|
|
129
|
-
id: string;
|
|
130
|
-
description: string;
|
|
131
|
-
}[];
|
|
132
|
-
/** Indica se è il primo Bind della Source */
|
|
133
|
-
protected SourceFirstBind: boolean;
|
|
134
|
-
/**
|
|
135
|
-
* Max length
|
|
136
|
-
*/
|
|
137
|
-
maxlength: number;
|
|
138
|
-
/**
|
|
139
|
-
* Max length
|
|
140
|
-
*/
|
|
141
|
-
minlength: number;
|
|
142
|
-
/**
|
|
143
|
-
* Ottiene il valore della variabile **_readonly**
|
|
144
|
-
*
|
|
145
|
-
* @returns {boolean} **true** se sola lettura, **false** altrimenti
|
|
146
|
-
*/
|
|
147
|
-
get Readonly(): boolean;
|
|
148
|
-
/**
|
|
149
|
-
* Imposta il valore della variabile **_readonly** gestendo anche il Contesto applicativo
|
|
150
|
-
*
|
|
151
|
-
* @param {boolean} value Valore da impostare
|
|
152
|
-
*/
|
|
153
|
-
set Readonly(value: boolean);
|
|
154
|
-
/**
|
|
155
|
-
* Permette di settare in una volta solo gli input LabelColWidth e InputColWidth, basta scriverlo con la sintassi "X Y"
|
|
156
|
-
*
|
|
157
|
-
* @param {string} input Input nel formato "X Y"
|
|
158
|
-
*/
|
|
159
|
-
set LabelInputRatio(input: string);
|
|
160
|
-
/** val-qualcosa che fa effettivamente da input, o eventualmente il singolo input in casi particolari (es checkbox) */
|
|
161
|
-
protected validationControl: NgModel;
|
|
162
|
-
/**
|
|
163
|
-
* Query sull'elemento 'validationControl' che funziona in ambiente statico
|
|
164
|
-
*
|
|
165
|
-
* @param {NgModel} comp Elemento HTML marcato con "#validationControl"
|
|
166
|
-
*/
|
|
167
|
-
set _validationControl(comp: NgModel);
|
|
168
|
-
/**
|
|
169
|
-
* Query sull'elemento 'validationControl' che funziona in ambiente dinamico
|
|
170
|
-
*
|
|
171
|
-
* @param {NgModel} comp Elemento HTML marcato con "#validationControl"
|
|
172
|
-
*/
|
|
173
|
-
set validationControl_static(comp: NgModel);
|
|
174
|
-
/** Evento chiamato alla modifica del valore collegato a questo campo */
|
|
175
|
-
inputChange: EventEmitter<ChangeEvent>;
|
|
176
|
-
/** Evento chiamato al focus del campo di testo/combo/quelcheè, riemitta l'evento originale Javascript */
|
|
177
|
-
inputFocus: EventEmitter<any>;
|
|
178
|
-
/** Evento chiamato al finalize del campo di testo/combo/quelcheè */
|
|
179
|
-
inputFinalized: EventEmitter<string>;
|
|
180
|
-
/** Cache delle condizioni scritte tipo :prop?(Roba con {prop}) */
|
|
181
|
-
private BindCheckingGroups;
|
|
182
|
-
/** Cache delle proprietà scritte tipo --> {prop} */
|
|
183
|
-
private BindProperties;
|
|
184
|
-
/** @ignore Costruttore */
|
|
185
|
-
constructor(cdr: ChangeDetectorRef, ngControl: NgControl, _validators: Array<any>, ac: AccessControlService, AppContext: ComponentContext, ACO_CUSTOMKEY: string, FAV_DEBUG_MODE: boolean, nativeInput?: boolean);
|
|
186
|
-
/**
|
|
187
|
-
* Effettua il Bind/Parse delle varie **Source** unendo le informazioni specificate in **Display**
|
|
188
|
-
*
|
|
189
|
-
* Eventualmente rieffettua un bind al modello in base al valore della variabile **RebindModelAfterSource**
|
|
190
|
-
*/
|
|
191
|
-
protected tryBindSourceDisplay(): void;
|
|
192
|
-
/** Valuta il contenuto della variabile BindCheckingGroups */
|
|
193
|
-
private evaluateBindCheckingGroups;
|
|
194
|
-
/** Valuta il contenuto della variabile BindProperties */
|
|
195
|
-
private evaluateBindProperties;
|
|
196
|
-
/**
|
|
197
|
-
* Trasforma un oggetto della Source alla sua versione "nuova" basandosi sulle informazioni su gruppi e proprietà
|
|
198
|
-
*
|
|
199
|
-
* @param {any} item Oggetto da trasformare
|
|
200
|
-
*
|
|
201
|
-
* @returns {{id: string, description: string}} Oggetto finale trasformato
|
|
202
|
-
*/
|
|
203
|
-
private transformSourceItem;
|
|
204
|
-
/**
|
|
205
|
-
* Indica se il comopnente in questione è in grado di gestire ngControl nulli.
|
|
206
|
-
* Di default è **false**
|
|
207
|
-
*
|
|
208
|
-
* @returns {boolean} **true** se gestisco ngControl nulli, **false** altrimenti
|
|
209
|
-
*/
|
|
210
|
-
handleNullNgControl(): boolean;
|
|
211
|
-
/** @ignore */
|
|
212
|
-
ngOnInit(): void;
|
|
213
|
-
destroyed$: Subject<void>;
|
|
214
|
-
/**
|
|
215
|
-
* Se sono in modalità detatched devo rimuovere manualmente questo controllo quando entro nella dispose, altrimenti se poi ne andassi a riaggiungere
|
|
216
|
-
* un altro con lo stesso "name" ma magari resettato, Angular lo re-idraterebbe con i valori precedenti nonostante il modello fosse vuoto
|
|
217
|
-
*/
|
|
218
|
-
ngOnDestroy(): void;
|
|
219
|
-
/** Elabora i validatori iniettati e capisce se il valore è obbligatorio o meno */
|
|
220
|
-
/** Fratello della funzione con lo stesso nome lato validations */
|
|
221
|
-
checkRequiredness(): void;
|
|
222
|
-
/** @ignore */
|
|
223
|
-
ngAfterViewInit(): void;
|
|
224
|
-
/** Helper che collega la funzione di reset del controllo form al controllo di validazione sottostante */
|
|
225
|
-
private bindResetFunction;
|
|
226
|
-
/** @ignore */
|
|
227
|
-
writeValue(obj: any): void;
|
|
228
|
-
/** @ignore */
|
|
229
|
-
registerOnChange(fn: any): void;
|
|
230
|
-
/** @ignore */
|
|
231
|
-
registerOnTouched(fn: any): void;
|
|
232
|
-
/**
|
|
233
|
-
* Registra internamente il componente di validazione, ne imposta i validatori e collega il Form, se presente
|
|
234
|
-
*
|
|
235
|
-
* @param {NgModel} comp Elemento HTML marcato con "#validationControl"
|
|
236
|
-
*/
|
|
237
|
-
registerValComp(comp: NgModel): void;
|
|
238
|
-
registerForm(ngForm: NgForm): void;
|
|
239
|
-
/**
|
|
240
|
-
* Aggiorna il valore e la validità dell'input sottostante. Non viene chiamato per input nativi come le checkbox
|
|
241
|
-
*
|
|
242
|
-
* @param {boolean} forcedValue Forza l'aggiornamento anche se non è un input nativo (input nativo = checkbox, ad esempio)
|
|
243
|
-
*/
|
|
244
|
-
updateValidityForNativeInput(forcedValue?: boolean): void;
|
|
245
|
-
/**
|
|
246
|
-
* @ignore
|
|
247
|
-
* Classico "spara fuori". Mantengo lo stesso nome dell'evento dei <val-*> (inputChange) per retrocompatibilità.
|
|
248
|
-
*
|
|
249
|
-
* Non posso tenerlo protected altrimenti posso eseguirlo solo dal .ts e non dall' .html
|
|
250
|
-
*/
|
|
251
|
-
changed(forcedValue?: any, markForCheck?: boolean, modelEvaluationHandled?: boolean, internal?: boolean): void;
|
|
252
|
-
/**
|
|
253
|
-
* @ignore
|
|
254
|
-
* Classico "spara fuori" sul focus. Mantengo lo stesso nome dell'evento dei <val-*> (inputChange) per retrocompatibilità.
|
|
255
|
-
*
|
|
256
|
-
* Non posso tenerlo protected altrimenti posso eseguirlo solo dal .ts e non dall' .html
|
|
257
|
-
*/
|
|
258
|
-
focused(event: any): void;
|
|
259
|
-
/**
|
|
260
|
-
* @ignore
|
|
261
|
-
* Classico "spara fuori" sulla finalizzazione del valore dell'input (blur / tasto invio, ecc...). Mantengo lo stesso nome dell'evento dei <val-*> (inputChange) per retrocompatibilità.
|
|
262
|
-
*
|
|
263
|
-
* Non posso tenerlo protected altrimenti posso eseguirlo solo dal .ts e non dall' .html
|
|
264
|
-
*/
|
|
265
|
-
finalized(): void;
|
|
266
|
-
/**
|
|
267
|
-
* Stampa un log a console
|
|
268
|
-
*
|
|
269
|
-
* @param {string} message Messaggio da stampare
|
|
270
|
-
*/
|
|
271
|
-
log(message: string): void;
|
|
272
|
-
/** @ignore */
|
|
273
|
-
abstract onNotNullValueSet(): void;
|
|
274
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<BaseFormControl, never>;
|
|
275
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseFormControl, never, never, { "FocusSubject": { "alias": "FocusSubject"; "required": false; }; "SetValidationSubject": { "alias": "SetValidationSubject"; "required": false; }; "FieldAppearence": { "alias": "FieldAppearence"; "required": false; }; "FormLayout": { "alias": "FormLayout"; "required": false; }; "EmitPendingChanges": { "alias": "EmitPendingChanges"; "required": false; }; "Validation": { "alias": "Validation"; "required": false; }; "Frozen": { "alias": "Frozen"; "required": false; }; "Placeholder": { "alias": "Placeholder"; "required": false; }; "FormGroupClass": { "alias": "FormGroupClass"; "required": false; }; "FailedValidationMessage": { "alias": "FailedValidationMessage"; "required": false; }; "ForcedError": { "alias": "ForcedError"; "required": false; }; "Label": { "alias": "Label"; "required": false; }; "LabelColWidth": { "alias": "LabelColWidth"; "required": false; }; "InputColWidth": { "alias": "InputColWidth"; "required": false; }; "Last": { "alias": "Last"; "required": false; }; "Form": { "alias": "Form"; "required": false; }; "Source": { "alias": "Source"; "required": false; }; "IdField": { "alias": "IdField"; "required": false; }; "FloatingLabel": { "alias": "FloatingLabel"; "required": false; }; "DisplayMode": { "alias": "DisplayMode"; "required": false; }; "DisplayCondition": { "alias": "DisplayCondition"; "required": false; }; "DisplayModeTemplate": { "alias": "DisplayModeTemplate"; "required": false; }; "DisplayLayout": { "alias": "DisplayLayout"; "required": false; }; "InlineSeparator": { "alias": "InlineSeparator"; "required": false; }; "Type": { "alias": "Type"; "required": false; }; "Display": { "alias": "Display"; "required": false; }; "maxlength": { "alias": "maxlength"; "required": false; }; "minlength": { "alias": "minlength"; "required": false; }; "Readonly": { "alias": "Readonly"; "required": false; }; "LabelInputRatio": { "alias": "LabelInputRatio"; "required": false; }; }, { "inputChange": "inputChange"; "inputFocus": "inputFocus"; "inputFinalized": "inputFinalized"; }, never, never, false, never>;
|
|
276
|
-
}
|
|
1
|
+
import { ControlValueAccessor, NgControl, NgForm, NgModel } from "@angular/forms";
|
|
2
|
+
import { EventEmitter, ChangeDetectorRef } from "@angular/core";
|
|
3
|
+
import { AccessControlService, ComponentContext } from "@esfaenza/access-control";
|
|
4
|
+
import { Subject } from "rxjs";
|
|
5
|
+
import { TemplateRef } from "@angular/core";
|
|
6
|
+
import { ChangeEvent } from "../models/ChangeEvent";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
/** Componente base da cui tutti i componenti Form implementano */
|
|
9
|
+
export declare abstract class BaseFormControl implements ControlValueAccessor {
|
|
10
|
+
protected cdr: ChangeDetectorRef;
|
|
11
|
+
ngControl: NgControl;
|
|
12
|
+
protected _validators: Array<any>;
|
|
13
|
+
private ac;
|
|
14
|
+
AppContext: ComponentContext;
|
|
15
|
+
private ACO_CUSTOMKEY;
|
|
16
|
+
private FAV_DEBUG_MODE;
|
|
17
|
+
private nativeInput;
|
|
18
|
+
/**
|
|
19
|
+
* https://github.com/angular/angular/issues/14988
|
|
20
|
+
* TL:DR; Il primo valore passato al writeValue è nullo perché quando i cagnacci fanno new FormControl()
|
|
21
|
+
* scrivono un writeValue nullo... quindi al primo binding salto l'inizializzazione se ho la coppia null-firstBind
|
|
22
|
+
* poi mettendo firstBind a false di lì in poi funziono come devo. Vista la casistica evito essenzialmente metà detectChanges
|
|
23
|
+
*/
|
|
24
|
+
private firstBind;
|
|
25
|
+
/**
|
|
26
|
+
* Indica di utilizzare i validatori che l'utente piazza sul componente.
|
|
27
|
+
* Da non usare nel caso di form-adaptive dato che i validatori vengono valutati in base al tipo ecc
|
|
28
|
+
*/
|
|
29
|
+
protected UseUserValidators: boolean;
|
|
30
|
+
/** Indica se il campo è obbligatorio i opzionale */
|
|
31
|
+
Required: boolean;
|
|
32
|
+
/** Modello rappresentato da questo campo */
|
|
33
|
+
Model: any;
|
|
34
|
+
/** Valore del Modello */
|
|
35
|
+
EvaluatedModel: string;
|
|
36
|
+
/** Nome generato per il controllo interno. Di default è il nome del controllo esterno con l'aggiunta di "_internal". Serve per evitare cross-bind */
|
|
37
|
+
GeneratedName: string;
|
|
38
|
+
/** Indica se il Form che contiene questo campo è già stato registrato */
|
|
39
|
+
protected formHasBennBound: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Indica se questo campo è staccato dal Form, ad esempio nel caso sia in un ng-template proiettato nel form.
|
|
42
|
+
*
|
|
43
|
+
* In quel caso la variabile **Form** del componente dev'essere valorizzata
|
|
44
|
+
*/
|
|
45
|
+
protected detatchedFromform: boolean;
|
|
46
|
+
/** @ignore */
|
|
47
|
+
protected propagateChange: (_: any) => void;
|
|
48
|
+
/** @ignore */
|
|
49
|
+
protected onTouched: () => void;
|
|
50
|
+
/** @ignore Vedi getter e setter */
|
|
51
|
+
_readonly: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Qualora ci fosse un contesto collegato questa variabile identifica se Sono l'Owner o meno.
|
|
54
|
+
*
|
|
55
|
+
* Se non lo sono, il campo risulterà in sola lettura
|
|
56
|
+
*/
|
|
57
|
+
private AppContextOwnership;
|
|
58
|
+
/** Subject a cui l'oggetto interno si collega per effettuare il focus dell'elemento input sottostante */
|
|
59
|
+
FocusSubject: Subject<void>;
|
|
60
|
+
/**
|
|
61
|
+
* @EXPERIMENTAL
|
|
62
|
+
*/
|
|
63
|
+
SetValidationSubject: Subject<{
|
|
64
|
+
fieldName: string;
|
|
65
|
+
error: string;
|
|
66
|
+
}>;
|
|
67
|
+
/** Modalità in cui viene mostrato il campo, 1-1 rispetto alle definizioni di Angular Material */
|
|
68
|
+
FieldAppearence: "legacy" | "standard" | "fill" | "outline";
|
|
69
|
+
/** Utilizza o meno il Layout di un form (Label con input di fianco), se false mostra solo l'input */
|
|
70
|
+
FormLayout: boolean;
|
|
71
|
+
/** Definisce se richiamare l'EventEmitter **inputChange** in maniera classica (true) o solo per la change considerate definitive come tasto invio / blur / ecc... (false) */
|
|
72
|
+
EmitPendingChanges: boolean;
|
|
73
|
+
/** Attiva o disattiva la validazione per questo componente */
|
|
74
|
+
Validation: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Permette di scrivere o meno nel campo di Input. Si differenzia dal Readonly in quanto fisicamente l'Input è scrivibile e vengono mantenuti i temi della validazione
|
|
77
|
+
* ma interagire direttamente con la casella di Input per l'utente non è possibile
|
|
78
|
+
*/
|
|
79
|
+
Frozen: boolean;
|
|
80
|
+
/** Placeholder per quando l'input è vuoto */
|
|
81
|
+
Placeholder: string;
|
|
82
|
+
/** Classe extra per il form-group in cui viene wrappato l'input */
|
|
83
|
+
FormGroupClass: string;
|
|
84
|
+
/** Messaggio da mostrare quando la validazione fallisce per questo componente. Di default viene proposta dalla libreria */
|
|
85
|
+
FailedValidationMessage: string;
|
|
86
|
+
/** Input che forza l'invalidità del componente */
|
|
87
|
+
ForcedError: boolean;
|
|
88
|
+
/** Mostra un testo a sinistra dell'input (FormLayout permettendo) */
|
|
89
|
+
Label: string;
|
|
90
|
+
/** col-md-X per la label */
|
|
91
|
+
LabelColWidth: number;
|
|
92
|
+
/** col-md-X per l'input */
|
|
93
|
+
InputColWidth: number;
|
|
94
|
+
/** Indica se è l'ultimo componente di un form (serve per rimuovere il margine finale) */
|
|
95
|
+
Last: boolean;
|
|
96
|
+
/** Associa il componente Form a questo input */
|
|
97
|
+
Form: NgForm;
|
|
98
|
+
/** Sorgente da cui scegliere valori per i componenti Form che lo consentono */
|
|
99
|
+
Source: any[];
|
|
100
|
+
/** Nome della proprietà che contiene l'Id degli oggetti bindati nella **Source** */
|
|
101
|
+
IdField: string;
|
|
102
|
+
/**
|
|
103
|
+
* Indica se il **Placeholder** dev'essere usato come una floating label di material o solo come un placeholder standard
|
|
104
|
+
*
|
|
105
|
+
* Ignorata lato autocomplete, autocomplete-multi e select in quanto hanno gestioni particolari di placeholder ecc...
|
|
106
|
+
*/
|
|
107
|
+
FloatingLabel: boolean;
|
|
108
|
+
/** Indica che la parte input del controllo dev'essere una label readonly e la parte label di titolo dev'essere in bold. Per utilizzare un solo componente sia per la modifica che per il dettaglio */
|
|
109
|
+
DisplayMode: boolean;
|
|
110
|
+
/** Indica la condizione per cui un elemento in Modalità Display può essere visibile in base a ulteriori controlli */
|
|
111
|
+
DisplayCondition: boolean;
|
|
112
|
+
/** Template per visualizzare la modalità **DisplayMode** come vuole il programmatore frocio di turno */
|
|
113
|
+
DisplayModeTemplate: TemplateRef<any>;
|
|
114
|
+
/** Layout del Form quando è in modalità Display. Di default mantiene la formattazione a form */
|
|
115
|
+
DisplayLayout: 'form' | 'inline' | 'hidden';
|
|
116
|
+
/** Separatore da mettere in automatico fra un elemento Form e l'altro quando sono in **DisplayMode** con **DisplayLayout** inline */
|
|
117
|
+
InlineSeparator: string;
|
|
118
|
+
/** Type HTML (password/text/etc...) */
|
|
119
|
+
Type: string;
|
|
120
|
+
/**
|
|
121
|
+
* Espressione simil-Angular per cambiare il testo dei componenti che scelgono il proprio modello da una **Source**
|
|
122
|
+
*
|
|
123
|
+
* Il funzionamento è identico al binder di angular, solo con una graffa invece che 2.
|
|
124
|
+
* È inoltre possibile aggiungere pezzi di descrizione in maniera condizionale con la sintassi **:prop?(Prop vale {prop})**
|
|
125
|
+
*/
|
|
126
|
+
Display: string;
|
|
127
|
+
/** Risultato dell'unione fra le informazioni degli oggetti in **Source** e le impostazioni specificate nell'Input **Display** */
|
|
128
|
+
BoundSource: {
|
|
129
|
+
id: string;
|
|
130
|
+
description: string;
|
|
131
|
+
}[];
|
|
132
|
+
/** Indica se è il primo Bind della Source */
|
|
133
|
+
protected SourceFirstBind: boolean;
|
|
134
|
+
/**
|
|
135
|
+
* Max length
|
|
136
|
+
*/
|
|
137
|
+
maxlength: number;
|
|
138
|
+
/**
|
|
139
|
+
* Max length
|
|
140
|
+
*/
|
|
141
|
+
minlength: number;
|
|
142
|
+
/**
|
|
143
|
+
* Ottiene il valore della variabile **_readonly**
|
|
144
|
+
*
|
|
145
|
+
* @returns {boolean} **true** se sola lettura, **false** altrimenti
|
|
146
|
+
*/
|
|
147
|
+
get Readonly(): boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Imposta il valore della variabile **_readonly** gestendo anche il Contesto applicativo
|
|
150
|
+
*
|
|
151
|
+
* @param {boolean} value Valore da impostare
|
|
152
|
+
*/
|
|
153
|
+
set Readonly(value: boolean);
|
|
154
|
+
/**
|
|
155
|
+
* Permette di settare in una volta solo gli input LabelColWidth e InputColWidth, basta scriverlo con la sintassi "X Y"
|
|
156
|
+
*
|
|
157
|
+
* @param {string} input Input nel formato "X Y"
|
|
158
|
+
*/
|
|
159
|
+
set LabelInputRatio(input: string);
|
|
160
|
+
/** val-qualcosa che fa effettivamente da input, o eventualmente il singolo input in casi particolari (es checkbox) */
|
|
161
|
+
protected validationControl: NgModel;
|
|
162
|
+
/**
|
|
163
|
+
* Query sull'elemento 'validationControl' che funziona in ambiente statico
|
|
164
|
+
*
|
|
165
|
+
* @param {NgModel} comp Elemento HTML marcato con "#validationControl"
|
|
166
|
+
*/
|
|
167
|
+
set _validationControl(comp: NgModel);
|
|
168
|
+
/**
|
|
169
|
+
* Query sull'elemento 'validationControl' che funziona in ambiente dinamico
|
|
170
|
+
*
|
|
171
|
+
* @param {NgModel} comp Elemento HTML marcato con "#validationControl"
|
|
172
|
+
*/
|
|
173
|
+
set validationControl_static(comp: NgModel);
|
|
174
|
+
/** Evento chiamato alla modifica del valore collegato a questo campo */
|
|
175
|
+
inputChange: EventEmitter<ChangeEvent>;
|
|
176
|
+
/** Evento chiamato al focus del campo di testo/combo/quelcheè, riemitta l'evento originale Javascript */
|
|
177
|
+
inputFocus: EventEmitter<any>;
|
|
178
|
+
/** Evento chiamato al finalize del campo di testo/combo/quelcheè */
|
|
179
|
+
inputFinalized: EventEmitter<string>;
|
|
180
|
+
/** Cache delle condizioni scritte tipo :prop?(Roba con {prop}) */
|
|
181
|
+
private BindCheckingGroups;
|
|
182
|
+
/** Cache delle proprietà scritte tipo --> {prop} */
|
|
183
|
+
private BindProperties;
|
|
184
|
+
/** @ignore Costruttore */
|
|
185
|
+
constructor(cdr: ChangeDetectorRef, ngControl: NgControl, _validators: Array<any>, ac: AccessControlService, AppContext: ComponentContext, ACO_CUSTOMKEY: string, FAV_DEBUG_MODE: boolean, nativeInput?: boolean);
|
|
186
|
+
/**
|
|
187
|
+
* Effettua il Bind/Parse delle varie **Source** unendo le informazioni specificate in **Display**
|
|
188
|
+
*
|
|
189
|
+
* Eventualmente rieffettua un bind al modello in base al valore della variabile **RebindModelAfterSource**
|
|
190
|
+
*/
|
|
191
|
+
protected tryBindSourceDisplay(): void;
|
|
192
|
+
/** Valuta il contenuto della variabile BindCheckingGroups */
|
|
193
|
+
private evaluateBindCheckingGroups;
|
|
194
|
+
/** Valuta il contenuto della variabile BindProperties */
|
|
195
|
+
private evaluateBindProperties;
|
|
196
|
+
/**
|
|
197
|
+
* Trasforma un oggetto della Source alla sua versione "nuova" basandosi sulle informazioni su gruppi e proprietà
|
|
198
|
+
*
|
|
199
|
+
* @param {any} item Oggetto da trasformare
|
|
200
|
+
*
|
|
201
|
+
* @returns {{id: string, description: string}} Oggetto finale trasformato
|
|
202
|
+
*/
|
|
203
|
+
private transformSourceItem;
|
|
204
|
+
/**
|
|
205
|
+
* Indica se il comopnente in questione è in grado di gestire ngControl nulli.
|
|
206
|
+
* Di default è **false**
|
|
207
|
+
*
|
|
208
|
+
* @returns {boolean} **true** se gestisco ngControl nulli, **false** altrimenti
|
|
209
|
+
*/
|
|
210
|
+
handleNullNgControl(): boolean;
|
|
211
|
+
/** @ignore */
|
|
212
|
+
ngOnInit(): void;
|
|
213
|
+
destroyed$: Subject<void>;
|
|
214
|
+
/**
|
|
215
|
+
* Se sono in modalità detatched devo rimuovere manualmente questo controllo quando entro nella dispose, altrimenti se poi ne andassi a riaggiungere
|
|
216
|
+
* un altro con lo stesso "name" ma magari resettato, Angular lo re-idraterebbe con i valori precedenti nonostante il modello fosse vuoto
|
|
217
|
+
*/
|
|
218
|
+
ngOnDestroy(): void;
|
|
219
|
+
/** Elabora i validatori iniettati e capisce se il valore è obbligatorio o meno */
|
|
220
|
+
/** Fratello della funzione con lo stesso nome lato validations */
|
|
221
|
+
checkRequiredness(): void;
|
|
222
|
+
/** @ignore */
|
|
223
|
+
ngAfterViewInit(): void;
|
|
224
|
+
/** Helper che collega la funzione di reset del controllo form al controllo di validazione sottostante */
|
|
225
|
+
private bindResetFunction;
|
|
226
|
+
/** @ignore */
|
|
227
|
+
writeValue(obj: any): void;
|
|
228
|
+
/** @ignore */
|
|
229
|
+
registerOnChange(fn: any): void;
|
|
230
|
+
/** @ignore */
|
|
231
|
+
registerOnTouched(fn: any): void;
|
|
232
|
+
/**
|
|
233
|
+
* Registra internamente il componente di validazione, ne imposta i validatori e collega il Form, se presente
|
|
234
|
+
*
|
|
235
|
+
* @param {NgModel} comp Elemento HTML marcato con "#validationControl"
|
|
236
|
+
*/
|
|
237
|
+
registerValComp(comp: NgModel): void;
|
|
238
|
+
registerForm(ngForm: NgForm): void;
|
|
239
|
+
/**
|
|
240
|
+
* Aggiorna il valore e la validità dell'input sottostante. Non viene chiamato per input nativi come le checkbox
|
|
241
|
+
*
|
|
242
|
+
* @param {boolean} forcedValue Forza l'aggiornamento anche se non è un input nativo (input nativo = checkbox, ad esempio)
|
|
243
|
+
*/
|
|
244
|
+
updateValidityForNativeInput(forcedValue?: boolean): void;
|
|
245
|
+
/**
|
|
246
|
+
* @ignore
|
|
247
|
+
* Classico "spara fuori". Mantengo lo stesso nome dell'evento dei <val-*> (inputChange) per retrocompatibilità.
|
|
248
|
+
*
|
|
249
|
+
* Non posso tenerlo protected altrimenti posso eseguirlo solo dal .ts e non dall' .html
|
|
250
|
+
*/
|
|
251
|
+
changed(forcedValue?: any, markForCheck?: boolean, modelEvaluationHandled?: boolean, internal?: boolean): void;
|
|
252
|
+
/**
|
|
253
|
+
* @ignore
|
|
254
|
+
* Classico "spara fuori" sul focus. Mantengo lo stesso nome dell'evento dei <val-*> (inputChange) per retrocompatibilità.
|
|
255
|
+
*
|
|
256
|
+
* Non posso tenerlo protected altrimenti posso eseguirlo solo dal .ts e non dall' .html
|
|
257
|
+
*/
|
|
258
|
+
focused(event: any): void;
|
|
259
|
+
/**
|
|
260
|
+
* @ignore
|
|
261
|
+
* Classico "spara fuori" sulla finalizzazione del valore dell'input (blur / tasto invio, ecc...). Mantengo lo stesso nome dell'evento dei <val-*> (inputChange) per retrocompatibilità.
|
|
262
|
+
*
|
|
263
|
+
* Non posso tenerlo protected altrimenti posso eseguirlo solo dal .ts e non dall' .html
|
|
264
|
+
*/
|
|
265
|
+
finalized(): void;
|
|
266
|
+
/**
|
|
267
|
+
* Stampa un log a console
|
|
268
|
+
*
|
|
269
|
+
* @param {string} message Messaggio da stampare
|
|
270
|
+
*/
|
|
271
|
+
log(message: string): void;
|
|
272
|
+
/** @ignore */
|
|
273
|
+
abstract onNotNullValueSet(): void;
|
|
274
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaseFormControl, never>;
|
|
275
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseFormControl, never, never, { "FocusSubject": { "alias": "FocusSubject"; "required": false; }; "SetValidationSubject": { "alias": "SetValidationSubject"; "required": false; }; "FieldAppearence": { "alias": "FieldAppearence"; "required": false; }; "FormLayout": { "alias": "FormLayout"; "required": false; }; "EmitPendingChanges": { "alias": "EmitPendingChanges"; "required": false; }; "Validation": { "alias": "Validation"; "required": false; }; "Frozen": { "alias": "Frozen"; "required": false; }; "Placeholder": { "alias": "Placeholder"; "required": false; }; "FormGroupClass": { "alias": "FormGroupClass"; "required": false; }; "FailedValidationMessage": { "alias": "FailedValidationMessage"; "required": false; }; "ForcedError": { "alias": "ForcedError"; "required": false; }; "Label": { "alias": "Label"; "required": false; }; "LabelColWidth": { "alias": "LabelColWidth"; "required": false; }; "InputColWidth": { "alias": "InputColWidth"; "required": false; }; "Last": { "alias": "Last"; "required": false; }; "Form": { "alias": "Form"; "required": false; }; "Source": { "alias": "Source"; "required": false; }; "IdField": { "alias": "IdField"; "required": false; }; "FloatingLabel": { "alias": "FloatingLabel"; "required": false; }; "DisplayMode": { "alias": "DisplayMode"; "required": false; }; "DisplayCondition": { "alias": "DisplayCondition"; "required": false; }; "DisplayModeTemplate": { "alias": "DisplayModeTemplate"; "required": false; }; "DisplayLayout": { "alias": "DisplayLayout"; "required": false; }; "InlineSeparator": { "alias": "InlineSeparator"; "required": false; }; "Type": { "alias": "Type"; "required": false; }; "Display": { "alias": "Display"; "required": false; }; "maxlength": { "alias": "maxlength"; "required": false; }; "minlength": { "alias": "minlength"; "required": false; }; "Readonly": { "alias": "Readonly"; "required": false; }; "LabelInputRatio": { "alias": "LabelInputRatio"; "required": false; }; }, { "inputChange": "inputChange"; "inputFocus": "inputFocus"; "inputFinalized": "inputFinalized"; }, never, never, false, never>;
|
|
276
|
+
}
|