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