2018-03-28 15:24:47 +02:00
|
|
|
import { Component, ViewEncapsulation, OnInit, Input, ViewChild } from "@angular/core";
|
|
|
|
import { FormGroup } from "@angular/forms";
|
|
|
|
import { DataManagementPlanService } from "../../../../services/data-management-plan/data-management-plan.service";
|
|
|
|
import { AutoCompleteConfiguration } from "../../../../shared/components/autocomplete/AutoCompleteConfiguration";
|
|
|
|
import { RequestItem } from "../../../../models/criteria/RequestItem";
|
|
|
|
import { DynamicFieldProjectCriteria, DynamicFieldProjectCriteriaDependencies } from "../../../../models/dynamic-field-project/DynamicFieldProjectCriteria";
|
|
|
|
import { AutoCompleteComponent } from "../../../../shared/components/auto-complete/auto-complete.component";
|
|
|
|
import { DynamicFieldDependency } from "../../../../models/data-managemnt-plans/DynamicFieldDependency";
|
|
|
|
import { LanguageResolverService } from "../../../../services/language-resolver/language-resolver.service";
|
|
|
|
|
|
|
|
@Component({
|
2018-05-28 11:50:42 +02:00
|
|
|
selector: 'app-dynamic-field-project',
|
|
|
|
templateUrl: 'dynamic-field-project.component.html',
|
|
|
|
styleUrls: ['./dynamic-field-project.component.scss'],
|
|
|
|
encapsulation: ViewEncapsulation.None
|
2018-03-28 15:24:47 +02:00
|
|
|
})
|
|
|
|
export class DynamicFieldProjectComponent implements OnInit {
|
|
|
|
|
2018-05-28 11:50:42 +02:00
|
|
|
constructor(private languageResolverService: LanguageResolverService, private dmpService: DataManagementPlanService) { }
|
2018-03-28 15:24:47 +02:00
|
|
|
|
2018-05-28 11:50:42 +02:00
|
|
|
@Input()
|
|
|
|
dependencies: Array<FormGroup>
|
2018-03-28 15:24:47 +02:00
|
|
|
|
2018-05-28 11:50:42 +02:00
|
|
|
@Input()
|
|
|
|
formGroup: FormGroup;
|
2018-03-28 15:24:47 +02:00
|
|
|
|
2018-05-28 11:50:42 +02:00
|
|
|
@ViewChild(AutoCompleteComponent)
|
|
|
|
autocomplete: AutoCompleteComponent
|
2018-03-28 15:24:47 +02:00
|
|
|
|
2018-05-28 11:50:42 +02:00
|
|
|
autoCompleteConfiguration: AutoCompleteConfiguration
|
2018-03-28 15:24:47 +02:00
|
|
|
|
2018-05-28 11:50:42 +02:00
|
|
|
ngOnInit(): void {
|
|
|
|
let requestItem = new RequestItem<DynamicFieldProjectCriteria>()
|
|
|
|
requestItem.criteria = { id: this.formGroup.get("id").value, dynamicFields: this.buildDependencies() }
|
|
|
|
this.autoCompleteConfiguration = new AutoCompleteConfiguration(this.dmpService.getDynamicField.bind(this.dmpService), requestItem);
|
|
|
|
}
|
2018-03-28 15:24:47 +02:00
|
|
|
|
2018-05-28 11:50:42 +02:00
|
|
|
hasUnResolvedDependencies() {
|
|
|
|
if (this.dependencies == null || this.dependencies.length == 0) {
|
|
|
|
if (this.formGroup.get("value").disabled) {
|
|
|
|
this.updateConfiguration();
|
|
|
|
this.formGroup.get("value").enable({ onlySelf: true, emitEvent: false })
|
|
|
|
}
|
|
|
|
return false;
|
2018-03-28 15:24:47 +02:00
|
|
|
}
|
2018-05-28 11:50:42 +02:00
|
|
|
for (let i = 0; i < this.dependencies.length; i++) {
|
|
|
|
if (!this.dependencies[i].get("value").value) {
|
|
|
|
this.formGroup.get("value").disable({ onlySelf: true, emitEvent: false })
|
|
|
|
return true;
|
|
|
|
}
|
2018-03-28 15:24:47 +02:00
|
|
|
}
|
2018-05-28 11:50:42 +02:00
|
|
|
if (this.formGroup.get("value").disabled) {
|
|
|
|
this.updateConfiguration();
|
|
|
|
this.formGroup.get("value").enable({ onlySelf: true, emitEvent: false })
|
2018-03-28 15:24:47 +02:00
|
|
|
}
|
2018-05-28 11:50:42 +02:00
|
|
|
return false;
|
|
|
|
}
|
2018-03-28 15:24:47 +02:00
|
|
|
|
2018-05-28 11:50:42 +02:00
|
|
|
updateConfiguration() {
|
|
|
|
let requestItem = new RequestItem<DynamicFieldProjectCriteria>()
|
|
|
|
requestItem.criteria = { id: this.formGroup.get("id").value, dynamicFields: this.buildDependencies() }
|
|
|
|
this.autoCompleteConfiguration = new AutoCompleteConfiguration(this.dmpService.getDynamicField.bind(this.dmpService), requestItem);
|
|
|
|
this.autocomplete.inputData = this.autoCompleteConfiguration;
|
|
|
|
}
|
2018-03-28 15:24:47 +02:00
|
|
|
|
2018-05-28 11:50:42 +02:00
|
|
|
buildDependencies(): Array<DynamicFieldProjectCriteriaDependencies> {
|
|
|
|
if (!this.dependencies || this.dependencies.length == 0) return []
|
|
|
|
let dependencies = new Array<DynamicFieldProjectCriteriaDependencies>();
|
|
|
|
for (let i = 0; i < this.dependencies.length; i++) {
|
|
|
|
dependencies.push({ property: this.dependencies[i].get("id").value, value: this.assignFunction(this.dependencies[i].get("value").value) })
|
2018-03-28 15:24:47 +02:00
|
|
|
}
|
2018-05-28 11:50:42 +02:00
|
|
|
return dependencies;
|
|
|
|
}
|
|
|
|
|
|
|
|
displayFunction(item: any): any {
|
|
|
|
if (!item) return null;
|
|
|
|
return item["label"];
|
|
|
|
}
|
|
|
|
|
|
|
|
assignFunction(item: any): any {
|
|
|
|
if (!item) return null;
|
|
|
|
return item["id"];
|
|
|
|
}
|
|
|
|
}
|