From 8fb3556acbe11cc220ca93da11e84e118a65a4f6 Mon Sep 17 00:00:00 2001 From: amentis Date: Mon, 29 Jan 2024 13:13:30 +0200 Subject: [PATCH] dmp blueprint editor fixes --- .../SectionPersist.java | 2 +- .../eudat/query/DescriptionTemplateQuery.java | 27 +++- .../lookup/DescriptionTemplateLookup.java | 11 ++ .../core/query/description-template.lookup.ts | 2 + .../description-template.service.ts | 6 +- .../single-auto-complete-configuration.ts | 2 + .../single-auto-complete.component.html | 2 + .../single-auto-complete.component.scss | 9 ++ .../single/single-auto-complete.component.ts | 12 ++ .../dmp-blueprint-editor.component.html | 92 ++++++----- .../editor/dmp-blueprint-editor.component.ts | 149 ++++++++++++------ .../editor/dmp-blueprint-editor.model.ts | 7 +- dmp-frontend/src/assets/i18n/en.json | 6 +- 13 files changed, 229 insertions(+), 98 deletions(-) diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpblueprintdefinition/SectionPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpblueprintdefinition/SectionPersist.java index 44b8165b4..24b7f218f 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpblueprintdefinition/SectionPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpblueprintdefinition/SectionPersist.java @@ -138,7 +138,7 @@ public class SectionPersist { .failOn(SectionPersist._hasTemplates).failWith(messageSource.getMessage("Validation_Required", new Object[]{SectionPersist._hasTemplates}, LocaleContextHolder.getLocale())), this.spec() .must(() -> !this.isListNullOrEmpty(item.getFields())) - .failOn(SectionPersist._fields).failWith(messageSource.getMessage("Validation_Required", new Object[]{eu.eudat.model.persist.descriptiontemplatedefinition.SectionPersist._fieldSets}, LocaleContextHolder.getLocale())), + .failOn(SectionPersist._fields).failWith(messageSource.getMessage("Validation_Required", new Object[]{SectionPersist._fields}, LocaleContextHolder.getLocale())), this.navSpec() .iff(() -> !this.isListNullOrEmpty(item.getFields())) .on(SectionPersist._fields) diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionTemplateQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionTemplateQuery.java index c623a0cf8..f21b3ac75 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionTemplateQuery.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/DescriptionTemplateQuery.java @@ -44,7 +44,9 @@ public class DescriptionTemplateQuery extends QueryBase statuses; private Collection excludedIds; - + + private Collection excludedGroupIds; + private Collection typeIds; private EnumSet authorize = EnumSet.of(AuthorizationFlags.None); @@ -159,6 +161,21 @@ public class DescriptionTemplateQuery extends QueryBase values) { + this.excludedGroupIds = values; + return this; + } + + public DescriptionTemplateQuery excludedGroupIds(UUID value) { + this.excludedGroupIds = List.of(value); + return this; + } + + public DescriptionTemplateQuery excludedGroupIds(UUID... value) { + this.excludedGroupIds = Arrays.asList(value); + return this; + } + public DescriptionTemplateQuery authorize(EnumSet values) { this.authorize = values; return this; @@ -181,7 +198,7 @@ public class DescriptionTemplateQuery extends QueryBase notInClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(DescriptionTemplateEntity._groupId)); + for (UUID item : this.excludedGroupIds) + notInClause.value(item); + predicates.add(notInClause.not()); + } if (!predicates.isEmpty()) { Predicate[] predicatesArray = predicates.toArray(new Predicate[0]); return queryContext.CriteriaBuilder.and(predicatesArray); diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/lookup/DescriptionTemplateLookup.java b/dmp-backend/core/src/main/java/eu/eudat/query/lookup/DescriptionTemplateLookup.java index de8137a83..6158f5eec 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/lookup/DescriptionTemplateLookup.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/lookup/DescriptionTemplateLookup.java @@ -27,6 +27,8 @@ public class DescriptionTemplateLookup extends Lookup { private List excludedIds; + private List excludedGroupIds; + public String getLike() { return like; } @@ -91,6 +93,14 @@ public class DescriptionTemplateLookup extends Lookup { this.versionStatuses = versionStatuses; } + public List getExcludedGroupIds() { + return excludedGroupIds; + } + + public void setExcludedGroupIds(List excludedGroupIds) { + this.excludedGroupIds = excludedGroupIds; + } + public DescriptionTemplateQuery enrich(QueryFactory queryFactory) { DescriptionTemplateQuery query = queryFactory.query(DescriptionTemplateQuery.class); if (this.like != null) query.like(this.like); @@ -99,6 +109,7 @@ public class DescriptionTemplateLookup extends Lookup { if (this.statuses != null) query.statuses(this.statuses); if (this.ids != null) query.ids(this.ids); if (this.excludedIds != null) query.excludedIds(this.excludedIds); + if (this.excludedGroupIds != null) query.excludedGroupIds(this.excludedGroupIds); if (this.typeIds != null) query.typeIds(this.typeIds); if (this.versionStatuses != null) query.versionStatuses(this.versionStatuses); diff --git a/dmp-frontend/src/app/core/query/description-template.lookup.ts b/dmp-frontend/src/app/core/query/description-template.lookup.ts index b2ef3e146..ce7337126 100644 --- a/dmp-frontend/src/app/core/query/description-template.lookup.ts +++ b/dmp-frontend/src/app/core/query/description-template.lookup.ts @@ -12,6 +12,7 @@ export class DescriptionTemplateLookup extends Lookup implements DescriptionTemp typeIds: Guid[]; statuses: DescriptionTemplateStatus[]; groupIds: Guid[]; + excludedGroupIds: Guid[]; versionStatuses: DescriptionTemplateVersionStatus[]; constructor() { @@ -27,5 +28,6 @@ export interface DescriptionTemplateFilter { typeIds: Guid[]; statuses: DescriptionTemplateStatus[]; groupIds: Guid[]; + excludedGroupIds: Guid[]; versionStatuses: DescriptionTemplateVersionStatus[]; } diff --git a/dmp-frontend/src/app/core/services/description-template/description-template.service.ts b/dmp-frontend/src/app/core/services/description-template/description-template.service.ts index 796a6b99f..9b7245e4f 100644 --- a/dmp-frontend/src/app/core/services/description-template/description-template.service.ts +++ b/dmp-frontend/src/app/core/services/description-template/description-template.service.ts @@ -101,6 +101,7 @@ export class DescriptionTemplateService { titleFn: (item: DescriptionTemplate) => item.label, subtitleFn: (item: DescriptionTemplate) => item.description, valueAssign: (item: DescriptionTemplate) => item.id, + popupItemActionIcon: 'visibility' }; // tslint:disable-next-line: member-ordering @@ -145,6 +146,7 @@ export class DescriptionTemplateService { titleFn: (item: DescriptionTemplate) => item.label, subtitleFn: (item: DescriptionTemplate) => item.description, valueAssign: (item: DescriptionTemplate) => item.groupId, + popupItemActionIcon: 'visibility' }; // tslint:disable-next-line: member-ordering @@ -159,11 +161,13 @@ export class DescriptionTemplateService { popupItemActionIcon: 'visibility' }; - public buildDescriptionTempalteGroupAutocompleteLookup(like?: string, excludedIds?: Guid[], groupIds?: Guid[]): DescriptionTemplateLookup { + public buildDescriptionTempalteGroupAutocompleteLookup(like?: string, excludedIds?: Guid[], groupIds?: Guid[], excludedGroupIds?: Guid[]): DescriptionTemplateLookup { const lookup: DescriptionTemplateLookup = new DescriptionTemplateLookup(); lookup.page = { size: 100, offset: 0 }; if (excludedIds && excludedIds.length > 0) { lookup.excludedIds = excludedIds; } if (groupIds && groupIds.length > 0) { lookup.groupIds = groupIds; } + if (excludedGroupIds && excludedGroupIds.length > 0) { lookup.excludedGroupIds = excludedGroupIds; } + lookup.isActive = [IsActive.Active]; lookup.versionStatuses = [DescriptionTemplateVersionStatus.Current]; lookup.statuses = [DescriptionTemplateStatus.Finalized]; diff --git a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete-configuration.ts b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete-configuration.ts index 2b4c9561a..b97d76151 100644 --- a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete-configuration.ts +++ b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete-configuration.ts @@ -31,6 +31,8 @@ export interface SingleAutoCompleteConfiguration { optionTemplate?: TemplateRef; // Selected value formating template selectedValueTemplate?: TemplateRef; + // Display icon that opens popup + popupItemActionIcon?: string; // // To revert: "We set the items observable on focus to avoid the request being executed on component load." // forceFocus?: boolean; diff --git a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.html b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.html index 0b12f3c2e..d02b7355b 100644 --- a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.html +++ b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.html @@ -15,6 +15,7 @@ {{_titleFn(item)}}
{{_subtitleFn(item)}} + {{popupItemActionIcon}} @@ -31,6 +32,7 @@ {{_titleFn(item)}}
{{_subtitleFn(item)}} + {{popupItemActionIcon}} diff --git a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.scss b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.scss index d87344f60..27edb372d 100644 --- a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.scss +++ b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.scss @@ -35,6 +35,15 @@ } } +.option-icon { + mat-icon { + margin: 0px 5px 0px 10px; + } + mat-icon:hover { + color: var(--primary-color); + } +} + .chip-list { width: auto; } diff --git a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.ts b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.ts index 36f7b89f6..f9c887828 100644 --- a/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.ts +++ b/dmp-frontend/src/app/library/auto-complete/single/single-auto-complete.component.ts @@ -50,6 +50,7 @@ export class SingleAutoCompleteComponent extends _CustomComponentMixinBase imple // Selected Option Event @Output() optionSelected: EventEmitter = new EventEmitter(); + @Output() optionActionClicked: EventEmitter = new EventEmitter(); id = `single-autocomplete-${SingleAutoCompleteComponent.nextId++}`; stateChanges = new Subject(); @@ -192,6 +193,13 @@ export class SingleAutoCompleteComponent extends _CustomComponentMixinBase imple this.optionSelectedInternal(event.option.value); } + _optionActionClick(item: any, event: MouseEvent): void { + if (event != null) { + event.stopPropagation(); + } + this.optionActionClicked.emit(item); + } + private optionSelectedInternal(item: any) { const newValue = this._valueToAssign(item); @@ -331,6 +339,10 @@ export class SingleAutoCompleteComponent extends _CustomComponentMixinBase imple return this.configuration.autoSelectFirstOptionOnBlur != null ? this.configuration.autoSelectFirstOptionOnBlur : false; } + get popupItemActionIcon(): string { + return this.configuration.popupItemActionIcon != null ? this.configuration.popupItemActionIcon : ''; + } + // get forceFocus(): boolean { // return this.configuration.forceFocus != null ? this.configuration.forceFocus : false; // } diff --git a/dmp-frontend/src/app/ui/admin/dmp-blueprint/editor/dmp-blueprint-editor.component.html b/dmp-frontend/src/app/ui/admin/dmp-blueprint/editor/dmp-blueprint-editor.component.html index 8b468647a..e7df605a6 100644 --- a/dmp-frontend/src/app/ui/admin/dmp-blueprint/editor/dmp-blueprint-editor.component.html +++ b/dmp-frontend/src/app/ui/admin/dmp-blueprint/editor/dmp-blueprint-editor.component.html @@ -87,8 +87,6 @@ {{enumUtils.toDmpBlueprintSystemFieldTypeString(systemFieldType)}} -
@@ -102,14 +100,13 @@
{{fieldIndex + 1}}
-
- drag_indicator -
+
drag_indicator
{{'DMP-BLUEPRINT-EDITOR.FIELDS.SYSTEM-FIELD' | translate}} {{field.get('dataType').getError('backendError').message}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}}
@@ -137,6 +134,7 @@ {{'DMP-BLUEPRINT-EDITOR.FIELDS.FIELD-PLACEHOLDER' | translate}} {{field.get('placeholder').getError('backendError').message}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}}
@@ -144,11 +142,13 @@ {{'DMP-BLUEPRINT-EDITOR.FIELDS.FIELD-DESCRIPTION' | translate}} {{field.get('description').getError('backendError').message}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}}
{{'DMP-BLUEPRINT-EDITOR.FIELDS.FIELD-REQUIRED' | translate}} {{field.get('systemFieldType').getError('backendError').message}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}}
+ {{'DMP-BLUEPRINT-EDITOR.FIELDS-REQUIRED' | translate}} + {{section.get('fields').getError('backendError').message}} @@ -168,50 +170,62 @@
- - + {{'DMP-BLUEPRINT-EDITOR.FIELDS.DESCRIPTION-TEMPLATES' | translate}} {{section.get('hasTemplates').getError('backendError').message}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}}
+
+ +
- -
-
-
+ +
+
+
+ {{descriptionTemplateIndex + 1}} +
+
drag_indicator
+
{{'DMP-BLUEPRINT-EDITOR.FIELDS.DESCRIPTION-TEMPLATES' | translate}} - + + {{descriptionTemplate.get('descriptionTemplateGroupId').getError('backendError').message}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} +
-
-
-
-
-
-
- - {{'DMP-BLUEPRINT-EDITOR.FIELDS.DESCRIPTION-TEMPLATE-LABEL' | translate}} - - {{descriptionTemplate.get('label').getError('backendError').message}} - -
-
- - {{'DMP-BLUEPRINT-EDITOR.FIELDS.DESCRIPTION-TEMPLATE-MIN-MULTIPLICITY' | translate}} - - {{descriptionTemplate.get('minMultiplicity').getError('backendError').message}} - -
-
- - {{'DMP-BLUEPRINT-EDITOR.FIELDS.DESCRIPTION-TEMPLATE-MAX-MULTIPLICITY' | translate}} - - {{descriptionTemplate.get('maxMultiplicity').getError('backendError').message}} - -
+
+ + {{'DMP-BLUEPRINT-EDITOR.FIELDS.DESCRIPTION-TEMPLATE-LABEL' | translate}} + + {{descriptionTemplate.get('label').getError('backendError').message}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} +
-
+
+ + {{'DMP-BLUEPRINT-EDITOR.FIELDS.DESCRIPTION-TEMPLATE-MIN-MULTIPLICITY' | translate}} + + {{descriptionTemplate.get('minMultiplicity').getError('backendError').message}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+
+ + {{'DMP-BLUEPRINT-EDITOR.FIELDS.DESCRIPTION-TEMPLATE-MAX-MULTIPLICITY' | translate}} + + {{descriptionTemplate.get('maxMultiplicity').getError('backendError').message}} + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+
+ +
+
diff --git a/dmp-frontend/src/app/ui/admin/dmp-blueprint/editor/dmp-blueprint-editor.component.ts b/dmp-frontend/src/app/ui/admin/dmp-blueprint/editor/dmp-blueprint-editor.component.ts index 39b2b47d5..1a4ea6976 100644 --- a/dmp-frontend/src/app/ui/admin/dmp-blueprint/editor/dmp-blueprint-editor.component.ts +++ b/dmp-frontend/src/app/ui/admin/dmp-blueprint/editor/dmp-blueprint-editor.component.ts @@ -17,7 +17,6 @@ import { IsActive } from '@app/core/common/enum/is-active.enum'; import { AppPermission } from '@app/core/common/enum/permission.enum'; import { DmpBlueprint, DmpBlueprintPersist } from '@app/core/model/dmp-blueprint/dmp-blueprint'; import { AuthService } from '@app/core/services/auth/auth.service'; -import { DmpService } from '@app/core/services/dmp/dmp.service'; import { LoggingService } from '@app/core/services/logging/logging-service'; import { MatomoService } from '@app/core/services/matomo/matomo-service'; import { FileUtils } from '@app/core/services/utilities/file-utils.service'; @@ -35,15 +34,12 @@ import { map, takeUntil } from 'rxjs/operators'; import { DescriptionTemplatesInSectionEditorModel, DmpBlueprintDefinitionSectionEditorModel, DmpBlueprintEditorModel, FieldInSectionEditorModel } from './dmp-blueprint-editor.model'; import { DmpBlueprintEditorResolver } from './dmp-blueprint-editor.resolver'; import { DmpBlueprintEditorService } from './dmp-blueprint-editor.service'; -import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration'; import { DescriptionTemplateService } from '@app/core/services/description-template/description-template.service'; -import { DescriptionTemplateLookup } from '@app/core/query/description-template.lookup'; import { DescriptionTemplate } from '@app/core/model/description-template/description-template'; -import { nameof } from 'ts-simple-nameof'; -import { DescriptionTemplateStatus } from '@app/core/common/enum/description-template-status'; -import { DescriptionTemplateVersionStatus } from '@app/core/common/enum/description-template-version-status'; import { MatSelectChange } from '@angular/material/select'; import { DescriptionTemplatePreviewDialogComponent } from '../../description-template/description-template-preview/description-template-preview-dialog.component'; +import { SingleAutoCompleteConfiguration } from '@app/library/auto-complete/single/single-auto-complete-configuration'; +import { MatCheckboxChange } from '@angular/material/checkbox'; @Component({ @@ -64,6 +60,16 @@ export class DmpBlueprintEditorComponent extends BaseEditor(DmpBlueprintSystemFieldType); dmpBlueprintExtraFieldDataType = DmpBlueprintExtraFieldDataType; public dmpBlueprintExtraFieldDataTypeEnum = this.enumUtils.getEnumValues(DmpBlueprintExtraFieldDataType); + descriptionTempalteGroupSingleAutocompleteConfiguration: SingleAutoCompleteConfiguration = { + initialItems: (data?: any) => this.descriptionTemplateService.query(this.descriptionTemplateService.buildDescriptionTempalteGroupAutocompleteLookup(null, null, null, this.getUsedDescriptionTemplateGroupIds())).pipe(map(x => x.items)), + filterFn: (searchQuery: string, data?: any) => this.descriptionTemplateService.query(this.descriptionTemplateService.buildDescriptionTempalteGroupAutocompleteLookup(searchQuery, null, null, this.getUsedDescriptionTemplateGroupIds() ? this.getUsedDescriptionTemplateGroupIds(): null)).pipe(map(x => x.items)), + getSelectedItem: (selectedItem: any) => this.descriptionTemplateService.query(this.descriptionTemplateService.buildDescriptionTempalteGroupAutocompleteLookup(null, null, [selectedItem])).pipe(map(x => x.items[0])), + displayFn: (item: DescriptionTemplate) => item.label, + titleFn: (item: DescriptionTemplate) => item.label, + subtitleFn: (item: DescriptionTemplate) => item.description, + valueAssign: (item: DescriptionTemplate) => item.groupId, + popupItemActionIcon: 'visibility' + } protected get canDelete(): boolean { return !this.isDeleted && !this.isNew && this.hasPermission(this.authService.permissionEnum.DeleteDmpBlueprint); @@ -289,9 +295,21 @@ export class DmpBlueprintEditorComponent extends BaseEditor { + const fieldsArray = (this.formGroup.get('definition').get('sections') as FormArray).at(sectionIndex).get('fields') as FormArray; + const systemFieldType = fieldsArray.at(fieldIndex).get('systemFieldType').value + if(systemFieldType > -1) { + if (this.selectedSystemFields.length == 1){ + this.selectedSystemFields = []; + }else{ + const index = this.selectedSystemFields.indexOf(systemFieldType); + if (index > -1) { + this.selectedSystemFields.splice(index, 1); + this.selectedSystemFields = [...this.selectedSystemFields]; + } + } + } + fieldsArray.removeAt(fieldIndex); + fieldsArray.controls.forEach((section, index) => { section.get('ordinal').setValue(index + 1); }); @@ -301,7 +319,7 @@ export class DmpBlueprintEditorComponent extends BaseEditor { + const descriptionTempaltesArray = (this.formGroup.get('definition').get('sections') as FormArray).at(index).get('descriptionTemplates') as FormArray; + if (descriptionTempaltesArray.length > 1){ + descriptionTempaltesArray.controls.forEach((template, index) => { + if(template.get('descriptionTemplateGroupId').value != undefined) excludedGroupIds.push(template.get('descriptionTemplateGroupId').value as Guid); + }) + } + }); + + return excludedGroupIds; + } + + removeDescriptionTemplate(sectionIndex: number, descriptionTemplateIndex: number): void { + const descriptionTempaltesArray = (this.formGroup.get('definition').get('sections') as FormArray).at(sectionIndex).get('descriptionTemplates') as FormArray; + descriptionTempaltesArray.removeAt(descriptionTemplateIndex); + + DmpBlueprintEditorModel.reApplySectionValidators( + { + formGroup: this.formGroup, + validationErrorModel: this.editorModel.validationErrorModel + } + ); + descriptionTempaltesArray.markAsDirty(); + } + + dropDescriptionTemplates(event: CdkDragDrop, sectionIndex: number) { + const descriptionTemplatesFormArray = ((this.formGroup.get('definition').get('sections') as FormArray).at(sectionIndex).get('descriptionTemplates') as FormArray); + + moveItemInArray(descriptionTemplatesFormArray.controls, event.previousIndex, event.currentIndex); + descriptionTemplatesFormArray.updateValueAndValidity(); + + DmpBlueprintEditorModel.reApplySectionValidators({ + formGroup: this.formGroup, + validationErrorModel: this.editorModel.validationErrorModel + } + ); + (this.formGroup.get('definition').get('sections') as FormArray).at(sectionIndex).get('descriptionTemplates').markAsDirty(); + } + // // // Autocomplete configuration // // - private buildAutocompleteLookup(like?: string, excludedIds?: Guid[], ids?: Guid[]): DescriptionTemplateLookup { - const lookup: DescriptionTemplateLookup = new DescriptionTemplateLookup(); - lookup.page = { size: 100, offset: 0 }; - if (excludedIds && excludedIds.length > 0) { lookup.excludedIds = excludedIds; } - if (ids && ids.length > 0) { lookup.ids = ids; } - lookup.isActive = [IsActive.Active]; - lookup.statuses = [DescriptionTemplateStatus.Finalized]; - lookup.versionStatuses = [DescriptionTemplateVersionStatus.Current]; - lookup.project = { - fields: [ - nameof(x => x.id), - nameof(x => x.label) - ] - }; - lookup.order = { items: [nameof(x => x.label)] }; - if (like) { lookup.like = this.filterService.transformLike(like); } - return lookup; - } + // onRemoveDescritionTemplate(event, sectionIndex: number) { + // const descriptionTemplateFormArray = (this.formGroup.get('definition').get('sections') as FormArray).at(sectionIndex).get('descriptionTemplates') as FormArray; + // const foundIndex = descriptionTemplateFormArray.controls.findIndex(blueprint => blueprint.get('descriptionTemplateId').value === event.id); + // if (foundIndex !== -1) { + // descriptionTemplateFormArray.removeAt(foundIndex); + // DmpBlueprintEditorModel.reApplySectionValidators( + // { + // formGroup: this.formGroup, + // validationErrorModel: this.editorModel.validationErrorModel + // } + // ) + // this.formGroup.get('definition').get('sections').markAsDirty(); + // } + // } - onRemoveDescritionTemplate(event, sectionIndex: number) { - const descriptionTemplateFormArray = (this.formGroup.get('definition').get('sections') as FormArray).at(sectionIndex).get('descriptionTemplates') as FormArray; - const foundIndex = descriptionTemplateFormArray.controls.findIndex(blueprint => blueprint.get('descriptionTemplateId').value === event.id); - if (foundIndex !== -1) { - descriptionTemplateFormArray.removeAt(foundIndex); - DmpBlueprintEditorModel.reApplySectionValidators( - { - formGroup: this.formGroup, - validationErrorModel: this.editorModel.validationErrorModel - } - ) - this.formGroup.get('definition').get('sections').markAsDirty(); - } - } + // onSelectDescritionTemplate(item, sectionIndex) { + // ((this.formGroup.get('definition').get('sections') as FormArray).at(sectionIndex).get('descriptionTemplates') as FormArray) + // .push(this.editorModel.createChildDescriptionTemplate(item, sectionIndex, ((this.formGroup.get('definition').get('sections') as FormArray).at(sectionIndex).get('descriptionTemplates') as FormArray).length)); - onSelectDescritionTemplate(item, sectionIndex) { - ((this.formGroup.get('definition').get('sections') as FormArray).at(sectionIndex).get('descriptionTemplates') as FormArray) - .push(this.editorModel.createChildDescriptionTemplate(item, sectionIndex, ((this.formGroup.get('definition').get('sections') as FormArray).at(sectionIndex).get('descriptionTemplates') as FormArray).length)); - - } + // } // ngAfterViewInit() { diff --git a/dmp-frontend/src/app/ui/admin/dmp-blueprint/editor/dmp-blueprint-editor.model.ts b/dmp-frontend/src/app/ui/admin/dmp-blueprint/editor/dmp-blueprint-editor.model.ts index 08dc1c8f3..2ecd8e83b 100644 --- a/dmp-frontend/src/app/ui/admin/dmp-blueprint/editor/dmp-blueprint-editor.model.ts +++ b/dmp-frontend/src/app/ui/admin/dmp-blueprint/editor/dmp-blueprint-editor.model.ts @@ -86,11 +86,8 @@ export class DmpBlueprintEditorModel extends BaseEditorModel implements DmpBluep return field.buildForm({ rootPath: 'definition.sections[' + sectionIndex + '].fields[' + index + '].' }); } - createChildDescriptionTemplate(item: any, sectionIndex: number, index: number): UntypedFormGroup { + createChildDescriptionTemplate(sectionIndex: number, index: number, item?: any): UntypedFormGroup { const descriptionTemplate: DescriptionTemplatesInSectionEditorModel = new DescriptionTemplatesInSectionEditorModel(this.validationErrorModel); - // descriptionTemplate.id = Guid.create(); - descriptionTemplate.descriptionTemplateGroupId = item.descriptionTemplateGroupId; - descriptionTemplate.label = item.label; return descriptionTemplate.buildForm({ rootPath: 'definition.sections[' + sectionIndex + '].descriptionTemplates[' + index + '].' }); } @@ -488,7 +485,7 @@ export class DescriptionTemplatesInSectionEditorModel implements DescriptionTemp validationErrorModel }); - ['id', 'descriptionTemplateId', 'label', 'minMultiplicity', 'maxMultiplicity'].forEach(keyField => { + ['descriptionTemplateGroupId', 'label', 'minMultiplicity', 'maxMultiplicity'].forEach(keyField => { const control = formGroup?.get(keyField); control?.clearValidators(); control?.addValidators(context.getValidation(keyField).validators); diff --git a/dmp-frontend/src/assets/i18n/en.json b/dmp-frontend/src/assets/i18n/en.json index dc2c33fba..747a74063 100644 --- a/dmp-frontend/src/assets/i18n/en.json +++ b/dmp-frontend/src/assets/i18n/en.json @@ -1625,10 +1625,12 @@ } }, "ACTIONS": { - "ADD-EXTRA-FIELD": "Add extra field", + "ADD-EXTRA-FIELD": "Add Extra Field", "REMOVE-SYSTEM-FIELD": "Delete", "REMOVE-EXTRA-FIELD": "Delete", "REMOVE-SECTION": "Remove Section", + "ADD-DESCRIPTION-TEMPLATE": "Add Description Template", + "REMOVE-DESCRIPTION-TEMPLATE": "Remove Description Template", "ADD-SECTION": "Add Section", "SAVE": "Save", "CANCEL": "Cancel", @@ -2141,7 +2143,7 @@ "DATE": "Date", "NUMBER": "Number", "TEXT": "Text", - "EXTERNAL-AUTOCOMPLETE": "External AutoComplete" + "RICH-TEXT": "Rich Text" }, "TYPE": { "INPUT": "Input"