import { Component, Inject, OnInit } from '@angular/core'; import { UntypedFormGroup } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { DescriptionTemplate } from '@app/core/model/description-template/description-template'; import { DescriptionTemplateService } from '@app/core/services/description-template/description-template.service'; import { LoggingService } from '@app/core/services/logging/logging-service'; import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; import { ProgressIndicationService } from '@app/core/services/progress-indication/progress-indication-service'; import { DescriptionEditorModel } from '@app/ui/description/editor/description-editor.model'; import { DescriptionEditorResolver } from '@app/ui/description/editor/description-editor.resolver'; import { VisibilityRulesService } from '@app/ui/description/editor/description-form/visibility-rules/visibility-rules.service'; import { BaseComponent } from '@common/base/base.component'; import { TranslateService } from '@ngx-translate/core'; import { takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-description-template-preview-dialog-component', templateUrl: 'description-template-preview-dialog.component.html', styleUrls: ['./description-template-preview-dialog.component.scss'], }) export class DescriptionTemplatePreviewDialogComponent extends BaseComponent implements OnInit { datasetProfileDefinitionFormGroup: UntypedFormGroup; progressIndication = false; editorModel: DescriptionEditorModel; formGroup: UntypedFormGroup; descriptionTemplate: DescriptionTemplate; constructor( public dialogRef: MatDialogRef, private progressIndicationService: ProgressIndicationService, private descriptionTemplateService: DescriptionTemplateService, private uiNotificationService: UiNotificationService, private logger: LoggingService, private language: TranslateService, public visibilityRulesService: VisibilityRulesService, @Inject(MAT_DIALOG_DATA) public data: any ) { super(); } ngOnInit(): void { this.progressIndicationService.getProgressIndicationObservable().pipe(takeUntil(this._destroyed)).subscribe(x => { setTimeout(() => { this.progressIndication = x; }); }); if (this.data && this.data.descriptionTemplateId) { this.descriptionTemplateService.getSingle(this.data.descriptionTemplateId, DescriptionEditorResolver.descriptionTemplateLookupFields()) .pipe(takeUntil(this._destroyed)) .subscribe(item => { this.descriptionTemplate = item; this.prepareForm(this.descriptionTemplate); }); } } prepareForm(data: DescriptionTemplate) { try { this.editorModel = new DescriptionEditorModel(); this.buildForm(); } catch (error) { this.logger.error('Could not parse Description item: ' + data + error); this.uiNotificationService.snackBarNotification(this.language.instant('COMMONS.ERRORS.DEFAULT'), SnackBarNotificationLevel.Error); } } buildForm() { this.formGroup = this.editorModel.buildForm(null, true); this.visibilityRulesService.setContext(this.descriptionTemplate.definition, this.formGroup.get('properties')); } select(): void { this.dialogRef.close(true); } closeDialog(): void { this.dialogRef.close(); } }