diff --git a/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.component.html b/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.component.html index b92da98a1..bfb3efd29 100644 --- a/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.component.html +++ b/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.component.html @@ -299,6 +299,7 @@
{{'DMP-EDITOR.FIELDS.DESCRIPTION-TEMPLATES' | translate}}
{{'DMP-EDITOR.FIELDS.DESCRIPTION-TEMPLATES-HINT' | translate}} + {{formGroup.get('descriptionTemplates').get(section.id).getError('backendError').message}} diff --git a/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.component.ts b/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.component.ts index 7f9618d8d..07290e5a4 100644 --- a/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.component.ts +++ b/dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor.component.ts @@ -51,6 +51,8 @@ import { DmpEditorModel, DmpFieldIndicator } from './dmp-editor.model'; import { DmpEditorResolver } from './dmp-editor.resolver'; import { DmpEditorService } from './dmp-editor.service'; import { DescriptionTemplatePreviewDialogComponent } from '@app/ui/admin/description-template/description-template-preview/description-template-preview-dialog.component'; +import { DescriptionTemplate } from '@app/core/model/description-template/description-template'; +import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration'; @Component({ selector: 'app-dmp-editor', @@ -93,6 +95,20 @@ export class DmpEditorComponent extends BaseEditor implemen valueAssign: (item: DmpBlueprint) => item.id, }; + getDescriptionTemplateMultipleAutoCompleteConfiguration(sectionId: Guid): MultipleAutoCompleteConfiguration { + return { + initialItems: (excludedItems: any[], data?: any) => this.descriptionTemplateService.query(this.descriptionTemplateService.buildDescriptionTempalteGroupAutocompleteLookup(null, excludedItems ? excludedItems : null)).pipe(map(x => x.items)), + filterFn: (searchQuery: string, excludedItems: any[]) => this.descriptionTemplateService.query(this.descriptionTemplateService.buildDescriptionTempalteGroupAutocompleteLookup(searchQuery, excludedItems)).pipe(map(x => x.items)), + getSelectedItems: (selectedItems: any[]) => this.descriptionTemplateService.query(this.descriptionTemplateService.buildDescriptionTempalteGroupAutocompleteLookup(null, null, selectedItems)).pipe(map(x => x.items)), + displayFn: (item: DescriptionTemplate) => item.label, + titleFn: (item: DescriptionTemplate) => item.label, + subtitleFn: (item: DescriptionTemplate) => item.description, + valueAssign: (item: DescriptionTemplate) => item.groupId, + canRemoveItem: (item: DescriptionTemplate) => this.canRemoveDescriptionTemplate(item, sectionId), + popupItemActionIcon: 'visibility' + } + }; + sectionToFieldsMap: Map = new Map(); protected get canDelete(): boolean { @@ -620,6 +636,23 @@ export class DmpEditorComponent extends BaseEditor implemen } } + canRemoveDescriptionTemplate(item: DescriptionTemplate, sectionId){ + if(item){ + const descriptionsInSection = this.descriptionsInSection(sectionId); + + if (descriptionsInSection && descriptionsInSection.length > 0){ + for (let index = 0; index < descriptionsInSection.length; index++) { + const description = descriptionsInSection[index]; + if(description.dmpDescriptionTemplate?.descriptionTemplateGroupId === item.groupId) { + return {canRemove: false, + message: 'DMP-EDITOR.UNSUCCESSFUL-REMOVE-TEMPLATE' + } as CanRemoveDescriptionTemplate + } + } + } + } + } + // // // Misc @@ -633,3 +666,8 @@ export class DmpEditorComponent extends BaseEditor implemen return this.languageInfoService.getLanguageInfoValues(); } } + +export interface CanRemoveDescriptionTemplate { + canRemove: boolean; + message: string; +}