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, 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 { 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(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); } }