145 lines
5.6 KiB
TypeScript
145 lines
5.6 KiB
TypeScript
import { Component, Input, OnInit, SimpleChanges } from '@angular/core';
|
|
import { UntypedFormGroup } from '@angular/forms';
|
|
import { DescriptionTemplateFieldType } from '@app/core/common/enum/description-template-field-type';
|
|
import { DescriptionTemplate, DescriptionTemplateBaseFieldData, DescriptionTemplateDefinition, DescriptionTemplateField, DescriptionTemplateFieldSet, DescriptionTemplateMultiplicity, DescriptionTemplatePage, DescriptionTemplateReferenceTypeData, DescriptionTemplateRule, DescriptionTemplateSection } from '@app/core/model/description-template/description-template';
|
|
import { DescriptionTemplateBaseFieldDataPersist, DescriptionTemplateDefinitionPersist, DescriptionTemplateFieldPersist, DescriptionTemplateFieldSetPersist, DescriptionTemplateMultiplicityPersist, DescriptionTemplatePagePersist, DescriptionTemplatePersist, DescriptionTemplateReferenceTypeFieldPersist, DescriptionTemplateRulePersist, DescriptionTemplateSectionPersist } from '@app/core/model/description-template/description-template-persist';
|
|
import { Description } from '@app/core/model/description/description';
|
|
import { DescriptionEditorModel } from '@app/ui/description/editor/description-editor.model';
|
|
import { VisibilityRulesService } from '@app/ui/description/editor/description-form/visibility-rules/visibility-rules.service';
|
|
|
|
|
|
@Component({
|
|
selector: 'app-final-preview-component',
|
|
templateUrl: './final-preview.component.html',
|
|
styleUrls: ['./final-preview.component.scss'],
|
|
providers: [VisibilityRulesService]
|
|
})
|
|
|
|
export class FinalPreviewComponent implements OnInit {
|
|
|
|
|
|
@Input() descriptionTemplatePersist: DescriptionTemplatePersist;
|
|
descriptionTemplate: DescriptionTemplate;
|
|
|
|
previewPropertiesFormGroup: UntypedFormGroup;
|
|
|
|
constructor(public visibilityRulesService: VisibilityRulesService) {
|
|
|
|
}
|
|
|
|
ngOnInit(): void {
|
|
this.generatePreviewForm();
|
|
}
|
|
|
|
ngOnChanges(changes: SimpleChanges) {
|
|
if(changes['descriptionTemplatePersist']) this.generatePreviewForm();
|
|
}
|
|
|
|
private generatePreviewForm() {
|
|
|
|
if(this.descriptionTemplatePersist){
|
|
this.descriptionTemplate = this.buildDescriptionTemplate(this.descriptionTemplatePersist);
|
|
|
|
const mockDescription: Description = {
|
|
descriptionTemplate: this.descriptionTemplate
|
|
}
|
|
const descriptionEditorModel = new DescriptionEditorModel().fromModel(mockDescription, mockDescription.descriptionTemplate);
|
|
this.previewPropertiesFormGroup = descriptionEditorModel.properties.buildForm() as UntypedFormGroup;
|
|
|
|
this.visibilityRulesService.setContext(this.descriptionTemplate.definition, this.previewPropertiesFormGroup);
|
|
}
|
|
|
|
}
|
|
|
|
private buildDescriptionTemplate(persist: DescriptionTemplatePersist) : DescriptionTemplate{
|
|
if (persist == null) return null;
|
|
return {
|
|
id: persist.id,
|
|
label: persist.label,
|
|
description: persist.description,
|
|
groupId: undefined,
|
|
version: undefined,
|
|
language: persist.language,
|
|
type: undefined,
|
|
status: persist.status,
|
|
definition: this.buildDescriptionTemplateDefinition(persist.definition),
|
|
users: persist.users
|
|
}
|
|
}
|
|
|
|
private buildDescriptionTemplateDefinition(persist: DescriptionTemplateDefinitionPersist) : DescriptionTemplateDefinition{
|
|
if (persist == null) return null;
|
|
return {
|
|
pages: persist.pages.map(x => this.buildDescriptionTemplatePage(x))
|
|
}
|
|
}
|
|
|
|
private buildDescriptionTemplatePage(persist: DescriptionTemplatePagePersist) : DescriptionTemplatePage{
|
|
if (persist == null) return null;
|
|
return {
|
|
id: persist.id,
|
|
ordinal: persist.ordinal,
|
|
title: persist.title,
|
|
sections: persist.sections.map(x => this.buildDescriptionTemplateSection(x)),
|
|
}
|
|
}
|
|
|
|
private buildDescriptionTemplateSection(persist: DescriptionTemplateSectionPersist) : DescriptionTemplateSection{
|
|
if (persist == null) return null;
|
|
return {
|
|
id: persist.id,
|
|
ordinal: persist.ordinal,
|
|
defaultVisibility: persist.defaultVisibility,
|
|
multiplicity: persist.multiplicity,
|
|
title: persist.title,
|
|
description: persist.description,
|
|
sections: persist.sections.map(x => this.buildDescriptionTemplateSection(x)),
|
|
fieldSets: persist.fieldSets.map(x => this.buildDescriptionTemplateFieldSet(x)),
|
|
}
|
|
}
|
|
|
|
private buildDescriptionTemplateFieldSet(persist: DescriptionTemplateFieldSetPersist) : DescriptionTemplateFieldSet{
|
|
if (persist == null) return null;
|
|
return {
|
|
id: persist.id,
|
|
ordinal: persist.ordinal,
|
|
numbering: '',
|
|
title: persist.title,
|
|
description: persist.description,
|
|
extendedDescription: persist.extendedDescription,
|
|
additionalInformation: persist.additionalInformation,
|
|
multiplicity: {
|
|
max: persist.multiplicity.max, min: persist.multiplicity.min,
|
|
placeholder: persist.multiplicity.placeholder, tableView: persist.multiplicity.tableView
|
|
},
|
|
hasCommentField: persist.hasCommentField,
|
|
fields: persist.fields.map(x => this.buildDescriptionTemplateField(x)),
|
|
}
|
|
}
|
|
|
|
private buildDescriptionTemplateField (persist: DescriptionTemplateFieldPersist) : DescriptionTemplateField{
|
|
if (persist == null) return null;
|
|
let convertedField: DescriptionTemplateField ={
|
|
id: persist.id,
|
|
ordinal: persist.ordinal,
|
|
schematics: persist.schematics,
|
|
defaultValue: persist.defaultValue,
|
|
visibilityRules: persist.visibilityRules,
|
|
validations: persist.validations,
|
|
includeInExport: persist.includeInExport,
|
|
data: persist.data,
|
|
}
|
|
|
|
if (persist.data.fieldType === DescriptionTemplateFieldType.REFERENCE_TYPES) {
|
|
convertedField.data = persist.data;
|
|
(convertedField.data as DescriptionTemplateReferenceTypeData).referenceType = {
|
|
id: (persist.data as DescriptionTemplateReferenceTypeFieldPersist).referenceTypeId
|
|
};
|
|
} else {
|
|
convertedField.data = persist.data;
|
|
}
|
|
return convertedField;
|
|
}
|
|
|
|
}
|