MESSAGES: { [ name: string ]: string }
}
export type BuildFormArgument = {
- [ id: string ]: BuildFormValidator
+ [ id: string ]: BuildFormValidator | BuildFormArgument
}
export type BuildFormDefaultValues = {
- [ name: string ]: string | string[]
+ [ name: string ]: string | string[] | BuildFormDefaultValues
}
@Injectable()
formErrors[name] = ''
const field = obj[name]
- if (field && field.MESSAGES) validationMessages[name] = field.MESSAGES
+ if (this.isRecursiveField(field)) {
+ const result = this.buildForm(field as BuildFormArgument, defaultValues[name] as BuildFormDefaultValues)
+ group[name] = result.form
+ formErrors[name] = result.formErrors
+ validationMessages[name] = result.validationMessages
+
+ continue
+ }
+
+ if (field && field.MESSAGES) validationMessages[name] = field.MESSAGES as { [ name: string ]: string }
const defaultValue = defaultValues[name] || ''
formErrors[name] = ''
const field = obj[name]
- if (field && field.MESSAGES) validationMessages[name] = field.MESSAGES
+ if (this.isRecursiveField(field)) {
+ this.updateForm(
+ form[name],
+ formErrors[name] as FormReactiveErrors,
+ validationMessages[name] as FormReactiveValidationMessages,
+ obj[name] as BuildFormArgument,
+ defaultValues[name] as BuildFormDefaultValues
+ )
+ continue
+ }
+
+ if (field && field.MESSAGES) validationMessages[name] = field.MESSAGES as { [ name: string ]: string }
const defaultValue = defaultValues[name] || ''
- if (field && field.VALIDATORS) form.addControl(name, new FormControl(defaultValue, field.VALIDATORS))
+ if (field && field.VALIDATORS) form.addControl(name, new FormControl(defaultValue, field.VALIDATORS as ValidatorFn[]))
else form.addControl(name, new FormControl(defaultValue))
}
}
+ private isRecursiveField (field: any) {
+ return field && typeof field === 'object' && !field.MESSAGES && !field.VALIDATORS
+ }
}