argos/dmp-frontend/src/app/ui/admin/dmp-blueprint/editor/dmp-blueprint-editor.model.ts

503 lines
23 KiB
TypeScript
Raw Normal View History

2024-01-18 10:59:42 +01:00
import { FormArray, UntypedFormArray, UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms";
import { DmpBlueprintFieldCategory } from "@app/core/common/enum/dmp-blueprint-field-category";
2023-10-24 09:40:26 +02:00
import { DmpBlueprintExtraFieldDataType } from "@app/core/common/enum/dmp-blueprint-field-type";
import { DmpBlueprintStatus } from "@app/core/common/enum/dmp-blueprint-status";
2023-10-24 09:40:26 +02:00
import { DmpBlueprintSystemFieldType } from "@app/core/common/enum/dmp-blueprint-system-field-type";
import { DescriptionTemplatesInSection, DescriptionTemplatesInSectionPersist, DmpBlueprint, DmpBlueprintDefinition, DmpBlueprintDefinitionPersist, DmpBlueprintDefinitionSection, DmpBlueprintDefinitionSectionPersist, DmpBlueprintPersist, ExtraFieldInSection, FieldInSection, FieldInSectionPersist, ReferenceTypeFieldInSection, SystemFieldInSection } from "@app/core/model/dmp-blueprint/dmp-blueprint";
2023-10-24 09:40:26 +02:00
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";
2023-10-24 09:40:26 +02:00
import { Validation, ValidationContext } from "@common/forms/validation/validation-context";
import { Guid } from "@common/types/guid";
export class DmpBlueprintEditorModel extends BaseEditorModel implements DmpBlueprintPersist {
label: string;
definition: DmpBlueprintDefinitionEditorModel = new DmpBlueprintDefinitionEditorModel();
2023-10-24 09:40:26 +02:00
status: DmpBlueprintStatus = DmpBlueprintStatus.Draft;
description: string;
permissions: string[];
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel();
2023-10-24 09:40:26 +02:00
protected formBuilder: UntypedFormBuilder = new UntypedFormBuilder();
2023-10-24 09:40:26 +02:00
constructor() { super(); }
public fromModel(item: DmpBlueprint): DmpBlueprintEditorModel {
if (item) {
super.fromModel(item);
this.label = item.label;
this.status = item.status;
2024-01-19 15:23:34 +01:00
this.definition = new DmpBlueprintDefinitionEditorModel(this.validationErrorModel).fromModel(item.definition);
2023-10-24 09:40:26 +02:00
}
return this;
}
2023-10-05 15:39:17 +02:00
buildForm(context: ValidationContext = null, disabled: boolean = false): UntypedFormGroup {
if (context == null) { context = this.createValidationContext(); }
2023-10-24 09:40:26 +02:00
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({
2024-01-25 19:55:42 +01:00
rootPath: `definition.`,
disabled: disabled
2023-10-24 09:40:26 +02:00
}),
hash: [{ value: this.hash, disabled: disabled }, context.getValidation('hash').validators]
});
}
createValidationContext(): ValidationContext {
const baseContext: ValidationContext = new ValidationContext();
2023-10-24 09:40:26 +02:00
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;
}
2024-01-18 10:59:42 +01:00
createChildSection(index: number): UntypedFormGroup {
const section: DmpBlueprintDefinitionSectionEditorModel = new DmpBlueprintDefinitionSectionEditorModel(this.validationErrorModel);
section.id = Guid.create();
section.ordinal = index + 1;
section.hasTemplates = false;
return section.buildForm({ rootPath: 'definition.sections[' + index + '].' });
}
createChildField(sectionIndex: number, index: number): UntypedFormGroup {
2024-01-25 14:49:34 +01:00
const field: FieldInSectionEditorModel = new FieldInSectionEditorModel(this.validationErrorModel);
field.id = Guid.create();
field.ordinal = index + 1;
2024-01-25 17:08:47 +01:00
return field.buildForm({ rootPath: 'definition.sections[' + sectionIndex + '].fields[' + index + '].' });
2024-01-18 10:59:42 +01:00
}
2024-01-29 12:13:30 +01:00
createChildDescriptionTemplate(sectionIndex: number, index: number, item?: any): UntypedFormGroup {
2024-01-18 10:59:42 +01:00
const descriptionTemplate: DescriptionTemplatesInSectionEditorModel = new DescriptionTemplatesInSectionEditorModel(this.validationErrorModel);
2024-01-25 17:08:47 +01:00
return descriptionTemplate.buildForm({ rootPath: 'definition.sections[' + sectionIndex + '].descriptionTemplates[' + index + '].' });
2024-01-18 10:59:42 +01:00
}
static reApplySectionValidators(params: {
formGroup: UntypedFormGroup,
validationErrorModel: ValidationErrorModel,
}): void {
const { formGroup, validationErrorModel } = params;
const control = formGroup?.get('definition');
DmpBlueprintDefinitionEditorModel.reapplySectionsValidators({
formArray: control.get('sections') as UntypedFormArray,
rootPath: `definition.`,
validationErrorModel: validationErrorModel
});
}
}
2023-10-24 09:40:26 +02:00
export class DmpBlueprintDefinitionEditorModel implements DmpBlueprintDefinitionPersist {
sections: DmpBlueprintDefinitionSectionEditorModel[] = [];
protected formBuilder: UntypedFormBuilder = new UntypedFormBuilder();
2023-10-24 09:40:26 +02:00
constructor(
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel()
) { }
public fromModel(item: DmpBlueprintDefinition): DmpBlueprintDefinitionEditorModel {
if (item) {
2024-01-19 15:23:34 +01:00
if (item.sections) { item.sections.map(x => this.sections.push(new DmpBlueprintDefinitionSectionEditorModel(this.validationErrorModel).fromModel(x))); }
2023-10-24 09:40:26 +02:00
}
return this;
}
2023-10-24 09:40:26 +02:00
buildForm(params?: {
context?: ValidationContext,
disabled?: boolean,
rootPath?: string
}): UntypedFormGroup {
let { context = null, disabled = false, rootPath } = params ?? {}
if (context == null) {
context = DmpBlueprintDefinitionEditorModel.createValidationContext({
validationErrorModel: this.validationErrorModel,
rootPath
});
}
return this.formBuilder.group({
sections: this.formBuilder.array(
(this.sections ?? []).map(
2024-02-15 17:36:46 +01:00
(item, index) => item.buildForm({
2024-01-25 19:55:42 +01:00
rootPath: `${rootPath}sections[${index}].`,
disabled: disabled
2024-01-25 17:08:47 +01:00
})
), context.getValidation('sections').validators
2023-10-24 09:40:26 +02:00
),
});
}
2023-10-24 09:40:26 +02:00
static createValidationContext(params: {
rootPath?: string,
validationErrorModel: ValidationErrorModel
}): ValidationContext {
const { rootPath = '', validationErrorModel } = params;
const baseContext: ValidationContext = new ValidationContext();
const baseValidationArray: Validation[] = new Array<Validation>();
2024-01-25 17:08:47 +01:00
baseValidationArray.push({ key: 'sections', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}sections`)] });
2023-10-24 09:40:26 +02:00
baseContext.validation = baseValidationArray;
return baseContext;
}
2024-01-18 10:59:42 +01:00
static reapplySectionsValidators(params: {
formArray: UntypedFormArray,
validationErrorModel: ValidationErrorModel,
rootPath: string
}): void {
const { validationErrorModel, rootPath, formArray } = params;
formArray?.controls?.forEach(
(control, index) => DmpBlueprintDefinitionSectionEditorModel.reapplySectionValidators({
formGroup: control as UntypedFormGroup,
rootPath: `${rootPath}sections[${index}].`,
validationErrorModel: validationErrorModel
})
);
}
}
2023-10-24 09:40:26 +02:00
export class DmpBlueprintDefinitionSectionEditorModel implements DmpBlueprintDefinitionSectionPersist {
id: Guid;
label: string;
description: string;
ordinal: number;
fields: FieldInSectionEditorModel[] = [];
hasTemplates: boolean;
descriptionTemplates?: DescriptionTemplatesInSectionEditorModel[] = [];
prefillingSourcesIds: Guid[]= [];
2023-10-24 09:40:26 +02:00
protected formBuilder: UntypedFormBuilder = new UntypedFormBuilder();
constructor(
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel()
) { }
public fromModel(item: DmpBlueprintDefinitionSection): DmpBlueprintDefinitionSectionEditorModel {
if (item) {
this.id = item.id;
this.label = item.label;
this.description = item.description;
this.ordinal = item.ordinal;
this.hasTemplates = item.hasTemplates;
2024-01-19 15:23:34 +01:00
if (item.fields) { item.fields.map(x => this.fields.push(new FieldInSectionEditorModel(this.validationErrorModel).fromModel(x))); }
if (item.descriptionTemplates) { item.descriptionTemplates.map(x => this.descriptionTemplates.push(new DescriptionTemplatesInSectionEditorModel(this.validationErrorModel).fromModel(x))); }
if (item.prefillingSources) this.prefillingSourcesIds = item.prefillingSources.map(x => x.id);
2023-10-24 09:40:26 +02:00
}
return this;
}
2023-10-24 09:40:26 +02:00
buildForm(params?: {
context?: ValidationContext,
disabled?: boolean,
rootPath?: string
}): UntypedFormGroup {
let { context = null, disabled = false, rootPath } = params ?? {}
if (context == null) {
context = DmpBlueprintDefinitionSectionEditorModel.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(
2024-02-15 17:36:46 +01:00
(item, index) => item.buildForm({
2024-01-25 19:55:42 +01:00
rootPath: `${rootPath}fields[${index}].`,
disabled: disabled
2024-01-25 17:08:47 +01:00
})
2024-01-31 10:27:36 +01:00
), context.getValidation('fields').validators
2023-10-24 09:40:26 +02:00
),
descriptionTemplates: this.formBuilder.array(
(this.descriptionTemplates ?? []).map(
2024-02-15 17:36:46 +01:00
(item, index) => item.buildForm({
2024-01-25 19:55:42 +01:00
rootPath: `${rootPath}descriptionTemplates[${index}].`,
disabled: disabled
2024-01-25 17:08:47 +01:00
})
2024-01-31 10:27:36 +01:00
), context.getValidation('descriptionTemplates').validators
),
prefillingSourcesIds: [{ value: this.prefillingSourcesIds, disabled: disabled }, context.getValidation('prefillingSourcesIds').validators],
});
}
2023-10-24 09:40:26 +02:00
static createValidationContext(params: {
rootPath?: string,
validationErrorModel: ValidationErrorModel
}): ValidationContext {
const { rootPath = '', validationErrorModel } = params;
const baseContext: ValidationContext = new ValidationContext();
2023-10-24 09:40:26 +02:00
const baseValidationArray: Validation[] = new Array<Validation>();
baseValidationArray.push({ key: 'id', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}id`)] });
2024-01-25 17:08:47 +01:00
baseValidationArray.push({ key: 'label', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}label`)] });
2023-10-24 09:40:26 +02:00
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`)] });
2024-01-25 17:08:47 +01:00
baseValidationArray.push({ key: 'fields', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}fields`)] });
2023-10-24 09:40:26 +02:00
baseValidationArray.push({ key: 'descriptionTemplates', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}descriptionTemplates`)] });
baseValidationArray.push({ key: 'prefillingSourcesIds', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}prefillingSourcesIds`)] });
2023-10-24 09:40:26 +02:00
baseValidationArray.push({ key: 'hash', validators: [] });
baseContext.validation = baseValidationArray;
return baseContext;
}
2023-10-24 09:40:26 +02:00
2024-01-18 10:59:42 +01:00
static reapplySectionValidators(params: {
formGroup: UntypedFormGroup,
validationErrorModel: ValidationErrorModel,
rootPath: string
}): void {
const { formGroup, rootPath, validationErrorModel } = params;
const context = DmpBlueprintDefinitionSectionEditorModel.createValidationContext({
rootPath,
validationErrorModel
});
['id', 'label', 'ordinal', 'description', 'hasTemplates', 'prefillingSourcesIds', 'hash'].forEach(keyField => {
2024-01-18 10:59:42 +01:00
const control = formGroup?.get(keyField);
control?.clearValidators();
control?.addValidators(context.getValidation(keyField).validators);
});
(formGroup.get('fields') as FormArray).controls?.forEach(
(control, index) => FieldInSectionEditorModel.reapplyValidators({
formGroup: control as UntypedFormGroup,
rootPath: `${rootPath}fields[${index}].`,
validationErrorModel: validationErrorModel
}
)
);
(formGroup.get('descriptionTemplates') as FormArray).controls?.forEach(
2024-01-18 10:59:42 +01:00
(control, index) => DescriptionTemplatesInSectionEditorModel.reapplyValidators({
formGroup: control as UntypedFormGroup,
rootPath: `${rootPath}descriptionTemplates[${index}].`,
validationErrorModel: validationErrorModel
}
)
);
2024-01-25 17:08:47 +01:00
2024-01-18 10:59:42 +01:00
}
}
2023-10-24 09:40:26 +02:00
export class FieldInSectionEditorModel implements FieldInSectionPersist {
public id: Guid;
public category: DmpBlueprintFieldCategory;
2023-10-24 09:40:26 +02:00
public label: string;
public placeholder: string;
public description: string;
2024-02-20 10:37:09 +01:00
public semantics: string[];
2023-10-27 17:56:19 +02:00
public required: boolean = false;
2023-10-24 09:40:26 +02:00
public ordinal: number;
public dataType: DmpBlueprintExtraFieldDataType;
public systemFieldType: DmpBlueprintSystemFieldType;
public referenceTypeId: Guid;
2023-10-24 09:40:26 +02:00
protected formBuilder: UntypedFormBuilder = new UntypedFormBuilder();
constructor(
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel()
) { }
fromModel(item: FieldInSection): FieldInSectionEditorModel {
this.id = item.id;
2023-08-03 12:10:36 +02:00
this.category = item.category;
this.label = item.label;
2023-10-24 09:40:26 +02:00
this.placeholder = item.placeholder;
this.description = item.description;
2024-02-20 10:37:09 +01:00
this.semantics = item.semantics;
2023-10-24 09:40:26 +02:00
this.required = item.required;
this.ordinal = item.ordinal;
if (this.category == DmpBlueprintFieldCategory.System) {
this.systemFieldType = (item as SystemFieldInSection).systemFieldType;
} else if (this.category == DmpBlueprintFieldCategory.Extra) {
this.dataType = (item as ExtraFieldInSection).dataType;
} else if (this.category == DmpBlueprintFieldCategory.ReferenceType) {
this.referenceTypeId = (item as ReferenceTypeFieldInSection).referenceType?.id;
}
return this;
}
2023-10-24 09:40:26 +02:00
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],
2024-03-22 14:18:51 +01:00
label: [{ value: this.label, disabled: disabled }, this.category === DmpBlueprintFieldCategory.System ? context.getValidation('label-system').validators : ( this.category === DmpBlueprintFieldCategory.Extra ? context.getValidation('label-extra').validators : context.getValidation('label-external-reference').validators)],
2023-10-24 09:40:26 +02:00
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],
2024-02-20 10:37:09 +01:00
semantics: [{ value: this.semantics, disabled: disabled }, context.getValidation('semantics').validators],
2023-10-24 09:40:26 +02:00
ordinal: [{ value: this.ordinal, disabled: disabled }, context.getValidation('ordinal').validators],
dataType: [{ value: this.dataType, disabled: disabled }, context.getValidation('dataType').validators],
systemFieldType: [{ value: this.systemFieldType, disabled: disabled }, context.getValidation('systemFieldType').validators],
referenceTypeId: [{ value: this.referenceTypeId, disabled: disabled }, context.getValidation('referenceTypeId').validators],
});
}
2023-10-24 09:40:26 +02:00
static createValidationContext(params: {
rootPath?: string,
validationErrorModel: ValidationErrorModel
}): ValidationContext {
const { rootPath = '', validationErrorModel } = params;
const baseContext: ValidationContext = new ValidationContext();
2023-10-24 09:40:26 +02:00
const baseValidationArray: Validation[] = new Array<Validation>();
baseValidationArray.push({ key: 'id', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}id`)] });
2024-02-13 17:26:26 +01:00
baseValidationArray.push({ key: 'category', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}category`)] });
2024-01-25 17:08:47 +01:00
baseValidationArray.push({ key: 'label-system', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}label`)] });
2024-02-13 17:26:26 +01:00
baseValidationArray.push({ key: 'label-extra', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}label`)] });
2024-03-22 14:18:51 +01:00
baseValidationArray.push({ key: 'label-external-reference', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}label`)] });
2023-10-24 09:40:26 +02:00
baseValidationArray.push({ key: 'placeholder', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}placeholder`)] });
baseValidationArray.push({ key: 'description', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}description`)] });
2024-02-20 10:37:09 +01:00
baseValidationArray.push({ key: 'semantics', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}semantics`)] });
2023-10-24 09:40:26 +02:00
baseValidationArray.push({ key: 'required', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}required`)] });
baseValidationArray.push({ key: 'ordinal', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}ordinal`)] });
baseValidationArray.push({ key: 'dataType', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}dataType`)] });
baseValidationArray.push({ key: 'systemFieldType', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}systemFieldType`)] });
baseValidationArray.push({ key: 'referenceTypeId', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}referenceTypeId`)] });
2023-10-24 09:40:26 +02:00
baseContext.validation = baseValidationArray;
return baseContext;
}
2024-01-18 10:59:42 +01:00
static reapplyValidators(params: {
formGroup: UntypedFormGroup,
validationErrorModel: ValidationErrorModel,
rootPath: string
}): void {
const { formGroup, rootPath, validationErrorModel } = params;
const context = FieldInSectionEditorModel.createValidationContext({
rootPath,
validationErrorModel
});
2024-02-20 10:37:09 +01:00
['id', 'category', 'dataType', 'systemFieldType', 'referenceTypeId', 'label', 'placeholder', 'description', 'semantics', 'required', 'ordinal'].forEach(keyField => {
2024-01-18 10:59:42 +01:00
const control = formGroup?.get(keyField);
control?.clearValidators();
2024-01-25 17:08:47 +01:00
if (keyField == 'label') {
2024-03-22 14:18:51 +01:00
control?.addValidators(context.has('label-system') ? context.getValidation('label-system').validators : (context.has('label-extra') ? context.getValidation('label-extra').validators : context.getValidation('label-external-reference').validators));
} else if (keyField == 'referenceTypeId') {
if (formGroup.get('category').value == DmpBlueprintFieldCategory.ReferenceType) control?.addValidators([Validators.required, ...context.getValidation('referenceTypeId').validators]);
else control?.addValidators([...context.getValidation('referenceTypeId').validators]);
} else if (keyField == 'systemFieldType') {
if (formGroup.get('category').value == DmpBlueprintFieldCategory.System) control?.addValidators([Validators.required, ...context.getValidation('systemFieldType').validators]);
else control?.addValidators([...context.getValidation('systemFieldType').validators]);
} else if (keyField == 'dataType') {
if (formGroup.get('category').value == DmpBlueprintFieldCategory.Extra) control?.addValidators([Validators.required, ...context.getValidation('dataType').validators]);
else control?.addValidators([...context.getValidation('dataType').validators]);
2024-01-25 17:08:47 +01:00
} else {
control?.addValidators(context.getValidation(keyField).validators);
}
2024-01-18 10:59:42 +01:00
})
}
}
2023-10-24 09:40:26 +02:00
export class DescriptionTemplatesInSectionEditorModel implements DescriptionTemplatesInSectionPersist {
descriptionTemplateGroupId: Guid;
2023-10-24 09:40:26 +02:00
label: string;
minMultiplicity: number;
maxMultiplicity: number;
protected formBuilder: UntypedFormBuilder = new UntypedFormBuilder();
constructor(
public validationErrorModel: ValidationErrorModel = new ValidationErrorModel()
) { }
2023-10-24 09:40:26 +02:00
fromModel(item: DescriptionTemplatesInSection): DescriptionTemplatesInSectionEditorModel {
this.descriptionTemplateGroupId = item.descriptionTemplateGroupId;
2023-10-24 09:40:26 +02:00
this.label = item.label;
this.minMultiplicity = item.minMultiplicity;
this.maxMultiplicity = item.maxMultiplicity;
return this;
}
2023-10-24 09:40:26 +02:00
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({
descriptionTemplateGroupId: [{ value: this.descriptionTemplateGroupId, disabled: disabled }, context.getValidation('descriptionTemplateGroupId').validators],
2023-10-24 09:40:26 +02:00
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],
});
}
2023-10-24 09:40:26 +02:00
static createValidationContext(params: {
rootPath?: string,
validationErrorModel: ValidationErrorModel
}): ValidationContext {
const { rootPath = '', validationErrorModel } = params;
const baseContext: ValidationContext = new ValidationContext();
2023-10-24 09:40:26 +02:00
const baseValidationArray: Validation[] = new Array<Validation>();
baseValidationArray.push({ key: 'descriptionTemplateGroupId', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}descriptionTemplateGroupId`)] });
2024-01-25 17:08:47 +01:00
baseValidationArray.push({ key: 'label', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}label`)] });
2023-10-24 09:40:26 +02:00
baseValidationArray.push({ key: 'minMultiplicity', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}minMultiplicity`)] });
baseValidationArray.push({ key: 'maxMultiplicity', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}maxMultiplicity`)] });
baseContext.validation = baseValidationArray;
return baseContext;
}
2024-01-18 10:59:42 +01:00
static reapplyValidators(params: {
formGroup: UntypedFormGroup,
validationErrorModel: ValidationErrorModel,
rootPath: string
}): void {
const { formGroup, rootPath, validationErrorModel } = params;
const context = DescriptionTemplatesInSectionEditorModel.createValidationContext({
rootPath,
validationErrorModel
});
2024-01-29 12:13:30 +01:00
['descriptionTemplateGroupId', 'label', 'minMultiplicity', 'maxMultiplicity'].forEach(keyField => {
2024-01-18 10:59:42 +01:00
const control = formGroup?.get(keyField);
control?.clearValidators();
control?.addValidators(context.getValidation(keyField).validators);
})
}
2023-10-24 09:40:26 +02:00
}