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); 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); } }); } }