From 849b16a6f3c1fa7b922e362a1a90713e3d0755db Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Sun, 14 Jan 2024 22:07:19 +0200 Subject: [PATCH] RED-8045 - Dossier template selection/filter at dossier dictionary comparison --- .../dictionary-screen.component.html | 1 - .../dictionary-manager.component.html | 36 +++++-- .../dictionary-manager.component.ts | 100 ++++++++++++------ 3 files changed, 96 insertions(+), 41 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/screens/entities/screens/dictionary/dictionary-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/entities/screens/dictionary/dictionary-screen.component.html index df83513b9..730a7af5e 100644 --- a/apps/red-ui/src/app/modules/admin/screens/entities/screens/dictionary/dictionary-screen.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/entities/screens/dictionary/dictionary-screen.component.html @@ -6,7 +6,6 @@ [entityType]="entityType" [initialEntries]="initialEntries$ | async" [isLeavingPage]="isLeavingPage" - [currentDossierTemplateId]="dossierTemplateId" [selectedDictionaryType]="entityType" [type]="type" > diff --git a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html index c4e368f2c..4ff625fef 100644 --- a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html +++ b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html @@ -46,12 +46,17 @@ - - {{ dossierTemplate.name }} + + {{ dossierTemplate.id ? dossierTemplate.name : (dossierTemplate.name | translate) }} @@ -59,17 +64,14 @@
- + - + {{ dossier.dossierName }} + + + + + + {{ dictionary.id ? dictionary.label : (dictionary.label | translate) }} + + + +
diff --git a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts index f0f45af1a..91691f80b 100644 --- a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts @@ -32,7 +32,7 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { @Input() type: DictionaryType = 'dictionary'; @Input() entityType?: string; @Input() currentDossierId: string; - @Input({ required: true }) currentDossierTemplateId!: string; + @Input() currentDossierTemplateId: string; @Input() withFloatingActions = true; @Input() initialEntries: List; @Input() canEdit = false; @@ -46,7 +46,7 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { @ViewChild(EditorComponent) readonly editor: EditorComponent; readonly iconButtonTypes = IconButtonTypes; dossiers: Dossier[]; - dossierTemplates: DossierTemplate[]; + dossierTemplates: DossierTemplate[] = this.dossierTemplatesService.all; currentMatch = 0; findMatches: FindMatch[] = []; diffEditorText = ''; @@ -61,18 +61,20 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { dictionaries: List = this.#dictionaries; #dossierTemplate = this.dossierTemplatesService.all[0]; #dossier = this.selectDossier; - #initialDossierTemplateId: string; + #dictionary = this.selectDictionary; + protected initialDossierTemplateId: string; constructor( private readonly _dictionaryService: DictionaryService, private readonly _dictionariesMapService: DictionariesMapService, - protected readonly _loadingService: LoadingService, private readonly _activeDossiersService: ActiveDossiersService, + private readonly _changeRef: ChangeDetectorRef, + protected readonly _loadingService: LoadingService, readonly dossierTemplatesService: DossierTemplatesService, ) {} ngOnInit() { - this.#initialDossierTemplateId = this.currentDossierTemplateId; + this.initialDossierTemplateId = this.currentDossierTemplateId; this.#updateDropdownsOptions(); } @@ -82,7 +84,9 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { set selectedDossierTemplate(value: DossierTemplate) { if (!value) { - value = this.dossierTemplates.find(t => t.id === this.#initialDossierTemplateId); + value = this.initialDossierTemplateId + ? this.dossierTemplates.find(t => t.id === this.initialDossierTemplateId) + : this.selectDossierTemplate; } this.#dossierTemplate = value; this.currentDossierTemplateId = value.dossierTemplateId; @@ -90,6 +94,10 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { this.dictionaries = this.#dictionaries; this.#disableDiffEditor(); + if (!this.initialDossierTemplateId && !this.currentDossierId) { + this.selectedDictionary = this.selectDictionary; + } + this.#updateDropdownsOptions(false); } @@ -105,16 +113,28 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { return; } - this.#onDossierChanged(dossier.dossierTemplateId, dossier.id).then(entries => { - if (!entries.startsWith(COMPARE_ENTRIES_ERROR)) { - this.diffEditorText = entries; - this.showDiffEditor = true; - } - }); + this.#onDossierChanged(dossier.dossierTemplateId, dossier.id).then(entries => this.#updateDiffEditorText(entries)); + } + + get selectedDictionary() { + return this.#dictionary; + } + + set selectedDictionary(dictionary: Dictionary) { + this.selectedDictionaryType = dictionary.type; + this.#dictionary = dictionary; + this.#onDossierChanged(this.#dossier.dossierTemplateId).then(entries => this.#updateDiffEditorText(entries)); } get optionNotSelected() { - return this.selectedDossier.dossierName === this.selectDossier.dossierName; + if (this.initialDossierTemplateId) { + return this.selectedDossier.dossierName === this.selectDossier.dossierName; + } + return this.selectedDictionary.label === this.selectDictionary.label; + } + + get templateSelected() { + return this.selectDossierTemplate.name !== this.selectedDossierTemplate.name; } get helpModeKey(): string { @@ -125,7 +145,10 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { if (!this.#dossierTemplate || this.#dossierTemplate.name === this.selectDossierTemplate.name) { return; } - return this._dictionariesMapService.get(this.selectedDossierTemplate?.dossierTemplateId).filter(dict => !dict.virtual); + return [ + this.selectDictionary, + ...this._dictionariesMapService.get(this.selectedDossierTemplate?.dossierTemplateId).filter(dict => !dict.virtual), + ]; } get #templatesWithCurrentEntityType() { @@ -184,12 +207,9 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { ngOnChanges(changes: SimpleChanges): void { if (changes.activeEntryType && this.#dossier?.dossierTemplateId && this.selectedDossier?.dossierId) { - this.#onDossierChanged(this.#dossier.dossierTemplateId, this.#dossier.dossierId).then(entries => { - if (!entries.startsWith(COMPARE_ENTRIES_ERROR)) { - this.diffEditorText = entries; - this.showDiffEditor = true; - } - }); + this.#onDossierChanged(this.#dossier.dossierTemplateId, this.#dossier.dossierId).then(entries => + this.#updateDiffEditorText(entries), + ); } if (changes.selectedDictionaryType) { @@ -227,14 +247,21 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { if (dossierId === 'template') { dictionary = await this._dictionaryService.getForType(dossierTemplateId, this.selectedDictionaryType); } else { - dictionary = ( - await firstValueFrom( - this._dictionaryService.loadDictionaryEntriesByType([this.selectedDictionaryType], dossierTemplateId, dossierId), - ).catch(() => { - return [{ entries: [COMPARE_ENTRIES_ERROR], type: '' }]; - }) - )[0]; + if (dossierId) { + dictionary = ( + await firstValueFrom( + this._dictionaryService.loadDictionaryEntriesByType([this.selectedDictionaryType], dossierTemplateId, dossierId), + ).catch(() => { + return [{ entries: [COMPARE_ENTRIES_ERROR], type: '' }]; + }) + )[0]; + } else { + dictionary = this.selectedDictionaryType + ? await this._dictionaryService.getForType(this.currentDossierTemplateId, this.selectedDictionaryType) + : { entries: [COMPARE_ENTRIES_ERROR], type: '' }; + } } + const activeEntries = this.activeEntryType === DictionaryEntryTypes.ENTRY || this.hint ? [...dictionary.entries] @@ -246,11 +273,16 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { #updateDropdownsOptions(updateSelectedDossierTemplate = true) { if (updateSelectedDossierTemplate) { - this.currentDossierTemplateId = this.#initialDossierTemplateId ?? this.currentDossierTemplateId; - this.dossierTemplates = this.#templatesWithCurrentEntityType; + this.currentDossierTemplateId = this.initialDossierTemplateId ?? this.currentDossierTemplateId; + this.dossierTemplates = this.currentDossierTemplateId ? this.#templatesWithCurrentEntityType : this.dossierTemplatesService.all; + if (!this.currentDossierTemplateId) { + this.dossierTemplates = [this.selectDossierTemplate, ...this.dossierTemplates]; + } this.selectedDossierTemplate = this.dossierTemplates.find(t => t.id === this.currentDossierTemplateId); } - this.dossiers = this._activeDossiersService.all.filter(d => d.dossierTemplateId === this.currentDossierTemplateId); + this.dossiers = this._activeDossiersService.all.filter( + d => d.dossierTemplateId === this.currentDossierTemplateId && d.id !== this.currentDossierId, + ); const templateDictionary = { id: 'template', dossierId: 'template', @@ -264,4 +296,12 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { this.showDiffEditor = false; this.diffEditorText = ''; } + + #updateDiffEditorText(entries: string) { + if (!entries.startsWith(COMPARE_ENTRIES_ERROR)) { + this.diffEditorText = entries; + this.showDiffEditor = true; + this._changeRef.markForCheck(); + } + } }