81 lines
3.4 KiB
TypeScript
81 lines
3.4 KiB
TypeScript
import { Component, Input } from '@angular/core';
|
|
import { UntypedFormGroup } from '@angular/forms';
|
|
import { MatDialog } from '@angular/material/dialog';
|
|
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 { DmpBlueprintDefinitionSection } from '@app/core/model/dmp-blueprint/dmp-blueprint';
|
|
import { Dmp, DmpDescriptionTemplate } from '@app/core/model/dmp/dmp';
|
|
import { DescriptionTemplateService } from '@app/core/services/description-template/description-template.service';
|
|
import { DescriptionService } from '@app/core/services/description/description.service';
|
|
import { DmpBlueprintService } from '@app/core/services/dmp/dmp-blueprint.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.
|
|
|
|
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);
|
|
//Check if the used tempalte in included in the current list. If not add it.
|
|
if (this.description.descriptionTemplate && currentVersionsOfDescriptionTemplates.find(x => x.id == this.description?.descriptionTemplate?.id) == null) {
|
|
if (this.description.status === 0) {
|
|
this.openDeprecatedDescriptionTemplateDialog();
|
|
} else {
|
|
this.availableDescriptionTemplates.push(this.description.descriptionTemplate);
|
|
}
|
|
}
|
|
this.availableDescriptionTemplates.push(...currentVersionsOfDescriptionTemplates);
|
|
}
|
|
|
|
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,
|
|
descriptionTemplateGroupId: this.description.descriptionTemplate.groupId
|
|
})
|
|
.subscribe(
|
|
result => {
|
|
if (result) {
|
|
this.loadDescriptionTemplates();
|
|
}
|
|
},
|
|
error => console.error(error));
|
|
} else {
|
|
this.availableDescriptionTemplates.push(this.description.descriptionTemplate);
|
|
}
|
|
});
|
|
}
|
|
}
|