import { AfterViewInit, ChangeDetectorRef, Component, ContentChildren, EventEmitter, Input, OnChanges, Output, QueryList, SimpleChanges } from "@angular/core"; import { FormGroup } from "@angular/forms"; import { DynamicFormValidationService, DynamicFormControlModel, DynamicFormArrayGroupModel, DynamicFormControlComponent, DynamicFormControlEvent, DynamicTemplateDirective, DYNAMIC_FORM_CONTROL_TYPE_ARRAY, DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX, DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP, DYNAMIC_FORM_CONTROL_TYPE_GROUP, DYNAMIC_FORM_CONTROL_TYPE_INPUT, DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP, DYNAMIC_FORM_CONTROL_TYPE_SELECT, DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA } from "@ng2-dynamic-forms/core"; export const enum BootstrapFormControlType { Array = 1, //"ARRAY", Checkbox = 2, //"CHECKBOX", Group = 3, //"GROUP", Input = 4, //"INPUT", RadioGroup = 5, //"RADIO_GROUP", Select = 6, //"SELECT", TextArea = 7, //"TEXTAREA" } @Component({ selector: "dynamic-bootstrap-form-control,dynamic-form-bootstrap-control", templateUrl: "./dynamic-bootstrap-form-control.component.html" }) export class DynamicBootstrapFormControlComponent extends DynamicFormControlComponent implements AfterViewInit, OnChanges { @ContentChildren(DynamicTemplateDirective) contentTemplates: QueryList; @Input("templates") inputTemplates: QueryList; @Input() asBootstrapFormGroup: boolean = true; @Input() bindId: boolean = true; @Input() context: DynamicFormArrayGroupModel | null = null; @Input() group: FormGroup; @Input() hasErrorMessaging: boolean = false; @Input() model: DynamicFormControlModel; @Output() blur: EventEmitter = new EventEmitter(); @Output() change: EventEmitter = new EventEmitter(); @Output() focus: EventEmitter = new EventEmitter(); type: BootstrapFormControlType | null; constructor(protected changeDetectorRef: ChangeDetectorRef, protected validationService: DynamicFormValidationService) { super(changeDetectorRef, validationService); } ngOnChanges(changes: SimpleChanges) { super.ngOnChanges(changes); if (changes["model"]) { this.type = DynamicBootstrapFormControlComponent.getFormControlType(this.model); } } static getFormControlType(model: DynamicFormControlModel): BootstrapFormControlType | null { switch (model.type) { case DYNAMIC_FORM_CONTROL_TYPE_ARRAY: return BootstrapFormControlType.Array; case DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX: return BootstrapFormControlType.Checkbox; case DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP: case DYNAMIC_FORM_CONTROL_TYPE_GROUP: return BootstrapFormControlType.Group; case DYNAMIC_FORM_CONTROL_TYPE_INPUT: return BootstrapFormControlType.Input; case DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP: return BootstrapFormControlType.RadioGroup; case DYNAMIC_FORM_CONTROL_TYPE_SELECT: return BootstrapFormControlType.Select; case DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA: return BootstrapFormControlType.TextArea; default: return null; } } }