diff options
author | Chocobozzz <me@florianbigard.com> | 2018-06-05 10:58:45 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2018-06-05 10:58:45 +0200 |
commit | d18d64787b3ea174f7dc2740c8c8c9555625047e (patch) | |
tree | e65089e0ca81117c1ada981b9b8a524afa8d70f5 /client/src/app/shared/forms/form-validators/form-validator.service.ts | |
parent | 25acef90a85c1584880dec96aa402f896af8364a (diff) | |
download | PeerTube-d18d64787b3ea174f7dc2740c8c8c9555625047e.tar.gz PeerTube-d18d64787b3ea174f7dc2740c8c8c9555625047e.tar.zst PeerTube-d18d64787b3ea174f7dc2740c8c8c9555625047e.zip |
Form validators refractoring
Diffstat (limited to 'client/src/app/shared/forms/form-validators/form-validator.service.ts')
-rw-r--r-- | client/src/app/shared/forms/form-validators/form-validator.service.ts | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/client/src/app/shared/forms/form-validators/form-validator.service.ts b/client/src/app/shared/forms/form-validators/form-validator.service.ts new file mode 100644 index 000000000..5c3d3e4bd --- /dev/null +++ b/client/src/app/shared/forms/form-validators/form-validator.service.ts | |||
@@ -0,0 +1,65 @@ | |||
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 | import { I18n } from '@ngx-translate/i18n-polyfill' | ||
5 | |||
6 | export type BuildFormArgument = { | ||
7 | [ id: string ]: { | ||
8 | VALIDATORS: ValidatorFn[], | ||
9 | MESSAGES: { [ name: string ]: string } | ||
10 | } | ||
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 | private i18n: I18n | ||
22 | ) {} | ||
23 | |||
24 | buildForm (obj: BuildFormArgument, defaultValues: BuildFormDefaultValues = {}) { | ||
25 | const formErrors: FormReactiveErrors = {} | ||
26 | const validationMessages: FormReactiveValidationMessages = {} | ||
27 | const group: { [key: string]: any } = {} | ||
28 | |||
29 | for (const name of Object.keys(obj)) { | ||
30 | formErrors[name] = '' | ||
31 | |||
32 | const field = obj[name] | ||
33 | if (field && field.MESSAGES) validationMessages[name] = field.MESSAGES | ||
34 | |||
35 | const defaultValue = defaultValues[name] || '' | ||
36 | |||
37 | if (field && field.VALIDATORS) group[name] = [ defaultValue, field.VALIDATORS ] | ||
38 | else group[name] = [ defaultValue ] | ||
39 | } | ||
40 | |||
41 | const form = this.formBuilder.group(group) | ||
42 | return { form, formErrors, validationMessages } | ||
43 | } | ||
44 | |||
45 | updateForm ( | ||
46 | form: FormGroup, | ||
47 | formErrors: FormReactiveErrors, | ||
48 | validationMessages: FormReactiveValidationMessages, | ||
49 | obj: BuildFormArgument, | ||
50 | defaultValues: BuildFormDefaultValues = {} | ||
51 | ) { | ||
52 | for (const name of Object.keys(obj)) { | ||
53 | formErrors[name] = '' | ||
54 | |||
55 | const field = obj[name] | ||
56 | if (field && field.MESSAGES) validationMessages[name] = field.MESSAGES | ||
57 | |||
58 | const defaultValue = defaultValues[name] || '' | ||
59 | |||
60 | if (field && field.VALIDATORS) form.addControl(name, new FormControl(defaultValue, field.VALIDATORS)) | ||
61 | else form.addControl(name, new FormControl(defaultValue)) | ||
62 | } | ||
63 | } | ||
64 | |||
65 | } | ||