argos/dmp-frontend/src/app/dmps/editor/dynamic-fields-project/dynamic-field-project/dynamic-field-project.compo...

85 lines
3.5 KiB
TypeScript
Raw Normal View History

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 { 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";
2018-07-24 13:19:52 +02:00
import { AutoCompleteConfiguration } from "../../../../shared/components/auto-complete/AutoCompleteConfiguration";
2018-03-28 15:24:47 +02:00
@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"];
}
}