src/app/shared/widgets/dynamic-form/dynamic-form.validator.ts
providers |
{
: , : , : true,
}
|
selector | [dynamicFormValidator] |
Widget inputs |
Widget outputs |
Methods |
Inputs |
constructor(validationService: ValidationService)
|
||||||
Parameters :
|
dynamicFormValidator
|
Type: |
validate | ||||||
validate(control: AbstractControl)
|
||||||
Parameters :
Returns :
Observable<ValidationErrors | null>
|
import {
AbstractControl,
AsyncValidator,
NG_ASYNC_VALIDATORS,
ValidationErrors,
} from "@angular/forms";
import { Directive, Input } from "@angular/core";
import { DynamicFormField } from "./dynamic-form-component/dynamic-form-fields.component";
import { ValidationService } from "../../components/validation/validation.service";
import { Observable, of } from "rxjs";
import { tap } from "rxjs/operators";
@Directive({
selector: "[dynamicFormValidator]",
providers: [
{
provide: NG_ASYNC_VALIDATORS,
useExisting: DynamicFormValidator,
multi: true,
},
],
})
export class DynamicFormValidator implements AsyncValidator {
@Input("dynamicFormValidator") field: DynamicFormField;
constructor(private validationService: ValidationService) {}
validate(control: AbstractControl): Observable<ValidationErrors | null> {
if (!this.field.validations) {
return of(null);
}
return this.validationService
.validateField(this.field, control.value)
.pipe(tap((errors) => (this.field.errors = errors as any)));
}
}