2023-10-05 15:39:17 +02:00
|
|
|
import { UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms";
|
2023-08-03 12:10:36 +02:00
|
|
|
import { DescriptionTemplatesInSection, DmpBlueprint, DmpBlueprintDefinition, FieldCategory, FieldInSection, SectionDmpBlueprint } from "@app/core/model/dmp/dmp-blueprint/dmp-blueprint";
|
2023-09-11 07:59:47 +02:00
|
|
|
import { BackendErrorValidator } from "@common/forms/validation/custom-validator";
|
|
|
|
import { ValidationErrorModel } from "@common/forms/validation/error-model/validation-error-model";
|
|
|
|
import { ValidationContext } from "@common/forms/validation/validation-context";
|
2023-07-25 14:51:29 +02:00
|
|
|
|
|
|
|
export class DmpBlueprintEditor {
|
|
|
|
public id: string;
|
|
|
|
public label: string;
|
|
|
|
public definition: DmpBlueprintDefinitionEditor = new DmpBlueprintDefinitionEditor();
|
|
|
|
public status: number;
|
|
|
|
public created: Date;
|
|
|
|
public modified: Date;
|
2023-09-11 07:59:47 +02:00
|
|
|
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel();
|
2023-07-25 14:51:29 +02:00
|
|
|
|
|
|
|
fromModel(item: DmpBlueprint): DmpBlueprintEditor {
|
|
|
|
this.id = item.id;
|
|
|
|
this.label = item.label;
|
|
|
|
this.definition = new DmpBlueprintDefinitionEditor().fromModel(item.definition);
|
|
|
|
this.status = item.status;
|
|
|
|
this.created = item.created;
|
|
|
|
this.modified = item.modified;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
2023-10-05 15:39:17 +02:00
|
|
|
buildForm(context: ValidationContext = null, disabled: boolean = false): UntypedFormGroup {
|
2023-09-11 07:59:47 +02:00
|
|
|
if (context == null) { context = this.createValidationContext(); }
|
2023-10-05 15:39:17 +02:00
|
|
|
const formGroup = new UntypedFormBuilder().group({
|
2023-09-11 07:59:47 +02:00
|
|
|
id: [{ value: this.id, disabled: disabled }, context.getValidation('id')],
|
|
|
|
label: [{ value: this.label, disabled: disabled }, context.getValidation('label')],
|
|
|
|
status: [{ value: this.status, disabled: disabled }, context.getValidation('status')],
|
|
|
|
created: [{ value: this.created, disabled: disabled }, context.getValidation('created')],
|
|
|
|
modified: [{ value: this.modified, disabled: disabled }, context.getValidation('modified')],
|
2023-07-25 14:51:29 +02:00
|
|
|
});
|
|
|
|
formGroup.addControl('definition', this.definition.buildForm());
|
|
|
|
return formGroup;
|
|
|
|
}
|
|
|
|
|
2023-09-11 07:59:47 +02:00
|
|
|
createValidationContext(): ValidationContext {
|
|
|
|
const baseContext: ValidationContext = new ValidationContext();
|
|
|
|
baseContext.validation.push({ key: 'id', validators: [BackendErrorValidator(this.validationErrorModel, 'id')] });
|
|
|
|
baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'label')] });
|
|
|
|
baseContext.validation.push({ key: 'status', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'status')] });
|
|
|
|
baseContext.validation.push({ key: 'definition', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'definition')] });
|
|
|
|
baseContext.validation.push({ key: 'created', validators: [] });
|
|
|
|
baseContext.validation.push({ key: 'modified', validators: [] });
|
|
|
|
return baseContext;
|
|
|
|
}
|
|
|
|
|
2023-07-25 14:51:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export class DmpBlueprintDefinitionEditor {
|
|
|
|
|
|
|
|
public sections: SectionDmpBlueprintEditor[] = new Array<SectionDmpBlueprintEditor>();
|
|
|
|
|
|
|
|
fromModel(item: DmpBlueprintDefinition): DmpBlueprintDefinitionEditor {
|
|
|
|
if (item.sections) { item.sections.map(x => this.sections.push(new SectionDmpBlueprintEditor().fromModel(x))); }
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
2023-10-05 15:39:17 +02:00
|
|
|
buildForm(): UntypedFormGroup {
|
|
|
|
const formBuilder = new UntypedFormBuilder();
|
2023-07-25 14:51:29 +02:00
|
|
|
const formGroup = formBuilder.group({});
|
2023-10-05 15:39:17 +02:00
|
|
|
const sectionsFormArray = new Array<UntypedFormGroup>();
|
2023-07-25 14:51:29 +02:00
|
|
|
this.sections.forEach(item => {
|
2023-10-05 15:39:17 +02:00
|
|
|
const form: UntypedFormGroup = item.buildForm();
|
2023-07-25 14:51:29 +02:00
|
|
|
sectionsFormArray.push(form);
|
|
|
|
});
|
|
|
|
formGroup.addControl('sections', formBuilder.array(sectionsFormArray));
|
|
|
|
return formGroup;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export class SectionDmpBlueprintEditor {
|
|
|
|
public id: string;
|
|
|
|
public label: string;
|
|
|
|
public description: string;
|
|
|
|
public ordinal: number;
|
2023-08-03 12:10:36 +02:00
|
|
|
public fields: FieldInSectionEditor[] = new Array<FieldInSectionEditor>();
|
2023-09-11 07:59:47 +02:00
|
|
|
public hasTemplates: boolean;
|
2023-07-25 14:51:29 +02:00
|
|
|
public descriptionTemplates: DescriptionTemplatesInSectionEditor[] = new Array<DescriptionTemplatesInSectionEditor>();
|
2023-09-11 07:59:47 +02:00
|
|
|
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel();
|
2023-07-25 14:51:29 +02:00
|
|
|
|
|
|
|
fromModel(item: SectionDmpBlueprint): SectionDmpBlueprintEditor {
|
|
|
|
this.id = item.id;
|
|
|
|
this.label = item.label;
|
|
|
|
this.description = item.description;
|
|
|
|
this.ordinal = item.ordinal;
|
2023-08-03 12:10:36 +02:00
|
|
|
if (item.fields) { item.fields.map(x => this.fields.push(new FieldInSectionEditor().fromModel(x))); }
|
2023-09-11 07:59:47 +02:00
|
|
|
this.hasTemplates = item.hasTemplates;
|
2023-07-25 14:51:29 +02:00
|
|
|
if (item.descriptionTemplates) { item.descriptionTemplates.map(x => this.descriptionTemplates.push(new DescriptionTemplatesInSectionEditor().fromModel(x))); }
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
2023-10-05 15:39:17 +02:00
|
|
|
buildForm(context: ValidationContext = null, disabled: boolean = false): UntypedFormGroup {
|
2023-09-11 07:59:47 +02:00
|
|
|
if (context == null) { context = this.createValidationContext(); }
|
2023-10-05 15:39:17 +02:00
|
|
|
const formGroup = new UntypedFormBuilder().group({
|
2023-09-11 07:59:47 +02:00
|
|
|
id: [{ value: this.id, disabled: disabled }, context.getValidation('id')],
|
|
|
|
label: [{ value: this.label, disabled: disabled }, context.getValidation('label')],
|
|
|
|
description: [{ value: this.description, disabled: disabled }, context.getValidation('description')],
|
|
|
|
ordinal: [{ value: this.ordinal, disabled: disabled }, context.getValidation('ordinal')],
|
|
|
|
hasTemplates: [{ value: this.hasTemplates, disabled: disabled }, context.getValidation('hasTemplates')]
|
2023-07-25 14:51:29 +02:00
|
|
|
});
|
2023-10-05 15:39:17 +02:00
|
|
|
const formBuilder = new UntypedFormBuilder();
|
|
|
|
const fieldsFormArray = new Array<UntypedFormGroup>();
|
2023-08-03 12:10:36 +02:00
|
|
|
this.fields.forEach(item => {
|
2023-10-05 15:39:17 +02:00
|
|
|
const form: UntypedFormGroup = item.buildForm();
|
2023-08-03 12:10:36 +02:00
|
|
|
fieldsFormArray.push(form);
|
2023-07-25 14:51:29 +02:00
|
|
|
});
|
2023-08-03 12:10:36 +02:00
|
|
|
formGroup.addControl('fields', formBuilder.array(fieldsFormArray));
|
2023-10-05 15:39:17 +02:00
|
|
|
const descriptionTemplatesFormArray = new Array<UntypedFormGroup>();
|
2023-07-25 14:51:29 +02:00
|
|
|
this.descriptionTemplates.forEach(item => {
|
2023-10-05 15:39:17 +02:00
|
|
|
const form: UntypedFormGroup = item.buildForm();
|
2023-07-25 14:51:29 +02:00
|
|
|
descriptionTemplatesFormArray.push(form);
|
|
|
|
});
|
|
|
|
formGroup.addControl('descriptionTemplates', formBuilder.array(descriptionTemplatesFormArray));
|
|
|
|
return formGroup;
|
|
|
|
}
|
2023-09-11 07:59:47 +02:00
|
|
|
|
|
|
|
createValidationContext(): ValidationContext {
|
|
|
|
const baseContext: ValidationContext = new ValidationContext();
|
|
|
|
baseContext.validation.push({ key: 'id', validators: [BackendErrorValidator(this.validationErrorModel, 'id')] });
|
|
|
|
baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'label')] });
|
2023-10-04 08:43:16 +02:00
|
|
|
baseContext.validation.push({ key: 'description', validators: [BackendErrorValidator(this.validationErrorModel, 'description')] });
|
2023-09-11 07:59:47 +02:00
|
|
|
baseContext.validation.push({ key: 'ordinal', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'ordinal')] });
|
|
|
|
baseContext.validation.push({ key: 'hasTemplates', validators: [BackendErrorValidator(this.validationErrorModel, 'hasTemplates')] });
|
|
|
|
baseContext.validation.push({ key: 'descriptionTemplates', validators: [BackendErrorValidator(this.validationErrorModel, 'descriptionTemplates')] });
|
|
|
|
return baseContext;
|
|
|
|
}
|
2023-07-25 14:51:29 +02:00
|
|
|
}
|
|
|
|
|
2023-08-03 12:10:36 +02:00
|
|
|
export class FieldInSectionEditor {
|
2023-07-25 14:51:29 +02:00
|
|
|
public id: string;
|
2023-08-03 12:10:36 +02:00
|
|
|
public category: FieldCategory;
|
|
|
|
public type: number;
|
|
|
|
public label: string;
|
2023-07-25 14:51:29 +02:00
|
|
|
public placeholder: string;
|
|
|
|
public description: string;
|
|
|
|
public required: boolean;
|
|
|
|
public ordinal: number;
|
2023-09-11 07:59:47 +02:00
|
|
|
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel();
|
2023-07-25 14:51:29 +02:00
|
|
|
|
2023-08-03 12:10:36 +02:00
|
|
|
fromModel(item: FieldInSection): FieldInSectionEditor {
|
2023-07-25 14:51:29 +02:00
|
|
|
this.id = item.id;
|
2023-08-03 12:10:36 +02:00
|
|
|
this.category = item.category;
|
2023-07-25 14:51:29 +02:00
|
|
|
this.type = item.type;
|
2023-08-03 12:10:36 +02:00
|
|
|
this.label = item.label;
|
2023-07-25 14:51:29 +02:00
|
|
|
this.placeholder = item.placeholder;
|
|
|
|
this.description = item.description;
|
|
|
|
this.required = item.required;
|
|
|
|
this.ordinal = item.ordinal;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
2023-10-05 15:39:17 +02:00
|
|
|
buildForm(context: ValidationContext = null, disabled: boolean = false): UntypedFormGroup {
|
2023-09-11 07:59:47 +02:00
|
|
|
if (context == null) { context = this.createValidationContext(); }
|
2023-10-05 15:39:17 +02:00
|
|
|
const formGroup = new UntypedFormBuilder().group({
|
2023-09-11 07:59:47 +02:00
|
|
|
id: [{ value: this.id, disabled: disabled }, context.getValidation('id')],
|
|
|
|
category: [{ value: this.category, disabled: disabled }, context.getValidation('category')],
|
|
|
|
type: [{ value: this.type, disabled: disabled }, context.getValidation('type')],
|
|
|
|
label: [{ value: this.label, disabled: disabled }, context.getValidation('label')],
|
|
|
|
placeholder: [{ value: this.placeholder, disabled: disabled }, context.getValidation('placeholder')],
|
|
|
|
description: [{ value: this.description, disabled: disabled }, context.getValidation('description')],
|
|
|
|
required: [{ value: this.required, disabled: disabled }, context.getValidation('required')],
|
|
|
|
ordinal: [{ value: this.ordinal, disabled: disabled }, context.getValidation('ordinal')]
|
2023-07-25 14:51:29 +02:00
|
|
|
});
|
|
|
|
return formGroup;
|
|
|
|
}
|
2023-09-11 07:59:47 +02:00
|
|
|
|
|
|
|
createValidationContext(): ValidationContext {
|
|
|
|
const baseContext: ValidationContext = new ValidationContext();
|
|
|
|
baseContext.validation.push({ key: 'id', validators: [BackendErrorValidator(this.validationErrorModel, 'id')] });
|
|
|
|
baseContext.validation.push({ key: 'category', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'category')] });
|
|
|
|
baseContext.validation.push({ key: 'type', validators: [BackendErrorValidator(this.validationErrorModel, 'type')] });
|
|
|
|
baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'label')] });
|
|
|
|
baseContext.validation.push({ key: 'placeholder', validators: [BackendErrorValidator(this.validationErrorModel, 'placeholder')] });
|
|
|
|
baseContext.validation.push({ key: 'description', validators: [BackendErrorValidator(this.validationErrorModel, 'description')] });
|
|
|
|
baseContext.validation.push({ key: 'required', validators: [BackendErrorValidator(this.validationErrorModel, 'required')] });
|
|
|
|
baseContext.validation.push({ key: 'ordinal', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'ordinal')] });
|
|
|
|
return baseContext;
|
|
|
|
}
|
2023-07-25 14:51:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export class DescriptionTemplatesInSectionEditor {
|
|
|
|
public id: string;
|
|
|
|
public descriptionTemplateId: string;
|
|
|
|
public label: string;
|
|
|
|
public minMultiplicity: number;
|
|
|
|
public maxMultiplicity: number;
|
2023-09-11 07:59:47 +02:00
|
|
|
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel();
|
2023-07-25 14:51:29 +02:00
|
|
|
|
|
|
|
fromModel(item: DescriptionTemplatesInSection): DescriptionTemplatesInSectionEditor {
|
|
|
|
this.id = item.id;
|
|
|
|
this.descriptionTemplateId = item.descriptionTemplateId;
|
|
|
|
this.label = item.label;
|
|
|
|
this.minMultiplicity = item.minMultiplicity;
|
|
|
|
this.maxMultiplicity = item.maxMultiplicity;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
2023-10-05 15:39:17 +02:00
|
|
|
buildForm(context: ValidationContext = null, disabled: boolean = false): UntypedFormGroup {
|
2023-09-11 07:59:47 +02:00
|
|
|
if (context == null) { context = this.createValidationContext(); }
|
2023-10-05 15:39:17 +02:00
|
|
|
const formGroup = new UntypedFormBuilder().group({
|
2023-09-11 07:59:47 +02:00
|
|
|
id: [{ value: this.id, disabled: disabled }, context.getValidation('id')],
|
|
|
|
descriptionTemplateId: [{ value: this.descriptionTemplateId, disabled: disabled }, context.getValidation('descriptionTemplateId')],
|
|
|
|
label: [{ value: this.label, disabled: disabled }, context.getValidation('label')],
|
|
|
|
minMultiplicity: [{ value: this.minMultiplicity, disabled: disabled }, context.getValidation('minMultiplicity')],
|
|
|
|
maxMultiplicity: [{ value: this.maxMultiplicity, disabled: disabled }, context.getValidation('maxMultiplicity')]
|
2023-07-25 14:51:29 +02:00
|
|
|
});
|
|
|
|
return formGroup;
|
|
|
|
}
|
2023-09-11 07:59:47 +02:00
|
|
|
|
|
|
|
createValidationContext(): ValidationContext {
|
|
|
|
const baseContext: ValidationContext = new ValidationContext();
|
|
|
|
baseContext.validation.push({ key: 'id', validators: [BackendErrorValidator(this.validationErrorModel, 'id')] });
|
|
|
|
baseContext.validation.push({ key: 'descriptionTemplateId', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'descriptionTemplateId')] });
|
|
|
|
baseContext.validation.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'label')] });
|
|
|
|
baseContext.validation.push({ key: 'minMultiplicity', validators: [BackendErrorValidator(this.validationErrorModel, 'minMultiplicity')] });
|
|
|
|
baseContext.validation.push({ key: 'maxMultiplicity', validators: [BackendErrorValidator(this.validationErrorModel, 'maxMultiplicity')] });
|
|
|
|
return baseContext;
|
|
|
|
}
|
2023-07-25 14:51:29 +02:00
|
|
|
}
|
|
|
|
|
2023-08-03 12:10:36 +02:00
|
|
|
// export class ExtraFieldsInSectionEditor {
|
|
|
|
// public id: string;
|
|
|
|
// public label: string;
|
|
|
|
// public description: string;
|
|
|
|
// public placeholder: string;
|
|
|
|
// public type: ExtraFieldType;
|
|
|
|
// public required: boolean;
|
|
|
|
// public ordinal: number;
|
|
|
|
|
|
|
|
// fromModel(item: ExtraFieldInSection): ExtraFieldsInSectionEditor {
|
|
|
|
// this.id = item.id;
|
|
|
|
// this.label = item.label;
|
|
|
|
// this.description = item.description;
|
|
|
|
// this.placeholder = item.placeholder;
|
|
|
|
// this.type = item.type;
|
|
|
|
// this.required = item.required;
|
|
|
|
// this.ordinal = item.ordinal;
|
|
|
|
// return this;
|
|
|
|
// }
|
|
|
|
|
|
|
|
// buildForm(): FormGroup {
|
|
|
|
// const formGroup = new FormBuilder().group({
|
|
|
|
// id: [this.id],
|
|
|
|
// label: [this.label],
|
|
|
|
// description: [this.description],
|
|
|
|
// placeholder: [this.placeholder],
|
|
|
|
// type: [this.type],
|
|
|
|
// required: [this.required],
|
|
|
|
// ordinal: [this.ordinal]
|
|
|
|
// });
|
|
|
|
// return formGroup;
|
|
|
|
// }
|
|
|
|
// }
|