From 5f883941ccb6f18b11d74507d4f6f1ebc9396ff0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Mon, 18 Jul 2022 20:38:25 +0300 Subject: [PATCH] RED-4639: Refactor colors - refresh after changes --- .../src/app/guards/dossier-files-guard.ts | 4 ++ .../file-workload.component.html | 27 +++++++--- .../file-workload/file-workload.component.ts | 49 +++++++++---------- .../dossier-overview/config.service.ts | 2 +- .../dossier-workload-column.component.html | 6 +-- .../dossier-workload-column.component.ts | 33 +++++++++---- .../dossiers-listing/config.service.ts | 19 +++++-- .../dossiers-listing-screen.component.ts | 6 ++- .../services/annotation-processing.service.ts | 7 +-- .../services/file-data.service.ts | 8 ++- .../services/file-preview-state.service.ts | 8 +-- .../edit-dossier-dictionary.component.ts | 2 +- .../type-filter/type-filter.component.html | 4 +- .../type-filter/type-filter.component.ts | 3 -- .../entity-services/default-colors.service.ts | 7 +++ .../entity-services/dictionary.service.ts | 11 +++-- .../dossier-dictionaries-map.service.ts | 8 +++ .../src/lib/dictionaries/dictionary.model.ts | 2 - .../src/lib/dictionaries/dictionary.ts | 1 - 19 files changed, 136 insertions(+), 71 deletions(-) create mode 100644 apps/red-ui/src/app/services/entity-services/dossier-dictionaries-map.service.ts diff --git a/apps/red-ui/src/app/guards/dossier-files-guard.ts b/apps/red-ui/src/app/guards/dossier-files-guard.ts index 2b065449e..6a035632a 100644 --- a/apps/red-ui/src/app/guards/dossier-files-guard.ts +++ b/apps/red-ui/src/app/guards/dossier-files-guard.ts @@ -5,6 +5,7 @@ import { FilesService } from '@services/files/files.service'; import { firstValueFrom } from 'rxjs'; import { DOSSIER_ID, DOSSIER_TEMPLATE_ID } from '@red/domain'; import { DossiersService } from '@services/dossiers/dossiers.service'; +import { DictionaryService } from '@services/entity-services/dictionary.service'; @Injectable({ providedIn: 'root' }) export class DossierFilesGuard implements CanActivate { @@ -12,6 +13,7 @@ export class DossierFilesGuard implements CanActivate { private readonly _injector: Injector, private readonly _filesMapService: FilesMapService, private readonly _filesService: FilesService, + private readonly _dictionaryService: DictionaryService, private readonly _router: Router, ) {} @@ -21,6 +23,8 @@ export class DossierFilesGuard implements CanActivate { const token: ProviderToken = route.data.dossiersService; const dossiersService: DossiersService = this._injector.get(token); + await firstValueFrom(this._dictionaryService.loadDossierDictionary(dossierTemplateId, dossierId)); + if (!dossiersService.has(dossierId)) { await this._router.navigate(['/main', dossierTemplateId]); return false; diff --git a/apps/red-ui/src/app/modules/dossier-overview/components/table-item/file-workload/file-workload.component.html b/apps/red-ui/src/app/modules/dossier-overview/components/table-item/file-workload/file-workload.component.html index d53cd243f..72230dec4 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/components/table-item/file-workload/file-workload.component.html +++ b/apps/red-ui/src/app/modules/dossier-overview/components/table-item/file-workload/file-workload.component.html @@ -1,14 +1,29 @@
- + - - - - + + + +
diff --git a/apps/red-ui/src/app/modules/dossier-overview/components/table-item/file-workload/file-workload.component.ts b/apps/red-ui/src/app/modules/dossier-overview/components/table-item/file-workload/file-workload.component.ts index 8e0f9cc1a..aba3ac2d1 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/components/table-item/file-workload/file-workload.component.ts +++ b/apps/red-ui/src/app/modules/dossier-overview/components/table-item/file-workload/file-workload.component.ts @@ -1,8 +1,9 @@ -import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { annotationDefaultColorConfig, DefaultBasedColorType, File } from '@red/domain'; import { UserService } from '@services/user.service'; import { DossiersService } from '@services/dossiers/dossiers.service'; import { DefaultColorsService } from '@services/entity-services/default-colors.service'; +import { Observable } from 'rxjs'; @Component({ selector: 'redaction-file-workload', @@ -10,41 +11,35 @@ import { DefaultColorsService } from '@services/entity-services/default-colors.s styleUrls: ['./file-workload.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, }) -export class FileWorkloadComponent { +export class FileWorkloadComponent implements OnInit { @Input() file: File; + suggestionColor$: Observable; + imageColor$: Observable; + updatedColor$: Observable; + analysisColor$: Observable; + hintColor$: Observable; + redactionColor$: Observable; + + #dossierTemplateId: string; + constructor( readonly userService: UserService, private readonly _defaultColorsService: DefaultColorsService, private readonly _dossiersService: DossiersService, ) {} - get suggestionColor() { - return this._getDefaultColor('suggestion'); + ngOnInit() { + this.#dossierTemplateId = this._dossiersService.find(this.file.dossierId).dossierTemplateId; + this.suggestionColor$ = this.#getDefaultColor$('suggestion'); + this.imageColor$ = this.#getDefaultColor$('recommendation'); + this.updatedColor$ = this.#getDefaultColor$('updated'); + this.analysisColor$ = this.#getDefaultColor$('analysis'); + this.hintColor$ = this.#getDefaultColor$('hint'); + this.redactionColor$ = this.#getDefaultColor$('redaction'); } - get imageColor() { - return this._getDefaultColor('recommendation'); - } - - get updatedColor() { - return this._getDefaultColor('updated'); - } - - get analysisColor() { - return this._getDefaultColor('analysis'); - } - - get hintColor() { - return this._getDefaultColor('hint'); - } - - get redactionColor() { - return this._getDefaultColor('redaction'); - } - - private _getDefaultColor(type: DefaultBasedColorType) { - const dossierTemplateId = this._dossiersService.find(this.file.dossierId).dossierTemplateId; - return this._defaultColorsService.getColor(dossierTemplateId, annotationDefaultColorConfig[type]); + #getDefaultColor$(type: DefaultBasedColorType): Observable { + return this._defaultColorsService.getColor$(this.#dossierTemplateId, annotationDefaultColorConfig[type]); } } diff --git a/apps/red-ui/src/app/modules/dossier-overview/config.service.ts b/apps/red-ui/src/app/modules/dossier-overview/config.service.ts index bad395ced..41ad273fb 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/config.service.ts +++ b/apps/red-ui/src/app/modules/dossier-overview/config.service.ts @@ -289,8 +289,8 @@ export class ConfigService { id: item, label: workloadTranslations[item], metadata: { - color: this._defaultColorsService.getColor(dossierTemplateId, annotationDefaultColorConfig[item]), shape: AnnotationShapeMap[item], + color$: this._defaultColorsService.getColor$(dossierTemplateId, annotationDefaultColorConfig[item]), }, }), ); diff --git a/apps/red-ui/src/app/modules/dossiers-listing/components/dossier-workload-column/dossier-workload-column.component.html b/apps/red-ui/src/app/modules/dossiers-listing/components/dossier-workload-column/dossier-workload-column.component.html index 361790fd9..7866b4a7d 100644 --- a/apps/red-ui/src/app/modules/dossiers-listing/components/dossier-workload-column/dossier-workload-column.component.html +++ b/apps/red-ui/src/app/modules/dossiers-listing/components/dossier-workload-column/dossier-workload-column.component.html @@ -1,21 +1,21 @@
diff --git a/apps/red-ui/src/app/modules/dossiers-listing/components/dossier-workload-column/dossier-workload-column.component.ts b/apps/red-ui/src/app/modules/dossiers-listing/components/dossier-workload-column/dossier-workload-column.component.ts index 21c3b881f..1ea343253 100644 --- a/apps/red-ui/src/app/modules/dossiers-listing/components/dossier-workload-column/dossier-workload-column.component.ts +++ b/apps/red-ui/src/app/modules/dossiers-listing/components/dossier-workload-column/dossier-workload-column.component.ts @@ -1,6 +1,7 @@ -import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; -import { Dossier, DossierStats } from '@red/domain'; +import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core'; +import { DefaultColorType, Dossier, DossierStats } from '@red/domain'; import { DefaultColorsService } from '@services/entity-services/default-colors.service'; +import { BehaviorSubject, Observable, switchMap } from 'rxjs'; @Component({ selector: 'redaction-dossier-workload-column', @@ -8,21 +9,33 @@ import { DefaultColorsService } from '@services/entity-services/default-colors.s styleUrls: ['./dossier-workload-column.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, }) -export class DossierWorkloadColumnComponent { +export class DossierWorkloadColumnComponent implements OnChanges { @Input() dossier: Dossier; @Input() dossierStats: DossierStats; - constructor(private readonly _colorsService: DefaultColorsService) {} + readonly suggestionColor$: Observable; + readonly hintColor$: Observable; + readonly redactionColor$: Observable; - get suggestionColor() { - return this._colorsService.getColor(this.dossier.dossierTemplateId, 'requestAddColor'); + readonly #dossierTemplateId$ = new BehaviorSubject(null); + + constructor(private readonly _defaultColorsService: DefaultColorsService) { + this.suggestionColor$ = this.#dossierTemplateId$.pipe( + switchMap(dossierTemplateId => this.#getColor$(dossierTemplateId, 'requestAddColor')), + ); + this.hintColor$ = this.#dossierTemplateId$.pipe(switchMap(dossierTemplateId => this.#getColor$(dossierTemplateId, 'hintColor'))); + this.redactionColor$ = this.#dossierTemplateId$.pipe( + switchMap(dossierTemplateId => this.#getColor$(dossierTemplateId, 'redactionColor')), + ); } - get hintColor() { - return this._colorsService.getColor(this.dossier.dossierTemplateId, 'hintColor'); + ngOnChanges(changes: SimpleChanges): void { + if (changes.dossier) { + this.#dossierTemplateId$.next(this.dossier.dossierTemplateId); + } } - get redactionColor() { - return this._colorsService.getColor(this.dossier.dossierTemplateId, 'redactionColor'); + #getColor$(dossierTemplateId: string, colorType: DefaultColorType): Observable { + return this._defaultColorsService.getColor$(dossierTemplateId, colorType); } } diff --git a/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts b/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts index ebd20c3e8..f04aedf47 100644 --- a/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts +++ b/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts @@ -1,6 +1,14 @@ import { Injectable, TemplateRef } from '@angular/core'; import { ButtonConfig, IFilterGroup, INestedFilter, keyChecker, NestedFilter, TableColumnConfig } from '@iqser/common-ui'; -import { AnnotationShapeMap, Dossier, DossierTemplate, StatusSorter, User, WorkflowFileStatus } from '@red/domain'; +import { + annotationDefaultColorConfig, + AnnotationShapeMap, + Dossier, + DossierTemplate, + StatusSorter, + User, + WorkflowFileStatus, +} from '@red/domain'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { TranslateService } from '@ngx-translate/core'; import { UserPreferenceService } from '@services/user-preference.service'; @@ -12,6 +20,7 @@ import { DossierStatsService } from '@services/dossiers/dossier-stats.service'; import { DossierStatesMapService } from '@services/entity-services/dossier-states-map.service'; import { PermissionsService } from '@services/permissions.service'; import { SharedDialogService } from '@shared/services/dialog.service'; +import { DefaultColorsService } from '@services/entity-services/default-colors.service'; @Injectable() export class ConfigService { @@ -23,6 +32,7 @@ export class ConfigService { private readonly _dossierStatesMapService: DossierStatesMapService, private readonly _dialogService: SharedDialogService, private readonly _permissionsService: PermissionsService, + private readonly _defaultColorsService: DefaultColorsService, ) {} get tableConfig(): TableColumnConfig[] { @@ -53,7 +63,7 @@ export class ConfigService { ]; } - filterGroups(entities: Dossier[], needsWorkFilterTemplate: TemplateRef) { + filterGroups(entities: Dossier[], needsWorkFilterTemplate: TemplateRef, dossierTemplateId: string) { const allDistinctFileStatus = new Set(); const allDistinctPeople = new Set(); const allDistinctNeedsWork = new Set(); @@ -145,7 +155,10 @@ export class ConfigService { new NestedFilter({ id: type, label: workloadTranslations[type], - metadata: { shape: AnnotationShapeMap[type] }, + metadata: { + shape: AnnotationShapeMap[type], + color$: this._defaultColorsService.getColor$(dossierTemplateId, annotationDefaultColorConfig[type]), + }, }), ); diff --git a/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts b/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts index 989dd30be..65868968a 100644 --- a/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts @@ -62,7 +62,11 @@ export class DossiersListingScreenComponent extends ListingComponent im } private _computeAllFilters() { - const filterGroups = this._configService.filterGroups(this.entitiesService.all, this._needsWorkFilterTemplate); + const filterGroups = this._configService.filterGroups( + this.entitiesService.all, + this._needsWorkFilterTemplate, + this.dossierTemplate.id, + ); this.filterService.addFilterGroups(filterGroups); } } diff --git a/apps/red-ui/src/app/modules/file-preview/services/annotation-processing.service.ts b/apps/red-ui/src/app/modules/file-preview/services/annotation-processing.service.ts index f5f91a700..4c60c8cc9 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/annotation-processing.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/annotation-processing.service.ts @@ -8,6 +8,7 @@ import { annotationDefaultColorConfig, IViewedPage } from '@red/domain'; import { FilePreviewStateService } from './file-preview-state.service'; import { FileDataService } from './file-data.service'; import { DefaultColorsService } from '@services/entity-services/default-colors.service'; +import { of } from 'rxjs'; @Injectable() export class AnnotationProcessingService { @@ -68,7 +69,7 @@ export class AnnotationProcessingService { // top level filter if (topLevelFilter) { this._createParentFilter(a.isHighlight ? a.filterKey : a.superType, filterMap, filters, a.isHighlight, { - color: a.color, + color$: of(a.color), shortLabel: a.isHighlight ? '' : null, shape: a.iconShape, }); @@ -78,7 +79,7 @@ export class AnnotationProcessingService { if (!parentFilter) { parentFilter = this._createParentFilter(a.superType, filterMap, filters, false, { shape: a.iconShape, - color: this._defaultColorsService.getColor( + color$: this._defaultColorsService.getColor$( this._state.dossierTemplateId, annotationDefaultColorConfig[a.superType], ), @@ -90,7 +91,7 @@ export class AnnotationProcessingService { checked: false, matches: 1, metadata: { - color: a.color, + color$: of(a.color), shape: a.iconShape, }, skipTranslation: true, diff --git a/apps/red-ui/src/app/modules/file-preview/services/file-data.service.ts b/apps/red-ui/src/app/modules/file-preview/services/file-data.service.ts index 3040b94b6..e4704916e 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/file-data.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/file-data.service.ts @@ -19,6 +19,7 @@ import { NGXLogger } from 'ngx-logger'; import { MultiSelectService } from './multi-select.service'; import { FilesService } from '@services/files/files.service'; import { DefaultColorsService } from '@services/entity-services/default-colors.service'; +import { DossierDictionariesMapService } from '@services/entity-services/dossier-dictionaries-map.service'; const DELTA_VIEW_TIME = 10 * 60 * 1000; // 10 minutes; @@ -38,6 +39,7 @@ export class FileDataService extends EntitiesService { private readonly _viewModeService: ViewModeService, private readonly _userPreferenceService: UserPreferenceService, private readonly _dictionariesMapService: DictionariesMapService, + private readonly _dossierDictionariesMapService: DossierDictionariesMapService, private readonly _permissionsService: PermissionsService, private readonly _redactionLogService: RedactionLogService, private readonly _textHighlightsService: TextHighlightService, @@ -69,7 +71,11 @@ export class FileDataService extends EntitiesService { get #annotations$() { return this.#redactionLog$.pipe( - withLatestFrom(this._state.file$), + withLatestFrom( + this._state.file$, + this._dictionariesMapService.get$(this._state.dossierTemplateId), + this._dossierDictionariesMapService.get$(this._state.dossierId), + ), map(([redactionLog, file]) => this.#buildAnnotations(redactionLog, file)), tap(() => this.#checkMissingTypes()), map(annotations => 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 d2869b0cf..6e029e6a5 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 @@ -11,11 +11,11 @@ import { dossiersServiceResolver } from '@services/entity-services/dossiers.serv import { wipeFilesCache } from '@iqser/cache'; import { DossiersService } from '@services/dossiers/dossiers.service'; import { FilesService } from '@services/files/files.service'; -import { DictionaryService } from '@services/entity-services/dictionary.service'; import { HttpEvent, HttpEventType, HttpProgressEvent, HttpResponse } from '@angular/common/http'; import { TranslateService } from '@ngx-translate/core'; import { DictionariesMapService } from '../../../services/entity-services/dictionaries-map.service'; import { MatDialogRef } from '@angular/material/dialog'; +import { DossierDictionariesMapService } from '@services/entity-services/dossier-dictionaries-map.service'; const ONE_MEGABYTE = 1024 * 1024; @@ -56,7 +56,7 @@ export class FilePreviewStateService { private readonly _filesService: FilesService, private readonly _dossiersService: DossiersService, private readonly _fileManagementService: FileManagementService, - private readonly _dictionaryService: DictionaryService, + private readonly _dossierDictionariesMapService: DossierDictionariesMapService, private readonly _dictionariesMapService: DictionariesMapService, private readonly _translateService: TranslateService, private readonly _loadingService: LoadingService, @@ -75,8 +75,8 @@ export class FilePreviewStateService { this.blob$ = this.#blob$; this.dossierFileChange$ = this.#dossierFilesChange$(); - this._dictionaryService - .getDossierDictionary(this.dossierTemplateId, this.dossierId) + this._dossierDictionariesMapService + .watch$(this.dossierId, 'dossier_redaction') .subscribe(dictionary => (this.#dossierDictionary = dictionary)); } diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts index 2e3fb7f4d..ab3266f45 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts @@ -83,6 +83,6 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa private async _updateDossierDictionary() { const { dossierId, dossierTemplateId } = this.dossier; - this.dossierDictionary = await firstValueFrom(this._dictionaryService.getDossierDictionary(dossierTemplateId, dossierId)); + this.dossierDictionary = await firstValueFrom(this._dictionaryService.loadDossierDictionary(dossierTemplateId, dossierId)); } } diff --git a/apps/red-ui/src/app/modules/shared/components/type-filter/type-filter.component.html b/apps/red-ui/src/app/modules/shared/components/type-filter/type-filter.component.html index 2d115f3fb..0340c18b2 100644 --- a/apps/red-ui/src/app/modules/shared/components/type-filter/type-filter.component.html +++ b/apps/red-ui/src/app/modules/shared/components/type-filter/type-filter.component.html @@ -5,9 +5,9 @@ diff --git a/apps/red-ui/src/app/modules/shared/components/type-filter/type-filter.component.ts b/apps/red-ui/src/app/modules/shared/components/type-filter/type-filter.component.ts index 5fd9241df..57f947df7 100644 --- a/apps/red-ui/src/app/modules/shared/components/type-filter/type-filter.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/type-filter/type-filter.component.ts @@ -14,7 +14,6 @@ export class TypeFilterComponent implements OnChanges { @Input() dossierId: string; label: string; - color: string; private _suggestionsKeys: string[] = [ SuperTypes.SuggestionRemove, @@ -40,7 +39,5 @@ export class TypeFilterComponent implements OnChanges { : this._suggestionsKeys.includes(this.filter.id) ? 'S' : this.filter.id.charAt(0); - - this.color = this.filter.metadata?.color || 'transparent'; } } diff --git a/apps/red-ui/src/app/services/entity-services/default-colors.service.ts b/apps/red-ui/src/app/services/entity-services/default-colors.service.ts index 89bf9d835..de87a6b04 100644 --- a/apps/red-ui/src/app/services/entity-services/default-colors.service.ts +++ b/apps/red-ui/src/app/services/entity-services/default-colors.service.ts @@ -15,6 +15,13 @@ export class DefaultColorsService extends EntitiesService { + return this.getEntityChanged$(dossierTemplateId).pipe( + map(c => c[colorType]), + map(c => c || fallback), + ); + } + loadAll(dossierTemplateIds: string[]): Observable { return forkJoin(dossierTemplateIds.map(id => super.getFor(id))).pipe( mapEach(defaultColors => new DefaultColors(defaultColors)), 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 aaf0ab737..1899e9db9 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,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { firstValueFrom, forkJoin, Observable, throwError } from 'rxjs'; +import { forkJoin, Observable, throwError } from 'rxjs'; import { EntitiesService, List, QueryParam, RequiredParam, Toaster, Validate } from '@iqser/common-ui'; import { Dictionary, DictionaryEntryType, DictionaryEntryTypes, IDictionary, IUpdateDictionary, SuperTypes } from '@red/domain'; import { catchError, map, switchMap, tap } from 'rxjs/operators'; @@ -8,6 +8,7 @@ import { DossierTemplateStatsService } from './dossier-template-stats.service'; import { DictionariesMapService } from './dictionaries-map.service'; import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http'; import { FALLBACK_COLOR } from '@utils/constants'; +import { DossierDictionariesMapService } from '@services/entity-services/dossier-dictionaries-map.service'; const MIN_WORD_LENGTH = 2; @@ -22,6 +23,7 @@ export class DictionaryService extends EntitiesService private readonly _toaster: Toaster, private readonly _dossierTemplateStatsService: DossierTemplateStatsService, private readonly _dictionariesMapService: DictionariesMapService, + private readonly _dossierDictionariesMapService: DossierDictionariesMapService, ) { super(); } @@ -144,7 +146,7 @@ export class DictionaryService extends EntitiesService async getDictionariesOptions(dossierTemplateId: string, dossierId: string): Promise { const possibleDictionaries: Dictionary[] = []; - const dossierDictionary: Dictionary = await firstValueFrom(this.getDossierDictionary(dossierTemplateId, dossierId)); + const dossierDictionary: Dictionary = this._dossierDictionariesMapService.get(dossierId, 'dossier_redaction'); for (const dictionary of this._dictionariesMapService.get(dossierTemplateId)) { if (!dictionary.virtual && dictionary.addToDictionaryAction) { @@ -161,7 +163,7 @@ export class DictionaryService extends EntitiesService return possibleDictionaries; } - getDossierDictionary(dossierTemplateId: string, dossierId: string): Observable { + loadDossierDictionary(dossierTemplateId: string, dossierId: string): Observable { return this.getForType(dossierTemplateId, 'dossier_redaction', dossierId).pipe( map( dictionary => @@ -170,6 +172,9 @@ export class DictionaryService extends EntitiesService type: 'dossier_redaction', }), ), + tap(dictionary => { + this._dossierDictionariesMapService.set(dossierId, [dictionary]); + }), ); } diff --git a/apps/red-ui/src/app/services/entity-services/dossier-dictionaries-map.service.ts b/apps/red-ui/src/app/services/entity-services/dossier-dictionaries-map.service.ts new file mode 100644 index 000000000..a4f605e87 --- /dev/null +++ b/apps/red-ui/src/app/services/entity-services/dossier-dictionaries-map.service.ts @@ -0,0 +1,8 @@ +import { Injectable } from '@angular/core'; +import { Dictionary, DOSSIER_ID, IDictionary } from '@red/domain'; +import { EntitiesMapService } from '@iqser/common-ui'; + +@Injectable({ providedIn: 'root' }) +export class DossierDictionariesMapService extends EntitiesMapService { + protected readonly _primaryKey = DOSSIER_ID; +} diff --git a/libs/red-domain/src/lib/dictionaries/dictionary.model.ts b/libs/red-domain/src/lib/dictionaries/dictionary.model.ts index 821bbf702..8c5e2e5c1 100644 --- a/libs/red-domain/src/lib/dictionaries/dictionary.model.ts +++ b/libs/red-domain/src/lib/dictionaries/dictionary.model.ts @@ -15,7 +15,6 @@ export class Dictionary extends Entity implements IDictionary { readonly rank?: number; readonly recommendation: boolean; readonly type: string; - readonly typeId?: string; readonly hasDictionary?: boolean; readonly systemManaged?: boolean; @@ -40,7 +39,6 @@ export class Dictionary extends Entity implements IDictionary { this.rank = entity.rank; this.recommendation = !!entity.recommendation; this.type = entity.type; - this.typeId = entity.typeId; this.hasDictionary = entity.hasDictionary; this.systemManaged = entity.systemManaged; } diff --git a/libs/red-domain/src/lib/dictionaries/dictionary.ts b/libs/red-domain/src/lib/dictionaries/dictionary.ts index 8cf003a69..bb525afe2 100644 --- a/libs/red-domain/src/lib/dictionaries/dictionary.ts +++ b/libs/red-domain/src/lib/dictionaries/dictionary.ts @@ -24,7 +24,6 @@ export interface IDictionary { * The nonnull entry type. */ readonly type: string; - readonly typeId?: string; /** * The list of dictionary entries of an entry type. */