]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - client/src/app/shared/forms/form-validators/form-validator.service.ts
Implement daily upload limit (#956)
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / forms / form-validators / form-validator.service.ts
1 import { FormBuilder, FormControl, FormGroup, ValidatorFn } from '@angular/forms'
2 import { Injectable } from '@angular/core'
3 import { FormReactiveErrors, FormReactiveValidationMessages } from '@app/shared/forms/form-reactive'
4
5 export type BuildFormValidator = {
6 VALIDATORS: ValidatorFn[],
7 MESSAGES: { [ name: string ]: string }
8 }
9 export type BuildFormArgument = {
10 [ id: string ]: BuildFormValidator
11 }
12 export type BuildFormDefaultValues = {
13 [ name: string ]: string | string[]
14 }
15
16 @Injectable()
17 export class FormValidatorService {
18
19 constructor (
20 private formBuilder: FormBuilder
21 ) {}
22
23 buildForm (obj: BuildFormArgument, defaultValues: BuildFormDefaultValues = {}) {
24 const formErrors: FormReactiveErrors = {}
25 const validationMessages: FormReactiveValidationMessages = {}
26 const group: { [key: string]: any } = {}
27
28 for (const name of Object.keys(obj)) {
29 formErrors[name] = ''
30
31 const field = obj[name]
32 if (field && field.MESSAGES) validationMessages[name] = field.MESSAGES
33
34 const defaultValue = defaultValues[name] || ''
35
36 if (field && field.VALIDATORS) group[name] = [ defaultValue, field.VALIDATORS ]
37 else group[name] = [ defaultValue ]
38 }
39
40 const form = this.formBuilder.group(group)
41 return { form, formErrors, validationMessages }
42 }
43
44 updateForm (
45 form: FormGroup,
46 formErrors: FormReactiveErrors,
47 validationMessages: FormReactiveValidationMessages,
48 obj: BuildFormArgument,
49 defaultValues: BuildFormDefaultValues = {}
50 ) {
51 for (const name of Object.keys(obj)) {
52 formErrors[name] = ''
53
54 const field = obj[name]
55 if (field && field.MESSAGES) validationMessages[name] = field.MESSAGES
56
57 const defaultValue = defaultValues[name] || ''
58
59 if (field && field.VALIDATORS) form.addControl(name, new FormControl(defaultValue, field.VALIDATORS))
60 else form.addControl(name, new FormControl(defaultValue))
61 }
62 }
63
64 }