argos/dmp-frontend/src/app/ui/description/editor/description-base-fields-editor/description-base-fields-edi...

85 lines
3.4 KiB
TypeScript

import { Component, EventEmitter, Input, Output } from '@angular/core';
import { UntypedFormGroup } from '@angular/forms';
import { MatDialog } from '@angular/material/dialog';
import { DescriptionStatus } from '@app/core/common/enum/description-status';
import { DescriptionTemplateVersionStatus } from '@app/core/common/enum/description-template-version-status';
import { IsActive } from '@app/core/common/enum/is-active.enum';
import { DescriptionTemplate } from '@app/core/model/description-template/description-template';
import { Description } from '@app/core/model/description/description';
import { DmpDescriptionTemplate } from '@app/core/model/dmp/dmp';
import { DescriptionService } from '@app/core/services/description/description.service';
import { BaseComponent } from '@common/base/base.component';
import { takeUntil } from 'rxjs/operators';
import { DeprecatedDescriptionTemplateDialog } from './dialog-description-template/deprecated-description-template-dialog.component';
@Component({
selector: 'app-description-base-fields-editor-component',
templateUrl: 'description-base-fields-editor.component.html',
styleUrls: ['./description-base-fields-editor.component.scss']
})
export class DescriptionBaseFieldsEditorComponent extends BaseComponent {
@Input() formGroup: UntypedFormGroup;
@Input() description: Description;
availableDescriptionTemplates: DescriptionTemplate[] = [];
viewOnly = false; //TODO: not used.
@Output() refresh: EventEmitter<any> = new EventEmitter<any>();
constructor(private dialog: MatDialog,
private descriptionService: DescriptionService) {
super();
}
ngOnInit() {
this.loadDescriptionTemplates();
}
public compareWith(object1: any, object2: any) {
return object1 && object2 && object1.id === object2.id;
}
private loadDescriptionTemplates(): void {
const dmpDescriptionTemplates: DmpDescriptionTemplate[] = this.description.dmp.dmpDescriptionTemplates.filter(x => x.sectionId == this.description.dmpDescriptionTemplate.sectionId && x.isActive == IsActive.Active);
const currentVersionsOfDescriptionTemplates = dmpDescriptionTemplates.map(x => x.currentDescriptionTemplate);
this.availableDescriptionTemplates.push(...currentVersionsOfDescriptionTemplates);
if (this.description?.descriptionTemplate != null) {
const isPreviousVersion: boolean = this.description.descriptionTemplate.versionStatus === DescriptionTemplateVersionStatus.Previous;
if (isPreviousVersion === true) {
if (this.description.status === DescriptionStatus.Draft) {
this.openDeprecatedDescriptionTemplateDialog();
} else {
this.availableDescriptionTemplates.push(this.description.descriptionTemplate);
}
} else {
this.availableDescriptionTemplates.push(this.description.descriptionTemplate);
}
}
}
private openDeprecatedDescriptionTemplateDialog(): void {
const dialogRef = this.dialog.open(DeprecatedDescriptionTemplateDialog, {
data: {
label: this.description.descriptionTemplate.label
}
});
dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(
result => {
if (result) {
this.descriptionService.updateDescriptionTemplate({
id: this.description.id,
hash: this.description.hash
})
.subscribe(
result => {
this.refresh.emit(result);
},
error => console.error(error));
} else {
this.availableDescriptionTemplates.push(this.description.descriptionTemplate);
}
});
}
}