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 BuildFormArgument = {
8 VALIDATORS: ValidatorFn[],
9 MESSAGES: { [ name: string ]: string }
12 export type BuildFormDefaultValues = {
13 [ name: string ]: string | string[]
17 export class FormValidatorService {
20 private formBuilder: FormBuilder,
24 buildForm (obj: BuildFormArgument, defaultValues: BuildFormDefaultValues = {}) {
25 const formErrors: FormReactiveErrors = {}
26 const validationMessages: FormReactiveValidationMessages = {}
27 const group: { [key: string]: any } = {}
29 for (const name of Object.keys(obj)) {
32 const field = obj[name]
33 if (field && field.MESSAGES) validationMessages[name] = field.MESSAGES
35 const defaultValue = defaultValues[name] || ''
37 if (field && field.VALIDATORS) group[name] = [ defaultValue, field.VALIDATORS ]
38 else group[name] = [ defaultValue ]
41 const form = this.formBuilder.group(group)
42 return { form, formErrors, validationMessages }
47 formErrors: FormReactiveErrors,
48 validationMessages: FormReactiveValidationMessages,
49 obj: BuildFormArgument,
50 defaultValues: BuildFormDefaultValues = {}
52 for (const name of Object.keys(obj)) {
55 const field = obj[name]
56 if (field && field.MESSAGES) validationMessages[name] = field.MESSAGES
58 const defaultValue = defaultValues[name] || ''
60 if (field && field.VALIDATORS) form.addControl(name, new FormControl(defaultValue, field.VALIDATORS))
61 else form.addControl(name, new FormControl(defaultValue))