104 lines
4.3 KiB
TypeScript
104 lines
4.3 KiB
TypeScript
import { Component, Inject, OnInit } from "@angular/core";
|
|
import { UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms";
|
|
import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from "@angular/material/dialog";
|
|
import { DescriptionPrefillingRequest, PrefillingSearchRequest } from "@app/core/model/description-profiling-request/description-profiling-request";
|
|
import { DescriptionTemplate } from "@app/core/model/description-template/description-template";
|
|
import { Dmp } from "@app/core/model/dmp/dmp";
|
|
import { Prefilling } from "@app/core/model/prefilling-source/prefilling-source";
|
|
import { PrefillingSourceService } from "@app/core/services/prefilling-source/prefilling-source.service";
|
|
import { ProgressIndicationService } from "@app/core/services/progress-indication/progress-indication-service";
|
|
import { SingleAutoCompleteConfiguration } from "@app/library/auto-complete/single/single-auto-complete-configuration";
|
|
import { BaseComponent } from "@common/base/base.component";
|
|
import { FormService } from "@common/forms/form-service";
|
|
import { Guid } from "@common/types/guid";
|
|
import { TranslateService } from "@ngx-translate/core";
|
|
import { Observable } from "rxjs";
|
|
import { map, takeUntil } from "rxjs/operators";
|
|
import { DescriptionEditorResolver } from "../description-editor.resolver";
|
|
import { nameof } from "ts-simple-nameof";
|
|
import { Description } from "@app/core/model/description/description";
|
|
import { IsActive } from "@app/core/common/enum/is-active.enum";
|
|
import { DescriptionPrefillingRequestEditorModel } from "./prefill-description-editor.model";
|
|
|
|
@Component({
|
|
selector: 'prefill-description-component',
|
|
templateUrl: 'prefill-description.component.html',
|
|
styleUrls: ['prefill-description.component.scss']
|
|
})
|
|
export class PrefillDescriptionDialogComponent extends BaseComponent implements OnInit {
|
|
|
|
progressIndication = false;
|
|
prefillAutoCompleteConfiguration: SingleAutoCompleteConfiguration;
|
|
prefillSelected: boolean = false;
|
|
prefillForm: UntypedFormGroup;
|
|
|
|
dmp: Dmp;
|
|
dmpSectionId: Guid;
|
|
availableDescriptionTemplates: DescriptionTemplate[] = [];
|
|
|
|
constructor(public dialogRef: MatDialogRef<PrefillDescriptionDialogComponent>,
|
|
private progressIndicationService: ProgressIndicationService,
|
|
public prefillingSourceService: PrefillingSourceService,
|
|
private formService: FormService,
|
|
@Inject(MAT_DIALOG_DATA) public data: any) {
|
|
super();
|
|
|
|
this.dmp = data.dmp;
|
|
this.dmpSectionId = data.dmpSectionId;
|
|
this.availableDescriptionTemplates = this.dmp.dmpDescriptionTemplates.filter(x => x.sectionId == this.dmpSectionId && x.isActive == IsActive.Active).map(x => x.currentDescriptionTemplate);
|
|
}
|
|
|
|
ngOnInit() {
|
|
this.progressIndicationService.getProgressIndicationObservable().pipe(takeUntil(this._destroyed)).subscribe(x => {
|
|
setTimeout(() => { this.progressIndication = x; });
|
|
});
|
|
const editorModel = new DescriptionPrefillingRequestEditorModel();
|
|
this.prefillForm = editorModel.buildForm(null, false);
|
|
|
|
this.prefillAutoCompleteConfiguration = {
|
|
filterFn: this.searchDescriptions.bind(this),
|
|
loadDataOnStart: false,
|
|
displayFn: (item: Prefilling) => (item.label.length > 60) ? (item.label.substr(0, 60) + "...") : item.label,
|
|
titleFn: (item: Prefilling) => item.label,
|
|
subtitleFn: (item: Prefilling) => item.id,
|
|
valueAssign: (item: Prefilling) => item,
|
|
uniqueAssign: (item: Prefilling) => item.id,
|
|
};
|
|
}
|
|
|
|
changePreffillingSource(){
|
|
this.prefillForm.get('data').setValue(null);
|
|
}
|
|
|
|
public compareWith(object1: any, object2: any) {
|
|
return object1 && object2 && object1.id === object2.id;
|
|
}
|
|
|
|
searchDescriptions(query: string): Observable<Prefilling[]> {
|
|
const request: PrefillingSearchRequest= {
|
|
like: query,
|
|
prefillingSourceId: this.prefillForm.get('prefillingSourceId').value
|
|
};
|
|
|
|
return this.prefillingSourceService.search(request);
|
|
}
|
|
|
|
next() {
|
|
const formData = this.formService.getValue(this.prefillForm.value) as DescriptionPrefillingRequest;
|
|
|
|
this.prefillingSourceService.generate(formData, DescriptionEditorResolver.descriptionTemplateLookupFields(nameof<Description>(x => x.descriptionTemplate)))
|
|
.pipe(takeUntil(this._destroyed)).subscribe(description => {
|
|
if (description) {
|
|
this.closeDialog(description);
|
|
} else {
|
|
this.closeDialog();
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
closeDialog(result = null): void {
|
|
this.dialogRef.close(result);
|
|
}
|
|
}
|