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

354 lines
16 KiB
TypeScript
Raw Normal View History

import { UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms";
import { DescriptionTemplateStatus } from "@app/core/common/enum/description-template-status";
import { DescriptionTemplate, DescriptionTemplateDefinition } from "@app/core/model/description-template/description-template";
import { DescriptionTemplateDefinitionPersist, DescriptionTemplatePersist } from "@app/core/model/description-template/description-template-persist";
import { BaseEditorModel } from "@common/base/base-form-editor-model";
import { BackendErrorValidator } from "@common/forms/validation/custom-validator";
import { ValidationErrorModel } from "@common/forms/validation/error-model/validation-error-model";
import { Validation, ValidationContext } from "@common/forms/validation/validation-context";
import { Guid } from "@common/types/guid";
export class DescriptionTemplateEditorModel extends BaseEditorModel { // implements DescriptionTemplatePersist {
label: string;
// definition: DescriptionTemplateDefinitionEditorModel;
status: DescriptionTemplateStatus = DescriptionTemplateStatus.Draft;
description: string;
permissions: string[];
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel();
protected formBuilder: UntypedFormBuilder = new UntypedFormBuilder();
constructor() { super(); }
public fromModel(item: DescriptionTemplate): DescriptionTemplateEditorModel {
if (item) {
super.fromModel(item);
this.label = item.label;
this.status = item.status;
this.description = item.description;
//this.definition = new DescriptionTemplateDefinitionEditorModel().fromModel(item.definition);
}
return this;
}
buildForm(context: ValidationContext = null, disabled: boolean = false): UntypedFormGroup {
if (context == null) { context = this.createValidationContext(); }
return this.formBuilder.group({
id: [{ value: this.id, disabled: disabled }, context.getValidation('id').validators],
label: [{ value: this.label, disabled: disabled }, context.getValidation('label').validators],
status: [{ value: this.status, disabled: disabled }, context.getValidation('status').validators],
// definition: this.definition.buildForm({
// rootPath: `definition.`
// }),
hash: [{ value: this.hash, disabled: disabled }, context.getValidation('hash').validators]
});
}
createValidationContext(): ValidationContext {
const baseContext: ValidationContext = new ValidationContext();
const baseValidationArray: Validation[] = new Array<Validation>();
baseValidationArray.push({ key: 'id', validators: [BackendErrorValidator(this.validationErrorModel, 'id')] });
baseValidationArray.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'label')] });
baseValidationArray.push({ key: 'status', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'status')] });
baseValidationArray.push({ key: 'hash', validators: [] });
baseContext.validation = baseValidationArray;
return baseContext;
}
}
// export class DescriptionTemplateDefinitionEditorModel implements DescriptionTemplateDefinitionPersist {
// sections: DescriptionTemplateDefinitionSectionEditorModel[] = [];
// protected formBuilder: UntypedFormBuilder = new UntypedFormBuilder();
// constructor(
// public validationErrorModel: ValidationErrorModel = new ValidationErrorModel()
// ) { }
// public fromModel(item: DescriptionTemplateDefinition): DescriptionTemplateDefinitionEditorModel {
// if (item) {
// if (item.sections) { item.sections.map(x => this.sections.push(new DescriptionTemplateDefinitionSectionEditorModel().fromModel(x))); }
// }
// return this;
// }
// buildForm(params?: {
// context?: ValidationContext,
// disabled?: boolean,
// rootPath?: string
// }): UntypedFormGroup {
// let { context = null, disabled = false, rootPath } = params ?? {}
// if (context == null) {
// context = DescriptionTemplateDefinitionEditorModel.createValidationContext({
// validationErrorModel: this.validationErrorModel,
// rootPath
// });
// }
// return this.formBuilder.group({
// sections: this.formBuilder.array(
// (this.sections ?? []).map(
// (item, index) => new DescriptionTemplateDefinitionSectionEditorModel(
// this.validationErrorModel
// ).fromModel(item).buildForm({
// rootPath: `sections[${index}].`
// }), context.getValidation('sections')
// )
// ),
// });
// }
// static createValidationContext(params: {
// rootPath?: string,
// validationErrorModel: ValidationErrorModel
// }): ValidationContext {
// const { rootPath = '', validationErrorModel } = params;
// const baseContext: ValidationContext = new ValidationContext();
// const baseValidationArray: Validation[] = new Array<Validation>();
// baseValidationArray.push({ key: 'sections', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}sections`)] });
// baseContext.validation = baseValidationArray;
// return baseContext;
// }
// }
// export class DescriptionTemplateDefinitionSectionEditorModel implements DescriptionTemplateDefinitionSectionPersist {
// id: Guid;
// label: string;
// description: string;
// ordinal: number;
// fields: FieldInSectionEditorModel[] = [];
// hasTemplates: boolean;
// descriptionTemplates?: DescriptionTemplatesInSectionEditorModel[] = [];
// protected formBuilder: UntypedFormBuilder = new UntypedFormBuilder();
// constructor(
// public validationErrorModel: ValidationErrorModel = new ValidationErrorModel()
// ) { }
// public fromModel(item: DescriptionTemplateDefinitionSection): DescriptionTemplateDefinitionSectionEditorModel {
// if (item) {
// this.id = item.id;
// this.label = item.label;
// this.description = item.description;
// this.ordinal = item.ordinal;
// this.hasTemplates = item.hasTemplates;
// if (item.fields) { item.fields.map(x => this.fields.push(new FieldInSectionEditorModel().fromModel(x))); }
// if (item.descriptionTemplates) { item.descriptionTemplates.map(x => this.descriptionTemplates.push(new DescriptionTemplatesInSectionEditorModel().fromModel(x))); }
// }
// return this;
// }
// buildForm(params?: {
// context?: ValidationContext,
// disabled?: boolean,
// rootPath?: string
// }): UntypedFormGroup {
// let { context = null, disabled = false, rootPath } = params ?? {}
// if (context == null) {
// context = DescriptionTemplateDefinitionSectionEditorModel.createValidationContext({
// validationErrorModel: this.validationErrorModel,
// rootPath
// });
// }
// return this.formBuilder.group({
// id: [{ value: this.id, disabled: disabled }, context.getValidation('id').validators],
// label: [{ value: this.label, disabled: disabled }, context.getValidation('label').validators],
// ordinal: [{ value: this.ordinal, disabled: disabled }, context.getValidation('ordinal').validators],
// description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators],
// hasTemplates: [{ value: this.hasTemplates, disabled: disabled }, context.getValidation('hasTemplates').validators],
// fields: this.formBuilder.array(
// (this.fields ?? []).map(
// (item, index) => new FieldInSectionEditorModel(
// this.validationErrorModel
// ).fromModel(item).buildForm({
// rootPath: `fields[${index}].`
// }), context.getValidation('fields')
// )
// ),
// descriptionTemplates: this.formBuilder.array(
// (this.descriptionTemplates ?? []).map(
// (item, index) => new DescriptionTemplatesInSectionEditorModel(
// this.validationErrorModel
// ).fromModel(item).buildForm({
// rootPath: `fields[${index}].`
// }), context.getValidation('descriptionTemplates')
// )
// )
// });
// }
// static createValidationContext(params: {
// rootPath?: string,
// validationErrorModel: ValidationErrorModel
// }): ValidationContext {
// const { rootPath = '', validationErrorModel } = params;
// const baseContext: ValidationContext = new ValidationContext();
// const baseValidationArray: Validation[] = new Array<Validation>();
// baseValidationArray.push({ key: 'id', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}id`)] });
// baseValidationArray.push({ key: 'label', validators: [Validators.required,BackendErrorValidator(validationErrorModel, `${rootPath}label`)] });
// baseValidationArray.push({ key: 'ordinal', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}ordinal`)] });
// baseValidationArray.push({ key: 'description', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}description`)] });
// baseValidationArray.push({ key: 'hasTemplates', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}hasTemplates`)] });
// baseValidationArray.push({ key: 'fields', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}fields`)] });
// baseValidationArray.push({ key: 'descriptionTemplates', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}descriptionTemplates`)] });
// baseValidationArray.push({ key: 'hash', validators: [] });
// baseContext.validation = baseValidationArray;
// return baseContext;
// }
// }
// export class FieldInSectionEditorModel implements FieldInSectionPersist {
// public id: Guid;
// public category: DescriptionTemplateSectionFieldCategory;
// public dataType: DescriptionTemplateExtraFieldDataType;
// public systemFieldType: DescriptionTemplateSystemFieldType;
// public label: string;
// public placeholder: string;
// public description: string;
// public required: boolean = false;
// public ordinal: number;
// protected formBuilder: UntypedFormBuilder = new UntypedFormBuilder();
// constructor(
// public validationErrorModel: ValidationErrorModel = new ValidationErrorModel()
// ) { }
// fromModel(item: FieldInSection): FieldInSectionEditorModel {
// this.id = item.id;
// this.category = item.category;
// this.dataType = item.dataType;
// this.systemFieldType = item.systemFieldType;
// this.label = item.label;
// this.placeholder = item.placeholder;
// this.description = item.description;
// this.required = item.required;
// this.ordinal = item.ordinal;
// return this;
// }
// buildForm(params?: {
// context?: ValidationContext,
// disabled?: boolean,
// rootPath?: string
// }): UntypedFormGroup {
// let { context = null, disabled = false, rootPath } = params ?? {}
// if (context == null) {
// context = FieldInSectionEditorModel.createValidationContext({
// validationErrorModel: this.validationErrorModel,
// rootPath
// });
// }
// return this.formBuilder.group({
// id: [{ value: this.id, disabled: disabled }, context.getValidation('id').validators],
// category: [{ value: this.category, disabled: disabled }, context.getValidation('category').validators],
// dataType: [{ value: this.dataType, disabled: disabled }, context.getValidation('dataType').validators],
// systemFieldType: [{ value: this.systemFieldType, disabled: disabled }, context.getValidation('systemFieldType').validators],
// label: [{ value: this.label, disabled: disabled }, context.getValidation('label').validators],
// placeholder: [{ value: this.placeholder, disabled: disabled }, context.getValidation('placeholder').validators],
// description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators],
// required: [{ value: this.required, disabled: disabled }, context.getValidation('required').validators],
// ordinal: [{ value: this.ordinal, disabled: disabled }, context.getValidation('ordinal').validators],
// });
// }
// static createValidationContext(params: {
// rootPath?: string,
// validationErrorModel: ValidationErrorModel
// }): ValidationContext {
// const { rootPath = '', validationErrorModel } = params;
// const baseContext: ValidationContext = new ValidationContext();
// const baseValidationArray: Validation[] = new Array<Validation>();
// baseValidationArray.push({ key: 'id', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}id`)] });
// baseValidationArray.push({ key: 'category', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}category`)] });
// baseValidationArray.push({ key: 'dataType', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}dataType`)] });
// baseValidationArray.push({ key: 'systemFieldType', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}systemFieldType`)] });
// baseValidationArray.push({ key: 'label', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}label`)] });
// baseValidationArray.push({ key: 'placeholder', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}placeholder`)] });
// baseValidationArray.push({ key: 'description', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}description`)] });
// baseValidationArray.push({ key: 'required', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}required`)] });
// baseValidationArray.push({ key: 'ordinal', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}ordinal`)] });
// baseContext.validation = baseValidationArray;
// return baseContext;
// }
// }
// export class DescriptionTemplatesInSectionEditorModel implements DescriptionTemplatesInSectionPersist {
// id: Guid;
// descriptionTemplateId: Guid;
// label: string;
// minMultiplicity: number;
// maxMultiplicity: number;
// protected formBuilder: UntypedFormBuilder = new UntypedFormBuilder();
// constructor(
// public validationErrorModel: ValidationErrorModel = new ValidationErrorModel()
// ) { }
// fromModel(item: DescriptionTemplatesInSection): DescriptionTemplatesInSectionEditorModel {
// this.id = item.id;
// this.descriptionTemplateId = item.descriptionTemplateId;
// this.label = item.label;
// this.minMultiplicity = item.minMultiplicity;
// this.maxMultiplicity = item.maxMultiplicity;
// return this;
// }
// buildForm(params?: {
// context?: ValidationContext,
// disabled?: boolean,
// rootPath?: string
// }): UntypedFormGroup {
// let { context = null, disabled = false, rootPath } = params ?? {}
// if (context == null) {
// context = DescriptionTemplatesInSectionEditorModel.createValidationContext({
// validationErrorModel: this.validationErrorModel,
// rootPath
// });
// }
// return this.formBuilder.group({
// id: [{ value: this.id, disabled: disabled }, context.getValidation('id').validators],
// descriptionTemplateId: [{ value: this.descriptionTemplateId, disabled: disabled }, context.getValidation('descriptionTemplateId').validators],
// label: [{ value: this.label, disabled: disabled }, context.getValidation('label').validators],
// minMultiplicity: [{ value: this.minMultiplicity, disabled: disabled }, context.getValidation('minMultiplicity').validators],
// maxMultiplicity: [{ value: this.maxMultiplicity, disabled: disabled }, context.getValidation('maxMultiplicity').validators],
// });
// }
// static createValidationContext(params: {
// rootPath?: string,
// validationErrorModel: ValidationErrorModel
// }): ValidationContext {
// const { rootPath = '', validationErrorModel } = params;
// const baseContext: ValidationContext = new ValidationContext();
// const baseValidationArray: Validation[] = new Array<Validation>();
// baseValidationArray.push({ key: 'id', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}id`)] });
// baseValidationArray.push({ key: 'descriptionTemplateId', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}descriptionTemplateId`)] });
// baseValidationArray.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}label`)] });
// baseValidationArray.push({ key: 'minMultiplicity', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}minMultiplicity`)] });
// baseValidationArray.push({ key: 'maxMultiplicity', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}maxMultiplicity`)] });
// baseContext.validation = baseValidationArray;
// return baseContext;
// }
// }