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

85 lines
3.8 KiB
TypeScript

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({
selector: 'app-dynamic-field-project',
templateUrl: 'dynamic-field-project.component.html',
styleUrls: ['./dynamic-field-project.component.scss'],
providers: [DataManagementPlanService],
encapsulation: ViewEncapsulation.None
})
export class DynamicFieldProjectComponent implements OnInit {
constructor(private languageResolverService: LanguageResolverService, private dmpService: DataManagementPlanService) { }
@Input()
dependencies: Array<FormGroup>
@Input()
formGroup: FormGroup;
@ViewChild(AutoCompleteComponent)
autocomplete: AutoCompleteComponent
autoCompleteConfiguration: AutoCompleteConfiguration
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);
}
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;
}
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;
}
}
if (this.formGroup.get("value").disabled) {
this.updateConfiguration();
this.formGroup.get("value").enable({ onlySelf: true, emitEvent: false })
}
return false;
}
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;
}
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) })
}
return dependencies;
}
displayFunction(item: any): any {
if(!item) return null;
return item["label"];
}
assignFunction(item: any): any {
if(!item) return null;
return item["id"];
}
}