From 10d5b226e2d8caf43e75bfc0186aaec654c3f6b9 Mon Sep 17 00:00:00 2001 From: oriol Date: Wed, 22 Mar 2023 19:21:03 +0100 Subject: [PATCH 1/2] angular pattern validators --- .../src/form-validation/form-validators.ts | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 packages/angular/src/form-validation/form-validators.ts diff --git a/packages/angular/src/form-validation/form-validators.ts b/packages/angular/src/form-validation/form-validators.ts new file mode 100644 index 0000000..d0728b2 --- /dev/null +++ b/packages/angular/src/form-validation/form-validators.ts @@ -0,0 +1,45 @@ +import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; + +export class FormValidators { + private static readonly ERROR_BODY = { valid: false }; + + /** + * Substitution of the native `Validations.pattern` that allows + * an id as an input so multiple patterns can be used and identified. + * It also allows a string pattern or a RegExp. + */ + private static pattern(pattern: RegExp | string, id = 'pattern'): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + return FormValidators.isPatternFound(control, pattern) + ? null + : { + [id]: FormValidators.ERROR_BODY, + }; + }; + } + + /** + * Unlike "pattern" validator, "errorPattern" uses the pattern + * to identify the errors in the FormControl value. + */ + private static errorPattern(pattern: RegExp | string, id = 'errorPattern'): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + return FormValidators.isPatternFound(control, pattern) + ? { + [id]: FormValidators.ERROR_BODY, + } + : null; + }; + } + + private static isPatternFound(control: AbstractControl, pattern: RegExp | string): boolean { + const value = control.value; + if (!value) { + return false; + } + + const regex = typeof pattern === 'string' ? new RegExp(pattern) : pattern; + + return regex.test(value); + } +} From 0945c39e7b30b60a41710581a08d95d2433a2cde Mon Sep 17 00:00:00 2001 From: oriol Date: Sun, 2 Apr 2023 00:21:22 +0200 Subject: [PATCH 2/2] exporting validators correctly --- packages/angular/src/form-validation/form-validators.ts | 4 ++-- packages/angular/src/form-validation/index.ts | 1 + packages/angular/src/index.ts | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 packages/angular/src/form-validation/index.ts diff --git a/packages/angular/src/form-validation/form-validators.ts b/packages/angular/src/form-validation/form-validators.ts index d0728b2..641c43e 100644 --- a/packages/angular/src/form-validation/form-validators.ts +++ b/packages/angular/src/form-validation/form-validators.ts @@ -8,7 +8,7 @@ export class FormValidators { * an id as an input so multiple patterns can be used and identified. * It also allows a string pattern or a RegExp. */ - private static pattern(pattern: RegExp | string, id = 'pattern'): ValidatorFn { + public static pattern(pattern: RegExp | string, id = 'pattern'): ValidatorFn { return (control: AbstractControl): ValidationErrors | null => { return FormValidators.isPatternFound(control, pattern) ? null @@ -22,7 +22,7 @@ export class FormValidators { * Unlike "pattern" validator, "errorPattern" uses the pattern * to identify the errors in the FormControl value. */ - private static errorPattern(pattern: RegExp | string, id = 'errorPattern'): ValidatorFn { + public static errorPattern(pattern: RegExp | string, id = 'errorPattern'): ValidatorFn { return (control: AbstractControl): ValidationErrors | null => { return FormValidators.isPatternFound(control, pattern) ? { diff --git a/packages/angular/src/form-validation/index.ts b/packages/angular/src/form-validation/index.ts new file mode 100644 index 0000000..2e9235a --- /dev/null +++ b/packages/angular/src/form-validation/index.ts @@ -0,0 +1 @@ +export * from './form-validators'; diff --git a/packages/angular/src/index.ts b/packages/angular/src/index.ts index c63ecc3..a9fadbd 100644 --- a/packages/angular/src/index.ts +++ b/packages/angular/src/index.ts @@ -1,2 +1,3 @@ export * from './data'; +export * from './form-validation'; export * from './angular-providers.builder';