2019-02-13 14:44:08 +01:00
|
|
|
import { Component, Input, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
|
2019-07-24 17:29:29 +02:00
|
|
|
import { FormArray, FormBuilder, FormGroup, FormControl } from '@angular/forms';
|
2019-01-18 18:03:45 +01:00
|
|
|
import { DmpProfileFieldDataType } from '../../../../core/common/enum/dmp-profile-field-type';
|
|
|
|
import { DmpProfileType } from '../../../../core/common/enum/dmp-profile-type';
|
|
|
|
import { DmpProfileDefinition } from '../../../../core/model/dmp-profile/dmp-profile';
|
2019-07-24 17:29:29 +02:00
|
|
|
import { SingleAutoCompleteConfiguration } from '../../../../library/auto-complete/single/single-auto-complete-configuration';
|
|
|
|
import { MultipleAutoCompleteConfiguration } from '../../../../library/auto-complete/multiple/multiple-auto-complete-configuration';
|
|
|
|
import { DmpProfileService } from '../../../../core/services/dmp/dmp-profile.service';
|
|
|
|
import { DmpProfileExternalAutocompleteCriteria } from '../../../../core/query/dmp/dmp-profile-external-autocomplete-criteria';
|
|
|
|
import { RequestItem } from '../../../../core/query/request-item';
|
|
|
|
import { DmpProfileField } from '../../../../core/model/dmp-profile/dmp-profile-field';
|
2019-01-18 18:03:45 +01:00
|
|
|
|
|
|
|
@Component({
|
|
|
|
selector: 'app-dynamic-dmp-field-resolver',
|
|
|
|
templateUrl: 'dynamic-dmp-field-resolver.component.html',
|
|
|
|
styleUrls: ['./dynamic-dmp-field-resolver.component.scss']
|
|
|
|
})
|
|
|
|
export class DynamicDmpFieldResolverComponent implements OnInit, OnDestroy {
|
|
|
|
|
|
|
|
|
|
|
|
dmpProfileFieldDataType = DmpProfileFieldDataType;
|
|
|
|
dmpProfileTypeEnum = DmpProfileType;
|
2019-07-24 17:29:29 +02:00
|
|
|
singleAutocompleteMap: { [id: string]: SingleAutoCompleteConfiguration; } = {};
|
|
|
|
multiAutocompleteMap: { [id: string]: MultipleAutoCompleteConfiguration; } = {};
|
2019-01-18 18:03:45 +01:00
|
|
|
|
2019-07-24 17:29:29 +02:00
|
|
|
@Input() dmpProfileId: string;
|
2019-02-13 14:44:08 +01:00
|
|
|
@Input() dmpProfileDefinition: DmpProfileDefinition;
|
|
|
|
@Input() formGroup: FormGroup;
|
2019-12-19 14:48:24 +01:00
|
|
|
@Input() isUserOwner: boolean;
|
2019-01-18 18:03:45 +01:00
|
|
|
|
2019-07-24 17:29:29 +02:00
|
|
|
constructor(
|
|
|
|
private dmpProfileService: DmpProfileService
|
|
|
|
) { }
|
|
|
|
|
2019-01-18 18:03:45 +01:00
|
|
|
ngOnInit(): void {
|
2019-02-13 14:44:08 +01:00
|
|
|
this.createControleFields();
|
2019-07-24 17:29:29 +02:00
|
|
|
|
|
|
|
if (this.dmpProfileDefinition) {
|
|
|
|
this.dmpProfileDefinition.fields.forEach(
|
|
|
|
field => {
|
|
|
|
if (field.externalAutocomplete) {
|
|
|
|
if (field.externalAutocomplete.multiAutoComplete) {
|
|
|
|
const multiConf: MultipleAutoCompleteConfiguration = {
|
|
|
|
filterFn: this.externalAutocomplete.bind(this, field),
|
|
|
|
initialItems: (extraData) => this.externalAutocomplete('', field.id),
|
|
|
|
displayFn: (item) => item['label'],
|
|
|
|
titleFn: (item) => item['label']
|
|
|
|
}
|
|
|
|
this.multiAutocompleteMap[field.id] = multiConf;
|
|
|
|
} else {
|
|
|
|
const singleConf: SingleAutoCompleteConfiguration = {
|
|
|
|
filterFn: this.externalAutocomplete.bind(this, field),
|
|
|
|
initialItems: (extraData) => this.externalAutocomplete('', field.id),
|
|
|
|
displayFn: (item) => item['label'],
|
|
|
|
titleFn: (item) => item['label']
|
|
|
|
}
|
|
|
|
this.singleAutocompleteMap[field.id] = singleConf;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
2019-02-13 14:44:08 +01:00
|
|
|
}
|
2019-07-24 17:29:29 +02:00
|
|
|
|
2019-02-13 14:44:08 +01:00
|
|
|
ngOnChanges(changes: SimpleChanges) {
|
|
|
|
if (changes['dmpProfileDefinition'] && !changes['dmpProfileDefinition'].isFirstChange()) {
|
|
|
|
this.createControleFields();
|
|
|
|
}
|
|
|
|
}
|
2019-01-18 18:03:45 +01:00
|
|
|
|
2019-02-13 14:44:08 +01:00
|
|
|
createControleFields(): void {
|
|
|
|
if (this.dmpProfileDefinition != null) {
|
|
|
|
const diasableBoolean = this.formGroup.disabled;
|
|
|
|
this.formGroup.addControl('properties', new FormBuilder().group([]));
|
|
|
|
(<FormGroup>this.formGroup.get('properties')).addControl('fields', new FormBuilder().array([]));
|
|
|
|
this.dmpProfileDefinition.fields.forEach(item => {
|
|
|
|
(<FormArray>this.formGroup.get('properties').get('fields')).push(new FormBuilder().group({
|
|
|
|
id: [{ value: item.id, disabled: diasableBoolean }],
|
|
|
|
value: [{ value: item.value, disabled: diasableBoolean }]
|
|
|
|
}));
|
|
|
|
});
|
|
|
|
}
|
2019-07-24 17:29:29 +02:00
|
|
|
if (this.dmpProfileDefinition == null) {
|
2019-02-13 14:44:08 +01:00
|
|
|
this.formGroup.removeControl('properties');
|
|
|
|
}
|
2019-01-18 18:03:45 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
ngOnDestroy(): void {
|
|
|
|
this.formGroup.removeControl('properties');
|
|
|
|
}
|
2019-07-24 17:29:29 +02:00
|
|
|
|
|
|
|
externalAutocomplete(query: any, extFieldID: any) {
|
|
|
|
const autocompleteRequestItem: RequestItem<DmpProfileExternalAutocompleteCriteria> = new RequestItem();
|
|
|
|
autocompleteRequestItem.criteria = new DmpProfileExternalAutocompleteCriteria();
|
|
|
|
|
|
|
|
if (typeof extFieldID == "string" && typeof query == "string") {
|
|
|
|
autocompleteRequestItem.criteria.like = query;
|
|
|
|
autocompleteRequestItem.criteria.profileID = this.dmpProfileId;
|
|
|
|
autocompleteRequestItem.criteria.fieldID = extFieldID;
|
|
|
|
} else {
|
|
|
|
autocompleteRequestItem.criteria.like = extFieldID;
|
|
|
|
autocompleteRequestItem.criteria.profileID = this.dmpProfileId;
|
|
|
|
autocompleteRequestItem.criteria.fieldID = query.id;
|
|
|
|
}
|
|
|
|
|
|
|
|
return this.dmpProfileService.externalAutocomplete(autocompleteRequestItem);
|
|
|
|
}
|
2019-01-18 18:03:45 +01:00
|
|
|
}
|