]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/shared/shared-forms/form-validator.service.ts
Handle async validators
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / shared-forms / form-validator.service.ts
index 055fbb2d956a0a64ebc24f51fbc5300ecaad1ff8..0fe50ac9bf7bc4be69be0907db5fc6bdb12e34b5 100644 (file)
@@ -1,5 +1,5 @@
 import { Injectable } from '@angular/core'
-import { FormBuilder, FormControl, FormGroup, ValidatorFn } from '@angular/forms'
+import { AsyncValidatorFn, FormArray, FormBuilder, FormControl, FormGroup, ValidatorFn } from '@angular/forms'
 import { BuildFormArgument, BuildFormDefaultValues } from '../form-validators/form-validator.model'
 import { FormReactiveErrors, FormReactiveValidationMessages } from './form-reactive'
 
@@ -68,11 +68,23 @@ export class FormValidatorService {
 
       form.addControl(
         name,
-        new FormControl(defaultValue, field?.VALIDATORS as ValidatorFn[])
+        new FormControl(defaultValue, field?.VALIDATORS as ValidatorFn[], field?.ASYNC_VALIDATORS as AsyncValidatorFn[])
       )
     }
   }
 
+  updateTreeValidity (group: FormGroup | FormArray): void {
+    for (const key of Object.keys(group.controls)) {
+      const abstractControl = group.controls[key] as FormControl
+
+      if (abstractControl instanceof FormGroup || abstractControl instanceof FormArray) {
+        this.updateTreeValidity(abstractControl)
+      } else {
+        abstractControl.updateValueAndValidity({ emitEvent: false })
+      }
+    }
+  }
+
   private isRecursiveField (field: any) {
     return field && typeof field === 'object' && !field.MESSAGES && !field.VALIDATORS
   }