argos/dmp-frontend/src/app/ui/admin/description-template/description-template-preview/description-template-previe...

82 lines
3.3 KiB
TypeScript

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