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'
6 export type BuildFormValidator = {
7 VALIDATORS: ValidatorFn[],
8 MESSAGES: { [ name: string ]: string }
10 export type BuildFormArgument = {
11 [ id: string ]: BuildFormValidator
13 export type BuildFormDefaultValues = {
14 [ name: string ]: string | string[]
18 export class FormValidatorService {
21 private formBuilder: FormBuilder,
25 buildForm (obj: BuildFormArgument, defaultValues: BuildFormDefaultValues = {}) {
26 const formErrors: FormReactiveErrors = {}
27 const validationMessages: FormReactiveValidationMessages = {}
28 const group: { [key: string]: any } = {}
30 for (const name of Object.keys(obj)) {
33 const field = obj[name]
34 if (field && field.MESSAGES) validationMessages[name] = field.MESSAGES
36 const defaultValue = defaultValues[name] || ''
38 if (field && field.VALIDATORS) group[name] = [ defaultValue, field.VALIDATORS ]
39 else group[name] = [ defaultValue ]
42 const form = this.formBuilder.group(group)
43 return { form, formErrors, validationMessages }
48 formErrors: FormReactiveErrors,
49 validationMessages: FormReactiveValidationMessages,
50 obj: BuildFormArgument,
51 defaultValues: BuildFormDefaultValues = {}
53 for (const name of Object.keys(obj)) {
56 const field = obj[name]
57 if (field && field.MESSAGES) validationMessages[name] = field.MESSAGES
59 const defaultValue = defaultValues[name] || ''
61 if (field && field.VALIDATORS) form.addControl(name, new FormControl(defaultValue, field.VALIDATORS))
62 else form.addControl(name, new FormControl(defaultValue))