Skip to content

Commit 6fad1a1

Browse files
jcorrea97alinelariguet
authored andcommitted
feat(dynamic-form): cria a propriedade p-validate-on-input
Cria a propriedade `p-validate-on-input` e repassa a propriedade `p-change-model` nos seguintes componentes do `po-dynamic-form`: - po-input - po-number - po-decimal - po-textarea - po-password fixes DTHFUI-6185
1 parent 0659768 commit 6fad1a1

6 files changed

+66
-1
lines changed

projects/ui/src/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-base.component.ts

+21-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { EventEmitter, Input, Output, Directive } from '@angular/core';
22
import { NgForm } from '@angular/forms';
3-
3+
import { InputBoolean } from '../../../decorators';
44
import { convertToBoolean } from '../../../utils/util';
55

66
import { PoDynamicFormField } from './po-dynamic-form-field.interface';
@@ -230,4 +230,24 @@ export class PoDynamicFormBaseComponent {
230230
get groupForm(): boolean {
231231
return this._groupForm;
232232
}
233+
234+
/**
235+
* @optional
236+
*
237+
* @description
238+
*
239+
* Ao informar esta propriedade, o componente passará a emitir o valor a cada caractere digitado.
240+
*
241+
* Pode ser aplicado nos seguintes componentes:
242+
* - po-input
243+
* - po-number
244+
* - po-decimal
245+
* - po-textarea
246+
* - po-password
247+
*
248+
* Deve informar os campos que deseja receber as emissões na propriedade `p-validate-fields`.
249+
*
250+
*
251+
*/
252+
@Input('p-validate-on-input') @InputBoolean() validateOnInput: boolean = false;
233253
}

projects/ui/src/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields-base.component.ts

+2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ export class PoDynamicFormFieldsBaseComponent {
2525
// Evento disparado se existir optionsService em visibleField. Necessário resgatar referência do objeto selecionado para quando se tratar de recebimento de opções via serviço.
2626
@Output('p-object-value') objectValue = new EventEmitter<any>();
2727

28+
@Input('p-validate-on-input') validateOnInput: boolean;
29+
2830
visibleFields: Array<PoDynamicFormFieldInternal> = [];
2931

3032
private _fields: Array<PoDynamicFormField>;

projects/ui/src/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.html

+5
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
[p-pattern]="field.pattern"
7272
[p-required]="field.required"
7373
(p-change)="onChangeField(field)"
74+
(p-change-model)="onChangeFieldModel(field)"
7475
[p-icon]="field.icon"
7576
[p-placeholder]="field.placeholder"
7677
[p-readonly]="field.readonly"
@@ -99,6 +100,7 @@
99100
[p-readonly]="field.readonly"
100101
[p-required]="field.required"
101102
(p-change)="onChangeField(field)"
103+
(p-change-model)="onChangeFieldModel(field)"
102104
[p-icon]="field.icon"
103105
[p-placeholder]="field.placeholder"
104106
>
@@ -129,6 +131,7 @@
129131
[p-readonly]="field.readonly"
130132
[p-required]="field.required"
131133
(p-change)="onChangeField(field)"
134+
(p-change-model)="onChangeFieldModel(field)"
132135
[p-placeholder]="field.placeholder"
133136
>
134137
</po-decimal>
@@ -316,6 +319,7 @@
316319
[p-required]="field.required"
317320
[p-rows]="field.rows"
318321
(p-change)="onChangeField(field)"
322+
(p-change-model)="onChangeFieldModel(field)"
319323
[p-placeholder]="field.placeholder"
320324
>
321325
</po-textarea>
@@ -342,6 +346,7 @@
342346
[p-readonly]="field.readonly"
343347
[p-required]="field.required"
344348
(p-change)="onChangeField(field)"
349+
(p-change-model)="onChangeFieldModel(field)"
345350
[p-placeholder]="field.placeholder"
346351
>
347352
</po-password>

projects/ui/src/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.spec.ts

+28
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,34 @@ describe('PoDynamicFormFieldsComponent: ', () => {
314314
});
315315
});
316316

317+
describe('onChangeFieldModel', () => {
318+
it('should call `triggerValidationOnForm` if validateOnInput is true', () => {
319+
const fakeVisibleField = { property: 'test1' };
320+
const field = { changedField: { property: 'test1' }, changedFieldIndex: 0 };
321+
322+
component.validateOnInput = true;
323+
324+
spyOn(component, <any>'getField').and.returnValue(field);
325+
spyOn(component, <any>'triggerValidationOnForm');
326+
327+
component.onChangeFieldModel(fakeVisibleField);
328+
329+
expect(component['triggerValidationOnForm']).toHaveBeenCalled();
330+
});
331+
332+
it('shouldn`t call `triggerValidationOnForm` if validateOnInput is false', () => {
333+
const fakeVisibleField = { property: 'test1' };
334+
335+
component.validateOnInput = false;
336+
337+
spyOn(component, <any>'triggerValidationOnForm');
338+
339+
component.onChangeFieldModel(fakeVisibleField);
340+
341+
expect(component['triggerValidationOnForm']).not.toHaveBeenCalled();
342+
});
343+
});
344+
317345
it('applyFieldValidation: should merge fields and validatedFields and apply new value to `fields` and `value``', () => {
318346
const index = 1;
319347
const validatedField = { field: { property: 'test2', required: false, visible: true }, value: 'expected value' };

projects/ui/src/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.ts

+9
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,15 @@ export class PoDynamicFormFieldsComponent extends PoDynamicFormFieldsBaseCompone
7474
this.updatePreviousValue();
7575
}
7676

77+
//emite o valor a cada caractere digitado no input
78+
onChangeFieldModel(visibleField: PoDynamicFormField) {
79+
if (this.validateOnInput) {
80+
const { property } = visibleField;
81+
const { changedFieldIndex } = this.getField(property);
82+
this.triggerValidationOnForm(changedFieldIndex);
83+
}
84+
}
85+
7786
updatePreviousValue() {
7887
this.previousValue = JSON.parse(JSON.stringify(this.value));
7988
}

projects/ui/src/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form.component.html

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
[p-disabled-form]="disabledForm"
1515
[p-validate]="validate"
1616
[p-validate-fields]="validateFields"
17+
[p-validate-on-input]="validateOnInput"
1718
[p-value]="value"
1819
(p-object-value)="sendObjectValue($event)"
1920
(p-form-validate)="validateForm($event)"

0 commit comments

Comments
 (0)