]>
Commit | Line | Data |
---|---|---|
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 | } |