import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { FormControl, FormGroup, Validators } from “@angular/forms”; import “rxjs/add/observable/of”; import { DataModel, DataModelItem } from “../data.model”; import { Observable } from “rxjs/Observable”;

@Component({

moduleId: module.id,
selector: 'teneo-detail',
templateUrl: './detail.component.html',
styleUrls: ['./detail.component.scss']

}) export class DetailComponent implements OnInit {

@Input() title: string;
@Input() data: any;
@Input() modelData: DataModel;
@Output() cancelEvent = new EventEmitter();
@Output() saveEvent = new EventEmitter();
protected form: FormGroup = new FormGroup({});

ngOnInit(): void {
  this.form = this.buildForm(this.modelData);
}

protected buildForm(data: DataModel): FormGroup {
  let group: any = {};
  data.items.forEach(item => this.addModelData(group, item));
  return new FormGroup(group);
}

private addModelData(group: any, data: DataModelItem): any {
  if (data.control.controlType() == 'group') {
    let subgroup: any = {};
    data.control.info.group.data.forEach(item => this.addModelData(subgroup, item));
    group[data.key] = new FormControl(subgroup);
  } else {
    let fc = new FormControl(data.key);
    if (data.control.required) {
      fc.setValidators(Validators.required);
    }
    group[data.key] = fc;
  }
  return group;
}

cancelForm(): boolean {
  this.cancelEvent.next();
  return false;
}

submitForm(): boolean {
  this.saveEvent.next(this.modelData);
  return false;
}

}