From c7b210d4845ea22e17a9f50da4b4c649864cd09d Mon Sep 17 00:00:00 2001 From: iRealNirmal Date: Tue, 21 Dec 2021 15:08:09 +0530 Subject: [PATCH] refactor(forms): update email validator to inherit abstractValidator (#44545) Modified email validator to inherit abstractValidator. For every validato type different PR will be raised as discussed in #42378. Closes #42267 PR Close #44545 --- goldens/public-api/forms/forms.md | 10 +++--- packages/forms/src/directives/validators.ts | 40 +++++++++------------ 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/goldens/public-api/forms/forms.md b/goldens/public-api/forms/forms.md index d6e5aa884a0..c4ac69d606b 100644 --- a/goldens/public-api/forms/forms.md +++ b/goldens/public-api/forms/forms.md @@ -203,10 +203,12 @@ export class DefaultValueAccessor extends BaseControlValueAccessor implements Co } // @public -export class EmailValidator implements Validator { - set email(value: boolean | string); - registerOnValidatorChange(fn: () => void): void; - validate(control: AbstractControl): ValidationErrors | null; +export class EmailValidator extends AbstractValidatorDirective { + email: boolean | string; + + // (undocumented) + enabled(input: boolean): boolean; + // (undocumented) static ɵdir: i0.ɵɵDirectiveDeclaration; // (undocumented) diff --git a/packages/forms/src/directives/validators.ts b/packages/forms/src/directives/validators.ts index 2e4ee0a121f..dc65a34c08e 100644 --- a/packages/forms/src/directives/validators.ts +++ b/packages/forms/src/directives/validators.ts @@ -470,35 +470,29 @@ export const EMAIL_VALIDATOR: any = { selector: '[email][formControlName],[email][formControl],[email][ngModel]', providers: [EMAIL_VALIDATOR] }) -export class EmailValidator implements Validator { - private _enabled = false; - private _onChange?: () => void; - +export class EmailValidator extends AbstractValidatorDirective { /** * @description * Tracks changes to the email attribute bound to this directive. */ - @Input() - set email(value: boolean|string) { - this._enabled = value === '' || value === true || value === 'true'; - if (this._onChange) this._onChange(); - } + @Input() email!: boolean|string; - /** - * Method that validates whether an email address is valid. - * Returns the validation result if enabled, otherwise null. - * @nodoc - */ - validate(control: AbstractControl): ValidationErrors|null { - return this._enabled ? emailValidator(control) : null; - } + /** @internal */ + override inputName = 'email'; - /** - * Registers a callback function to call when the validator inputs change. - * @nodoc - */ - registerOnValidatorChange(fn: () => void): void { - this._onChange = fn; + /** @internal */ + override normalizeInput = (input: unknown): boolean => + // Avoid TSLint requirement to omit semicolon, see + // https://github.com/palantir/tslint/issues/1476 + // tslint:disable-next-line:semicolon + (input === '' || input === true || input === 'true'); + + /** @internal */ + override createValidator = (input: number): ValidatorFn => emailValidator; + + /** @nodoc */ + override enabled(input: boolean): boolean { + return input; } }