87 lines
2.8 KiB
TypeScript
87 lines
2.8 KiB
TypeScript
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<DmpFinalizeDialogComponent>,
|
|
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({ descriptionsToBeFinalized: this.descriptionsToBeFinalized } as DmpFinalizeDialogOutput);
|
|
}
|
|
|
|
getFinalizedDescriptions() {
|
|
if (!this.dmp.descriptions) return [];
|
|
return this.dmp.descriptions.filter(x => x.status === DescriptionStatus.Finalized);
|
|
}
|
|
|
|
close() {
|
|
this.dialogRef.close({ cancelled: true } as DmpFinalizeDialogOutput);
|
|
}
|
|
|
|
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() {
|
|
if (!this.dmp.descriptions) return [];
|
|
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
|
|
}
|
|
|
|
export interface DmpFinalizeDialogOutput {
|
|
cancelled?: boolean;
|
|
descriptionsToBeFinalized?: Guid[];
|
|
}
|