import { Component, Inject, OnInit, ViewChild } from '@angular/core'; import { AbstractControl, FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms'; import { MatDialogRef, MatSelectionList, MAT_DIALOG_DATA } from '@angular/material'; import { Router } from '@angular/router'; import { takeUntil } from 'rxjs/operators'; import { BaseComponent } from '../../../../core/common/base/base.component'; import { DatasetStatus } from '../../../../core/common/enum/dataset-status'; import { DataTableRequest } from '../../../../core/model/data-table/data-table-request'; import { DatasetListingModel } from '../../../../core/model/dataset/dataset-listing'; import { DmpModel } from '../../../../core/model/dmp/dmp'; import { DatasetCriteria } from '../../../../core/query/dataset/dataset-criteria'; import { DatasetService } from '../../../../core/services/dataset/dataset.service'; import { DatasetOverviewModel } from '../../../../core/model/dataset/dataset-overview'; @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 { @ViewChild('datasetsDraftSelectionList') selectionList: MatSelectionList; public formGroup: FormGroup; public submitFunction: () => any; public dmp: DmpModel; public datasetsFinalized: DatasetListingModel[]; public datasetsDraft: DatasetListingModel[]; public allDatasets: DatasetListingModel[] = []; public allDatasetLabels: String[] = []; public isWizard: boolean; constructor( public router: Router, public dialogRef: MatDialogRef, public dmpService: DatasetService, @Inject(MAT_DIALOG_DATA) public data: any ) { super(); this.submitFunction = data['submitFunction']; this.dmp = data['dmp']; this.formGroup = data['formGroup']; this.isWizard = data['isWizard']; } ngOnInit(): void { if(!this.isWizard) { this.initialiseDatasetFinalizedRequest(); this.initialiseDmpFinalizedRequest(); } else { for (let value of (this.formGroup.get('datasets').get('datasetsList') as FormArray).value) { this.allDatasetLabels.push(value.datasetLabel); } } } initialiseDatasetFinalizedRequest() { const request = new DataTableRequest(null, null, null); request.criteria = new DatasetCriteria(); request.criteria.dmpIds = [this.dmp.id]; request.criteria.status = DatasetStatus.Finalized; this.dmpService.getPaged(request).map(x => x.data) .pipe(takeUntil(this._destroyed)) .subscribe(result => { this.datasetsFinalized = result; // this.createFormGroup(); this.datasetsFinalized.forEach(element => { this.allDatasets.push(element); }); }); } initialiseDmpFinalizedRequest() { const request = new DataTableRequest(null, null, null); request.criteria = new DatasetCriteria(); request.criteria.dmpIds = [this.dmp.id]; request.criteria.status = DatasetStatus.Draft; this.dmpService.getPaged(request).map(x => x.data) .pipe(takeUntil(this._destroyed)) .subscribe(result => { this.datasetsDraft = result; this.datasetsDraft.forEach(element => { this.allDatasets.push(element); }); }); } createFormGroup() { if (this.datasetsFinalized.length > 0) { this.formGroup = new FormBuilder().group({ datasets: [this.datasetsFinalized, this.minLengthArray(1)] }); } } onSubmit() { this.touchAllFormFields(this.formGroup); if (!this.formGroup.valid) { return; } this.submitFunction(); } minLengthArray(min: number) { return (c: AbstractControl): { [key: string]: any } => { if (c.value.length >= min) { return null; } return { 'minLengthArray': { valid: false } }; }; } public touchAllFormFields(formControl: AbstractControl) { if (formControl instanceof FormControl) { formControl.markAsTouched(); } else if (formControl instanceof FormGroup) { Object.keys(formControl.controls).forEach(item => { const control = formControl.get(item); this.touchAllFormFields(control); }); } else if (formControl instanceof FormArray) { formControl.controls.forEach(item => { this.touchAllFormFields(item); }); } } isDraft(dataset: DatasetOverviewModel) { if (dataset.status == 0) { return true } else { return false } } close() { this.dialogRef.close(false); } cancel() { this.dialogRef.close(false); } }