132 lines
5.0 KiB
TypeScript
132 lines
5.0 KiB
TypeScript
import { BaseComponent } from '@common/base/base.component';
|
|
import { OnInit, Component, Input, Output, EventEmitter } from '@angular/core';
|
|
import { FormGroup } from '@angular/forms';
|
|
import { TranslateService } from '@ngx-translate/core';
|
|
import { ConfigurationService } from '@app/core/services/configuration/configuration.service';
|
|
import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration';
|
|
import { map, takeUntil } from 'rxjs/operators';
|
|
import { Observable } from 'rxjs';
|
|
import { ExternalSourcesService } from '@app/core/services/external-sources/external-sources.service';
|
|
import { isNullOrUndefined } from 'util';
|
|
import { MatDialog } from '@angular/material';
|
|
import { DatasetProfileModel } from '@app/core/model/dataset/dataset-profile';
|
|
import { DatasetProfileCriteria } from '@app/core/query/dataset-profile/dataset-profile-criteria';
|
|
import { DataTableRequest } from '@app/core/model/data-table/data-table-request';
|
|
import { DmpService } from '@app/core/services/dmp/dmp.service';
|
|
import { DmpProfileDefinition } from '@app/core/model/dmp-profile/dmp-profile';
|
|
import { DmpProfileService } from '@app/core/services/dmp/dmp-profile.service';
|
|
import { AvailableProfilesComponent } from '../available-profiles/available-profiles.component';
|
|
import { DmpEditorModel } from '../dmp-editor.model';
|
|
import { Router } from '@angular/router';
|
|
|
|
@Component({
|
|
selector: 'dataset-info',
|
|
templateUrl: './dataset-info.component.html',
|
|
styleUrls: ['./dataset-info.component.scss']
|
|
})
|
|
export class DatasetInfoComponent extends BaseComponent implements OnInit {
|
|
|
|
@Input() formGroup: FormGroup = null;
|
|
@Input() isUserOwner: boolean;
|
|
@Input() dmp: DmpEditorModel;
|
|
@Input() isPublic: boolean;
|
|
@Input() isFinalized: boolean;
|
|
@Input() isNewVersion: boolean;
|
|
@Input() isClone: boolean;
|
|
@Output() onFormChanged: EventEmitter<any> = new EventEmitter();
|
|
|
|
selectedDmpProfileDefinition: DmpProfileDefinition;
|
|
profilesAutoCompleteConfiguration: MultipleAutoCompleteConfiguration;
|
|
|
|
constructor(
|
|
private language: TranslateService,
|
|
private configurationService: ConfigurationService,
|
|
private externalSourcesService: ExternalSourcesService,
|
|
private dialog: MatDialog,
|
|
private _service: DmpService,
|
|
private dmpProfileService: DmpProfileService,
|
|
private router: Router
|
|
) {
|
|
super();
|
|
}
|
|
|
|
ngOnInit() {
|
|
this.profilesAutoCompleteConfiguration = {
|
|
filterFn: this.filterProfiles.bind(this),
|
|
initialItems: (excludedItems: any[]) => this.filterProfiles('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))),
|
|
displayFn: (item) => item['label'],
|
|
titleFn: (item) => item['label'],
|
|
subtitleFn: (item) => item['description']
|
|
};
|
|
|
|
if (this.formGroup.get('definition')) { this.selectedDmpProfileDefinition = this.formGroup.get('definition').value; }
|
|
this.registerFormEventsForDmpProfile();
|
|
|
|
if (this.isNewVersion) {
|
|
this.formGroup.get('label').disable();
|
|
}
|
|
|
|
if (!this.isUserOwner && !this.isClone) {
|
|
this.formGroup.disable();
|
|
}
|
|
if (isNullOrUndefined(this.formGroup.get('extraProperties').get('publicDate').value)) {
|
|
this.formGroup.get('extraProperties').get('publicDate').patchValue(new Date());
|
|
}
|
|
|
|
this.formGroup.valueChanges.pipe(takeUntil(this._destroyed))
|
|
.subscribe(x => {
|
|
this.profilesAutoCompleteConfiguration = {
|
|
filterFn: this.filterProfiles.bind(this),
|
|
initialItems: (excludedItems: any[]) => this.filterProfiles('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x.id).indexOf(resultItem.id) === -1))),
|
|
displayFn: (item) => item['label'],
|
|
titleFn: (item) => item['label'],
|
|
subtitleFn: (item) => item['description']
|
|
};
|
|
this.onFormChanged.emit();
|
|
});
|
|
}
|
|
|
|
// Researchers
|
|
filterProfiles(value: string): Observable<DatasetProfileModel[]> {
|
|
const request = new DataTableRequest<DatasetProfileCriteria>(null, null, { fields: ['+label'] });
|
|
const criteria = new DatasetProfileCriteria();
|
|
criteria.like = value;
|
|
request.criteria = criteria;
|
|
return this._service.searchDMPProfiles(request);
|
|
}
|
|
|
|
registerFormEventsForDmpProfile(definitionProperties?: DmpProfileDefinition): void {
|
|
this.formGroup.get('profile').valueChanges
|
|
.pipe(
|
|
takeUntil(this._destroyed))
|
|
.subscribe(Option => {
|
|
if (Option instanceof Object) {
|
|
this.selectedDmpProfileDefinition = null;
|
|
this.dmpProfileService.getSingle(Option.id)
|
|
.pipe(takeUntil(this._destroyed))
|
|
.subscribe(result => {
|
|
this.selectedDmpProfileDefinition = result.definition;
|
|
});
|
|
} else {
|
|
this.selectedDmpProfileDefinition = null;
|
|
}
|
|
this.selectedDmpProfileDefinition = definitionProperties;
|
|
})
|
|
}
|
|
|
|
availableProfiles(event: MouseEvent) {
|
|
event.stopPropagation();
|
|
const dialogRef = this.dialog.open(AvailableProfilesComponent, {
|
|
data: {
|
|
profiles: this.formGroup.get('profiles')
|
|
}
|
|
});
|
|
|
|
return false;
|
|
}
|
|
|
|
addDataset(id: String) {
|
|
this.router.navigate(['/datasets/new/' + id]);
|
|
}
|
|
}
|