import { Component, Inject, OnInit } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Router } from '@angular/router'; import { DescriptionStatus } from '@app/core/common/enum/description-status'; import { DmpAccessType } from '@app/core/common/enum/dmp-access-type'; import { Dmp } from '@app/core/model/dmp/dmp'; import { DescriptionService } from '@app/core/services/description/description.service'; import { BaseComponent } from '@common/base/base.component'; import { Guid } from '@common/types/guid'; import { takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-dmp-finalize-dialog-component', templateUrl: 'dmp-finalize-dialog.component.html', styleUrls: ['./dmp-finalize-dialog.component.scss'] }) export class DmpFinalizeDialogComponent extends BaseComponent implements OnInit { dmp: Dmp; dmpAccessTypeEnum = DmpAccessType; descriptionStatusEnum = DescriptionStatus; descriptionValidationOutputEnum = DescriptionValidationOutput; validationResults: DescriptionValidationResult[] = []; descriptionsToBeFinalized: Guid[] = []; constructor( public router: Router, public dialogRef: MatDialogRef, public descriptionService: DescriptionService, @Inject(MAT_DIALOG_DATA) public data: any ) { super(); this.dmp = data.dmp; } ngOnInit(): void { this.validateDescriptions(this.dmp); } isDescriptionValid(descriptionId: Guid): boolean { return this.validationResults.find(x => x.descriptionId == descriptionId)?.result === DescriptionValidationOutput.Valid; } onSubmit() { this.dialogRef.close(this.descriptionsToBeFinalized); } getFinalizedDescriptions() { return this.dmp.descriptions.filter(x => x.status === DescriptionStatus.Finalized); } close() { this.dialogRef.close(null); } validateDescriptions(dmp: Dmp) { if (!dmp.descriptions.some(x => x.status == DescriptionStatus.Draft)) return; this.descriptionService.validate(dmp.descriptions.filter(x => x.status == DescriptionStatus.Draft).map(x => x.id)).pipe(takeUntil(this._destroyed), ).subscribe(result => { this.validationResults = result; }); } get validDraftDescriptions() { return this.dmp.descriptions.filter(x => this.validationResults.some(y => y.descriptionId == x.id && y.result == DescriptionValidationOutput.Valid)); } } export interface DescriptionValidationResult { descriptionId: Guid; result: DescriptionValidationOutput; } export enum DescriptionValidationOutput { Valid = 1, Invalid = 2 }