diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts index b1c2e7a8c..8831630f9 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnInit, ViewChild } from '@angular/core'; -import { Dossier, IDictionary } from '@red/domain'; +import { Dictionary, Dossier, IDictionary } from '@red/domain'; import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { PermissionsService } from '@services/permissions.service'; import { DictionaryManagerComponent } from '@shared/components/dictionary-manager/dictionary-manager.component'; @@ -21,7 +21,7 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa form: FormGroup; canEdit = false; canEditDisplayName = false; - dossierDictionary: IDictionary; + dossierDictionary: Dictionary; readonly circleButtonTypes = CircleButtonTypes; @ViewChild(DictionaryManagerComponent, { static: false }) private readonly _dictionaryManager: DictionaryManagerComponent; @@ -130,8 +130,6 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa private async _updateDossierDictionary() { const { dossierId, dossierTemplateId } = this.dossier; - this.dossierDictionary = await firstValueFrom( - this._dictionaryService.getForType(dossierTemplateId, 'dossier_redaction', dossierId), - ); + this.dossierDictionary = await firstValueFrom(this._dictionaryService.getDossierDictionary(dossierTemplateId, dossierId)); } } diff --git a/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts b/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts index 5bda73779..e3603fea0 100644 --- a/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts +++ b/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts @@ -74,7 +74,10 @@ export class AnnotationProcessingService { if (!parentFilter) { parentFilter = this._createParentFilter(a.superType, filterMap, filters); } - const dictionary = this._dictionariesMapService.getDictionary(a.type, this._state.dossierTemplateId); + const dictionary = + a.type === 'dossier_redaction' + ? this._state.dossierDictionary + : this._dictionariesMapService.getDictionary(a.type, this._state.dossierTemplateId); const childFilter: IFilter = { id: a.filterKey, label: dictionary.label, diff --git a/apps/red-ui/src/app/modules/file-preview/components/annotation-card/annotation-card.component.ts b/apps/red-ui/src/app/modules/file-preview/components/annotation-card/annotation-card.component.ts index 2f7ce75e0..b29166602 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/annotation-card/annotation-card.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/components/annotation-card/annotation-card.component.ts @@ -1,11 +1,13 @@ import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core'; import { AnnotationWrapper } from '@models/file/annotation.wrapper'; import { MultiSelectService } from '../../services/multi-select.service'; +import { FilePreviewStateService } from '../../services/file-preview-state.service'; import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service'; import { Dictionary, DOSSIER_ID } from '@red/domain'; import { ActivatedRoute } from '@angular/router'; import { DossiersService } from '@services/dossiers/dossiers.service'; import { BehaviorSubject } from 'rxjs'; +import { DictionaryService } from '@services/entity-services/dictionary.service'; @Component({ selector: 'redaction-annotation-card', @@ -17,6 +19,7 @@ export class AnnotationCardComponent implements OnChanges { @Input() annotation: AnnotationWrapper; @Input() isSelected = false; readonly dictionary$ = new BehaviorSubject(undefined); + readonly #dossierId: string; readonly #dossierTemplateId: string; constructor( @@ -24,15 +27,20 @@ export class AnnotationCardComponent implements OnChanges { dossiersService: DossiersService, readonly multiSelectService: MultiSelectService, private readonly _dictionariesMapService: DictionariesMapService, + private readonly _dictionaryService: DictionaryService, + private readonly _state: FilePreviewStateService, ) { - const dossierId: string = route.snapshot.paramMap.get(DOSSIER_ID); - this.#dossierTemplateId = dossiersService.find(dossierId).dossierTemplateId; + this.#dossierId = route.snapshot.paramMap.get(DOSSIER_ID); + this.#dossierTemplateId = dossiersService.find(this.#dossierId).dossierTemplateId; } ngOnChanges(changes: SimpleChanges): void { if (changes.annotation) { if (this.annotation.type !== 'manual' && !this.annotation.isHighlight) { - const dictionary = this._dictionariesMapService.getDictionary(this.annotation.type, this.#dossierTemplateId); + const dictionary = + this.annotation.type === 'dossier_redaction' + ? this._state.dossierDictionary + : this._dictionariesMapService.getDictionary(this.annotation.type, this.#dossierTemplateId); this.dictionary$.next(dictionary); } } diff --git a/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts b/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts index ba8aec14d..4e09fa65a 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts @@ -1,6 +1,6 @@ import { Injectable, Injector } from '@angular/core'; import { combineLatest, firstValueFrom, from, merge, Observable, of, pairwise, Subject, switchMap } from 'rxjs'; -import { Dossier, DOSSIER_ID, File, FILE_ID } from '@red/domain'; +import { Dictionary, Dossier, DOSSIER_ID, File, FILE_ID } from '@red/domain'; import { ActivatedRoute, Router } from '@angular/router'; import { FilesMapService } from '@services/entity-services/files-map.service'; import { PermissionsService } from '@services/permissions.service'; @@ -11,6 +11,7 @@ import { dossiersServiceResolver } from '@services/entity-services/dossiers.serv import { wipeFilesCache } from '@red/cache'; import { DossiersService } from '@services/dossiers/dossiers.service'; import { FilesService } from '@services/entity-services/files.service'; +import { DictionaryService } from '@services/entity-services/dictionary.service'; @Injectable() export class FilePreviewStateService { @@ -24,10 +25,9 @@ export class FilePreviewStateService { readonly dossierId: string; readonly dossierTemplateId: string; readonly fileId: string; - dossier: Dossier; file: File; - + #dossierDictionary: Dictionary; readonly #reloadBlob$ = new Subject(); constructor( @@ -39,6 +39,7 @@ export class FilePreviewStateService { private readonly _filesService: FilesService, private readonly _dossiersService: DossiersService, private readonly _fileManagementService: FileManagementService, + private readonly _dictionaryService: DictionaryService, ) { const dossiersService = dossiersServiceResolver(_injector, router); @@ -55,6 +56,14 @@ export class FilePreviewStateService { this.blob$ = this.#blob$; this.dossierFileChange$ = this.#dossierFilesChange$(); + + this._dictionaryService + .getDossierDictionary(this.dossierTemplateId, this.dossierId) + .subscribe(dictionary => (this.#dossierDictionary = dictionary)); + } + + get dossierDictionary(): Dictionary { + return this.#dossierDictionary; } get blob(): Promise { diff --git a/apps/red-ui/src/app/services/entity-services/dictionary.service.ts b/apps/red-ui/src/app/services/entity-services/dictionary.service.ts index 54a0f3296..1f57387e7 100644 --- a/apps/red-ui/src/app/services/entity-services/dictionary.service.ts +++ b/apps/red-ui/src/app/services/entity-services/dictionary.service.ts @@ -1,6 +1,6 @@ import { Injectable, Injector } from '@angular/core'; import { firstValueFrom, forkJoin, Observable, of, throwError } from 'rxjs'; -import { EntitiesService, List, QueryParam, RequiredParam, Toaster, Validate } from '@iqser/common-ui'; +import { EntitiesService, List, log, QueryParam, RequiredParam, Toaster, Validate } from '@iqser/common-ui'; import { Dictionary, DictionaryEntryType, DictionaryEntryTypes, IColors, IDictionary, IUpdateDictionary } from '@red/domain'; import { catchError, map, switchMap, tap } from 'rxjs/operators'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @@ -174,7 +174,7 @@ export class DictionaryService extends EntitiesService async getDictionariesOptions(dossierTemplateId: string, dossierId: string): Promise { const possibleDictionaries: Dictionary[] = []; - const dossierDictionary = await firstValueFrom(this.getForType(dossierTemplateId, 'dossier_redaction', dossierId)); + const dossierDictionary: Dictionary = await firstValueFrom(this.getDossierDictionary(dossierTemplateId, dossierId)); for (const dictionary of this._dictionariesMapService.get(dossierTemplateId)) { if (!dictionary.virtual && dictionary.addToDictionaryAction) { @@ -183,8 +183,7 @@ export class DictionaryService extends EntitiesService } if (dossierDictionary.addToDictionaryAction) { - // TODO fix this in the backend - possibleDictionaries.push(new Dictionary({ ...dossierDictionary, type: 'dossier_redaction' })); + possibleDictionaries.push(dossierDictionary); } possibleDictionaries.sort((a, b) => a.label.localeCompare(b.label)); @@ -192,6 +191,18 @@ export class DictionaryService extends EntitiesService return possibleDictionaries; } + getDossierDictionary(dossierTemplateId: string, dossierId: string): Observable { + return this.getForType(dossierTemplateId, 'dossier_redaction', dossierId).pipe( + map( + dictionary => + new Dictionary({ + ...dictionary, + type: 'dossier_redaction', + }), + ), + ); + } + loadDictionaryData(dossierTemplatesIds: string[]): Observable { const observables: Observable[] = []; for (const dossierTemplateId of dossierTemplatesIds) { diff --git a/apps/red-ui/src/assets/config/config.json b/apps/red-ui/src/assets/config/config.json index 640de2ce2..a718d12f3 100644 --- a/apps/red-ui/src/assets/config/config.json +++ b/apps/red-ui/src/assets/config/config.json @@ -1,7 +1,7 @@ { "ADMIN_CONTACT_NAME": null, "ADMIN_CONTACT_URL": null, - "API_URL": "https://dev-05.iqser.cloud/redaction-gateway-v1", + "API_URL": "https://dev-08.iqser.cloud/redaction-gateway-v1", "APP_NAME": "RedactManager", "AUTO_READ_TIME": 3, "BACKEND_APP_VERSION": "4.4.40", @@ -17,7 +17,7 @@ "MAX_RETRIES_ON_SERVER_ERROR": 3, "OAUTH_CLIENT_ID": "redaction", "OAUTH_IDP_HINT": null, - "OAUTH_URL": "https://dev-05.iqser.cloud/auth/realms/redaction", + "OAUTH_URL": "https://dev-08.iqser.cloud/auth/realms/redaction", "RECENT_PERIOD_IN_HOURS": 24, "SELECTION_MODE": "structural", "MANUAL_BASE_URL": "https://docs.redactmanager.com/preview"