2024-01-15 17:47:34 +01:00
|
|
|
import { Component, Input, OnInit } from '@angular/core';
|
|
|
|
import { UntypedFormGroup } from '@angular/forms';
|
2023-12-28 16:18:49 +01:00
|
|
|
import { ReferenceType } from '@app/core/common/enum/reference-type';
|
2024-01-15 17:47:34 +01:00
|
|
|
import { ReferenceService } from '@app/core/services/reference/reference.service';
|
|
|
|
import { EnumUtils } from '@app/core/services/utilities/enum-utils.service';
|
|
|
|
import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration';
|
|
|
|
import { BaseComponent } from '@common/base/base.component';
|
2023-12-28 16:18:49 +01:00
|
|
|
|
|
|
|
@Component({
|
|
|
|
selector: 'app-reference-field-component',
|
|
|
|
templateUrl: 'reference-field.component.html',
|
|
|
|
styleUrls: ['./reference-field.component.scss']
|
|
|
|
})
|
|
|
|
export class ReferenceFieldComponent extends BaseComponent implements OnInit {
|
|
|
|
|
|
|
|
@Input() referenceType: ReferenceType = null;
|
|
|
|
@Input() form: UntypedFormGroup = null;
|
|
|
|
|
2024-01-15 17:47:34 +01:00
|
|
|
multipleAutoCompleteSearchConfiguration: MultipleAutoCompleteConfiguration;
|
|
|
|
// referenceTypeEnum = ReferenceType;
|
|
|
|
|
2023-12-28 16:18:49 +01:00
|
|
|
// @Input() viewOnly = false;
|
|
|
|
// @Output() formChanged: EventEmitter<any> = new EventEmitter();
|
|
|
|
|
|
|
|
// public filteringTagsAsync = false;
|
|
|
|
// public filteredTags: ExternalSourceItemModel[];
|
|
|
|
|
|
|
|
// readonly separatorKeysCodes: number[] = [ENTER, COMMA];
|
|
|
|
|
|
|
|
// externalDatasetAutoCompleteConfiguration: SingleAutoCompleteConfiguration = {
|
|
|
|
// filterFn: this.searchDatasetExternalDatasets.bind(this),
|
|
|
|
// initialItems: (type) => this.searchDatasetExternalDatasets('', type),//.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1),
|
|
|
|
// displayFn: (item) => item ? item.name : null,
|
|
|
|
// titleFn: (item) => item ? item.name : null,
|
|
|
|
// subtitleFn: (item) => item.source ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.source : item.tag ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.tag : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE')
|
|
|
|
// };
|
|
|
|
|
|
|
|
// registriesAutoCompleteConfiguration: SingleAutoCompleteConfiguration = {
|
|
|
|
// filterFn: this.searchDatasetExternalRegistries.bind(this),
|
|
|
|
// initialItems: (type) => this.searchDatasetExternalRegistries('', type),
|
|
|
|
// displayFn: (item) => item ? item.name : null,
|
|
|
|
// titleFn: (item) => item ? item.name : null,
|
|
|
|
// subtitleFn: (item) => item.source ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.source : item.tag ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.tag : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE')
|
|
|
|
// };
|
|
|
|
|
|
|
|
// dataRepositoriesAutoCompleteConfiguration: SingleAutoCompleteConfiguration = {
|
|
|
|
// filterFn: this.searchDatasetExternalDataRepositories.bind(this),
|
|
|
|
// initialItems: (type) => this.searchDatasetExternalDataRepositories('', type),
|
|
|
|
// displayFn: (item) => item ? item.name : null,
|
|
|
|
// titleFn: (item) => item ? item.name : null,
|
|
|
|
// subtitleFn: (item) => item.source ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.source : item.tag ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.tag : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE')
|
|
|
|
// };
|
|
|
|
|
|
|
|
// servicesAutoCompleteConfiguration: SingleAutoCompleteConfiguration = {
|
|
|
|
// filterFn: this.searchDatasetExternalServices.bind(this),
|
|
|
|
// initialItems: (type) => this.searchDatasetExternalServices('', type),
|
|
|
|
// displayFn: (item) => item ? item.label : null,
|
|
|
|
// titleFn: (item) => item ? item.label : null,
|
|
|
|
// subtitleFn: (item) => item.source ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.source : item.tag ? this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.SOURCE:') + item.tag : this.language.instant('TYPES.EXTERNAL-DATASET-TYPE.NO-SOURCE')
|
|
|
|
// };
|
|
|
|
|
|
|
|
// tagsAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = {
|
|
|
|
// filterFn: this.filterTags.bind(this),
|
|
|
|
// initialItems: (excludedItems: any[]) => this.filterTags('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))),
|
|
|
|
// displayFn: (item) => this.showTag(item),
|
|
|
|
// titleFn: (item) => item['name'],
|
|
|
|
// valueAssign: (item) => this.addTag(item)
|
|
|
|
// };
|
|
|
|
|
|
|
|
// externalSourcesConfiguration: ExternalSourcesConfiguration;
|
|
|
|
|
|
|
|
// // new AutoCompleteConfiguration(this.externalSourcesService.searchDatasetRepository.bind(this.externalSourcesService),
|
|
|
|
|
|
|
|
constructor(
|
|
|
|
// private dialog: MatDialog,
|
|
|
|
// private router: Router,
|
|
|
|
// private language: TranslateService,
|
|
|
|
// private externalSourcesService: ExternalSourcesService,
|
|
|
|
// private externalSourcesConfigurationService: ExternalSourcesConfigurationService,
|
|
|
|
// private externalDataRepositoryService: ExternalDataRepositoryService,
|
|
|
|
// private externalDatasetService: ExternalDatasetService,
|
|
|
|
// private externalRegistryService: ExternalRegistryService,
|
2024-01-15 17:47:34 +01:00
|
|
|
private referenceService: ReferenceService,
|
|
|
|
public enumUtils: EnumUtils,
|
2023-12-28 16:18:49 +01:00
|
|
|
) { super(); }
|
|
|
|
|
|
|
|
ngOnInit() {
|
2024-01-15 17:47:34 +01:00
|
|
|
this.multipleAutoCompleteSearchConfiguration = this.referenceService.getMultipleAutoCompleteSearchConfiguration(this.referenceType);
|
|
|
|
|
|
|
|
|
|
|
|
// this.externalSourcesConfigurationService.getExternalSourcesConfiguration()
|
|
|
|
// .pipe(takeUntil(this._destroyed))
|
|
|
|
// .subscribe(result => {
|
|
|
|
// this.externalSourcesConfiguration = result;
|
|
|
|
// this.externalSourcesConfiguration.dataRepositories.push({ key: '', label: 'All' });
|
|
|
|
// this.externalSourcesConfiguration.externalDatasets.push({ key: '', label: 'All' });
|
|
|
|
// this.externalSourcesConfiguration.registries.push({ key: '', label: 'All' });
|
|
|
|
// this.externalSourcesConfiguration.services.push({ key: '', label: 'All' });
|
|
|
|
// if (!isNullOrUndefined(this.externalSourcesConfiguration.tags)) {
|
|
|
|
// this.externalSourcesConfiguration.tags.push({ key: '', label: 'All' });
|
|
|
|
// } else {
|
|
|
|
// this.externalSourcesConfiguration.tags = [{ key: '', label: 'All' }];
|
|
|
|
// }
|
|
|
|
// });
|
|
|
|
|
|
|
|
// this.formGroup.valueChanges
|
|
|
|
// .pipe(takeUntil(this._destroyed))
|
|
|
|
// .subscribe(val => {
|
|
|
|
// this.formChanged.emit(val);
|
|
|
|
// });
|
2023-12-28 16:18:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// public cancel(): void {
|
|
|
|
// this.router.navigate(['/datasets']);
|
|
|
|
// }
|
|
|
|
|
|
|
|
// externalDatasetsOnItemChange(event) {
|
|
|
|
// const externalDatasetModel = new ExternalDatasetEditorModel(event.id, event.abbreviation, event.name, event.pid ? event.pid : event.reference, event.source);
|
|
|
|
// (<UntypedFormArray>this.formGroup.get('externalDatasets')).push(externalDatasetModel.buildForm());
|
|
|
|
// }
|
|
|
|
|
|
|
|
// registriesOnItemChange(event) {
|
|
|
|
// const registryModel = new ExternalRegistryEditorModel(event.abbreviation, event.definition, event.id, event.name, event.pid ? event.pid : event.reference, event.uri, event.source);
|
|
|
|
// (<UntypedFormArray>this.formGroup.get('registries')).push(registryModel.buildForm());
|
|
|
|
// }
|
|
|
|
|
|
|
|
// servicesOnItemChange(event) {
|
|
|
|
// const serviceModel = new ExternalServiceEditorModel(event.abbreviation, event.definition, event.id, event.label, event.reference, event.uri);
|
|
|
|
// (<UntypedFormArray>this.formGroup.get('services')).push(serviceModel.buildForm());
|
|
|
|
// }
|
|
|
|
|
|
|
|
// tagsOnItemChange(event) {
|
|
|
|
// const tagModel = new ExternalTagEditorModel(event.id, event.name);
|
|
|
|
// (<UntypedFormArray>this.formGroup.get('tags')).push(tagModel.buildForm());
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// dataRepositoriesOnItemChange(event) {
|
|
|
|
// const dataRepositoryModel = new ExternalDataRepositoryEditorModel(event.id, event.name, event.abbreviation, event.uri, event.pid, event.source);
|
|
|
|
// (<UntypedFormArray>this.formGroup.get('dataRepositories')).push(dataRepositoryModel.buildForm());
|
|
|
|
// }
|
|
|
|
|
|
|
|
// addDataRepository() {
|
|
|
|
// const dialogRef = this.dialog.open(DatasetExternalDataRepositoryDialogEditorComponent, {
|
|
|
|
// width: '500px',
|
|
|
|
// restoreFocus: false,
|
|
|
|
// data: {}
|
|
|
|
// });
|
|
|
|
// dialogRef.afterClosed()
|
|
|
|
// .pipe(takeUntil(this._destroyed))
|
|
|
|
// .subscribe(result => {
|
|
|
|
// if (!result) { return; }
|
|
|
|
// const dataRepositoryModel = new ExternalDataRepositoryEditorModel(result.id, result.name, result.abbreviation, result.uri, result.pid, result.source);
|
|
|
|
// (<UntypedFormArray>this.formGroup.get('dataRepositories')).push(dataRepositoryModel.buildForm());
|
|
|
|
// });
|
|
|
|
// }
|
|
|
|
|
|
|
|
// addRegistry() {
|
|
|
|
// const dialogRef = this.dialog.open(DatasetExternalRegistryDialogEditorComponent, {
|
|
|
|
// width: '500px',
|
|
|
|
// restoreFocus: false,
|
|
|
|
// data: {}
|
|
|
|
// });
|
|
|
|
// dialogRef.afterClosed()
|
|
|
|
// .pipe(takeUntil(this._destroyed))
|
|
|
|
// .subscribe(result => {
|
|
|
|
// if (!result) { return; }
|
|
|
|
// const registryModel = new ExternalRegistryEditorModel(result.abbreviation, result.definition, result.id, result.label, result.reference, result.uri, result.source);
|
|
|
|
// (<UntypedFormArray>this.formGroup.get('registries')).push(registryModel.buildForm());
|
|
|
|
// });
|
|
|
|
// }
|
|
|
|
|
|
|
|
// addExternalDataset() {
|
|
|
|
// const dialogRef = this.dialog.open(DatasetExternalDatasetDialogEditorComponent, {
|
|
|
|
// width: '500px',
|
|
|
|
// restoreFocus: false,
|
|
|
|
// data: {}
|
|
|
|
// });
|
|
|
|
// dialogRef.afterClosed()
|
|
|
|
// .pipe(takeUntil(this._destroyed))
|
|
|
|
// .subscribe(result => {
|
|
|
|
// if (!result) { return; }
|
|
|
|
// const externalDatasetModel = new ExternalDatasetEditorModel(result.id, result.abbreviation, result.name, result.reference, result.source);
|
|
|
|
// (<UntypedFormArray>this.formGroup.get('externalDatasets')).push(externalDatasetModel.buildForm());
|
|
|
|
// });
|
|
|
|
// }
|
|
|
|
|
|
|
|
// addService() {
|
|
|
|
// const dialogRef = this.dialog.open(DatasetExternalServiceDialogEditorComponent, {
|
|
|
|
// width: '500px',
|
|
|
|
// restoreFocus: false,
|
|
|
|
// data: {}
|
|
|
|
// });
|
|
|
|
// dialogRef.afterClosed()
|
|
|
|
// .pipe(takeUntil(this._destroyed))
|
|
|
|
// .subscribe(result => {
|
|
|
|
// if (!result) { return; }
|
|
|
|
// const serviceModel = new ExternalServiceEditorModel(result.abbreviation, result.definition, result.id, result.label, result.reference, result.uri, result.source);
|
|
|
|
// (<UntypedFormArray>this.formGroup.get('services')).push(serviceModel.buildForm());
|
|
|
|
// });
|
|
|
|
// }
|
|
|
|
|
|
|
|
// searchDatasetExternalDatasets(query: string, type: string): Observable<ExternalSourceItemModel[]> {
|
|
|
|
// const requestItem: RequestItem<ExternalDatasetCriteria> = new RequestItem();
|
|
|
|
// requestItem.criteria = new ExternalDatasetCriteria();
|
|
|
|
// requestItem.criteria.like = query;
|
|
|
|
// requestItem.criteria.type = type;
|
|
|
|
// return this.externalSourcesService.searchDatasetSExternalDatasetservice(requestItem);
|
|
|
|
// }
|
|
|
|
|
|
|
|
// searchDatasetExternalDataRepositories(query: string, type: string): Observable<ExternalSourceItemModel[]> {
|
|
|
|
// const requestItem: RequestItem<DataRepositoryCriteria> = new RequestItem();
|
|
|
|
// requestItem.criteria = new DataRepositoryCriteria();
|
|
|
|
// requestItem.criteria.like = query;
|
|
|
|
// requestItem.criteria.type = type;
|
|
|
|
// return this.externalSourcesService.searchDatasetRepository(requestItem);
|
|
|
|
// }
|
|
|
|
|
|
|
|
// searchDatasetExternalRegistries(query: string, type: string): Observable<ExternalSourceItemModel[]> {
|
|
|
|
// const requestItem: RequestItem<RegistryCriteria> = new RequestItem();
|
|
|
|
// requestItem.criteria = new RegistryCriteria();
|
|
|
|
// requestItem.criteria.like = query;
|
|
|
|
// requestItem.criteria.type = type;
|
|
|
|
// return this.externalSourcesService.searchDatasetRegistry(requestItem);
|
|
|
|
// }
|
|
|
|
|
|
|
|
// searchDatasetExternalServices(query: string, type: string): Observable<ExternalSourceItemModel[]> {
|
|
|
|
// const requestItem: RequestItem<ServiceCriteria> = new RequestItem();
|
|
|
|
// requestItem.criteria = new ServiceCriteria();
|
|
|
|
// requestItem.criteria.like = query;
|
|
|
|
// requestItem.criteria.type = type;
|
|
|
|
// return this.externalSourcesService.searchDatasetService(requestItem);
|
|
|
|
// }
|
|
|
|
|
|
|
|
// searchDatasetTags(query: string, type: string): Observable<ExternalSourceItemModel[]> {
|
|
|
|
// const requestItem: RequestItem<TagCriteria> = new RequestItem();
|
|
|
|
// requestItem.criteria = new TagCriteria();
|
|
|
|
// requestItem.criteria.like = query;
|
|
|
|
// requestItem.criteria.type = type;
|
|
|
|
// return this.externalSourcesService.searchDatasetTags(requestItem);
|
|
|
|
// }
|
|
|
|
|
|
|
|
// removeTag(tag: any) {
|
|
|
|
// (<UntypedFormArray>this.formGroup.get('tags')).removeAt(((<UntypedFormArray>this.formGroup.get('tags')).value as any[]).indexOf(tag));
|
|
|
|
// }
|
|
|
|
|
|
|
|
// addTag(ev: any) {
|
|
|
|
// let item: ExternalTagEditorModel;
|
|
|
|
// //this.filteredTags = this.formGroup.get('tags').value;
|
|
|
|
// if (typeof ev === 'string') {
|
|
|
|
// item = new ExternalTagEditorModel('', ev);
|
|
|
|
// } else {
|
|
|
|
// item = ev;
|
|
|
|
// }
|
|
|
|
// if (item.name !== '' ) {
|
|
|
|
// return item;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// isInternal(element: any): boolean {
|
|
|
|
// if (element.get('source') == null) {
|
|
|
|
// // console.log(element);
|
|
|
|
// }
|
|
|
|
// return element.get('source').value === 'Internal';
|
|
|
|
// }
|
|
|
|
|
|
|
|
// updateDataRepository(dataRepository: UntypedFormGroup) {
|
|
|
|
// this.externalDataRepositoryService.create(dataRepository.value)
|
|
|
|
// .pipe(takeUntil(this._destroyed))
|
|
|
|
// .subscribe(
|
|
|
|
// (result) => {
|
|
|
|
// dataRepository.setValue(result);
|
|
|
|
// }
|
|
|
|
// );
|
|
|
|
// }
|
|
|
|
|
|
|
|
// updateExternalDataset(externalDataset: UntypedFormGroup) {
|
|
|
|
// this.externalDatasetService.create(externalDataset.value)
|
|
|
|
// .pipe(takeUntil(this._destroyed))
|
|
|
|
// .subscribe(
|
|
|
|
// (result) => {
|
|
|
|
// externalDataset.setValue(result);
|
|
|
|
// }
|
|
|
|
// );
|
|
|
|
// }
|
|
|
|
|
|
|
|
// updateRegistry(registry: UntypedFormGroup) {
|
|
|
|
// this.externalRegistryService.create(registry.value)
|
|
|
|
// .pipe(takeUntil(this._destroyed))
|
|
|
|
// .subscribe(
|
|
|
|
// (result) => {
|
|
|
|
// registry.setValue(result);
|
|
|
|
// }
|
|
|
|
// );
|
|
|
|
// }
|
|
|
|
|
|
|
|
// updateService(service: UntypedFormGroup) {
|
|
|
|
// this.externalServiceService.create(service.value)
|
|
|
|
// .pipe(takeUntil(this._destroyed))
|
|
|
|
// .subscribe(
|
|
|
|
// (result) => {
|
|
|
|
// service.setValue(result);
|
|
|
|
// }
|
|
|
|
// );
|
|
|
|
// }
|
|
|
|
|
|
|
|
// filterTags(value: string): Observable<ExternalSourceItemModel[]> {
|
|
|
|
// this.filteringTagsAsync = true;
|
|
|
|
|
|
|
|
// const requestItem: RequestItem<TagCriteria> = new RequestItem();
|
|
|
|
// const criteria: TagCriteria = new TagCriteria();
|
|
|
|
// criteria.like = value;
|
|
|
|
// requestItem.criteria = criteria;
|
|
|
|
// return this.externalSourcesService.searchDatasetTags(requestItem);
|
|
|
|
// }
|
|
|
|
|
|
|
|
// showTag(ev: any) {
|
|
|
|
// if (typeof ev === 'string') {
|
|
|
|
// return ev;
|
|
|
|
// } else {
|
|
|
|
// return ev.name;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
}
|