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 @Input() formGroup: FormGroup; @ViewChild(AutoCompleteComponent) autocomplete: AutoCompleteComponent autoCompleteConfiguration: AutoCompleteConfiguration ngOnInit(): void { let requestItem = new RequestItem() 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() 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 { if (!this.dependencies || this.dependencies.length == 0) return [] let dependencies = new Array(); 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"]; } }