diff --git a/apps/red-ui/src/app/components/base-screen/base-screen.component.ts b/apps/red-ui/src/app/components/base-screen/base-screen.component.ts
index 3392423a7..b7087c041 100644
--- a/apps/red-ui/src/app/components/base-screen/base-screen.component.ts
+++ b/apps/red-ui/src/app/components/base-screen/base-screen.component.ts
@@ -1,10 +1,8 @@
import { Component } from '@angular/core';
import { UserService } from '@services/user.service';
-import { AppStateService } from '@state/app-state.service';
import { UserPreferenceService } from '@services/user-preference.service';
import { NavigationStart, Router } from '@angular/router';
import { Title } from '@angular/platform-browser';
-import { FileDownloadService } from '@upload-download/services/file-download.service';
import { TranslateService } from '@ngx-translate/core';
import { SpotlightSearchAction } from '@components/spotlight-search/spotlight-search-action';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
@@ -34,13 +32,11 @@ export class BaseScreenComponent {
name: _('top-bar.navigation-items.my-account.children.account'),
routerLink: '/main/account',
show: true,
- action: this.appStateService.reset,
},
{
name: _('top-bar.navigation-items.my-account.children.admin'),
routerLink: '/main/admin',
show: this.currentUser.isManager || this.currentUser.isUserAdmin,
- action: this.appStateService.reset,
},
{
name: _('top-bar.navigation-items.my-account.children.downloads'),
@@ -75,7 +71,6 @@ export class BaseScreenComponent {
readonly isSearchScreen$ = this._navigationStart$.pipe(map(isSearchScreen));
constructor(
- readonly appStateService: AppStateService,
readonly userService: UserService,
readonly userPreferenceService: UserPreferenceService,
readonly titleService: Title,
diff --git a/apps/red-ui/src/app/models/file/file-data.model.ts b/apps/red-ui/src/app/models/file/file-data.model.ts
index dea3703f0..3356e3ce5 100644
--- a/apps/red-ui/src/app/models/file/file-data.model.ts
+++ b/apps/red-ui/src/app/models/file/file-data.model.ts
@@ -24,7 +24,7 @@ export class FileDataModel {
private readonly _file: File,
private _redactionLog: IRedactionLog,
public viewedPages?: IViewedPage[],
- private _dictionaryData?: { [p: string]: Dictionary },
+ private _dictionaryData?: Dictionary[],
private _areDevFeaturesEnabled?: boolean,
) {
this._buildAllAnnotations();
@@ -83,7 +83,8 @@ export class FileDataModel {
// copy the redactionLog Entry
const changeLogValues = this.#getChangeLogValues(redactionLogEntry);
- if (!this._dictionaryData[redactionLogEntry.type]) {
+ const dictionaryData = this._dictionaryData.find(dict => dict.type === redactionLogEntry.type);
+ if (!dictionaryData) {
this.missingTypes.add(redactionLogEntry.type);
return;
}
@@ -94,7 +95,7 @@ export class FileDataModel {
changeLogValues.isChangeLogEntry,
changeLogValues.hidden,
this.redactionLog.legalBasis,
- !!this._dictionaryData[redactionLogEntry.type]?.hint,
+ !!dictionaryData?.hint,
);
if (
diff --git a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts
index db715d7b9..599c319e2 100644
--- a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts
+++ b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts
@@ -1,9 +1,9 @@
import { Component, HostBinding, Input, OnInit } from '@angular/core';
import { UserPreferenceService } from '@services/user-preference.service';
-import { AppStateService } from '@state/app-state.service';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { adminSideNavTranslations } from '../translations/admin-side-nav-translations';
import { UserService } from '@services/user.service';
+import { ActivatedRoute } from '@angular/router';
type Type = 'settings' | 'dossierTemplates';
@@ -68,7 +68,7 @@ export class AdminSideNavComponent implements OnInit {
constructor(
private readonly _userService: UserService,
- private readonly _appStateService: AppStateService,
+ private readonly _route: ActivatedRoute,
readonly userPreferenceService: UserPreferenceService,
) {}
@@ -77,6 +77,6 @@ export class AdminSideNavComponent implements OnInit {
}
ngOnInit(): void {
- this.prefix = this._appStateService.activeDictionaryType ? '../../' : '../';
+ this.prefix = this._route.snapshot.paramMap.get('dictionary') ? '../../' : '../';
}
}
diff --git a/apps/red-ui/src/app/modules/admin/components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component.html b/apps/red-ui/src/app/modules/admin/components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component.html
index b91797330..0edc6758e 100644
--- a/apps/red-ui/src/app/modules/admin/components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component.html
+++ b/apps/red-ui/src/app/modules/admin/components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component.html
@@ -9,23 +9,14 @@
-
+
{{ dossierTemplate.name }}
-
+
-
- {{ appStateService.activeDictionary.label }}
+
+ {{ activeDictionary.label }}
diff --git a/apps/red-ui/src/app/modules/admin/components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component.ts b/apps/red-ui/src/app/modules/admin/components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component.ts
index f623f91ab..ea7872bda 100644
--- a/apps/red-ui/src/app/modules/admin/components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component.ts
+++ b/apps/red-ui/src/app/modules/admin/components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component.ts
@@ -1,12 +1,12 @@
import { Component, Input } from '@angular/core';
-import { AppStateService } from '@state/app-state.service';
import { UserPreferenceService } from '@services/user-preference.service';
import { PermissionsService } from '@services/permissions.service';
import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service';
-import { Observable } from 'rxjs';
+import { Observable, of } from 'rxjs';
import { map, switchMap } from 'rxjs/operators';
import { ActivatedRoute } from '@angular/router';
-import { DossierTemplate } from '@red/domain';
+import { Dictionary, DossierTemplate } from '@red/domain';
+import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service';
@Component({
selector: 'redaction-dossier-template-breadcrumbs',
@@ -16,17 +16,24 @@ import { DossierTemplate } from '@red/domain';
export class DossierTemplateBreadcrumbsComponent {
@Input() root = false;
readonly dossierTemplate$: Observable;
+ readonly activeDictionary$: Observable;
constructor(
readonly userPreferenceService: UserPreferenceService,
readonly permissionService: PermissionsService,
- readonly appStateService: AppStateService,
readonly dossierTemplatesService: DossierTemplatesService,
+ readonly dictionariesMapService: DictionariesMapService,
private readonly _route: ActivatedRoute,
) {
this.dossierTemplate$ = _route.paramMap.pipe(
map(params => params.get('dossierTemplateId')),
switchMap((dossierTemplateId: string) => this.dossierTemplatesService.getEntityChanged$(dossierTemplateId)),
);
+ this.activeDictionary$ = _route.paramMap.pipe(
+ map(params => [params.get('dossierTemplateId'), params.get('dictionary')]),
+ switchMap(([dossierTemplateId, dictionary]: [string, string]) =>
+ dictionary ? this.dictionariesMapService.watch$(dossierTemplateId, dictionary) : of(undefined),
+ ),
+ );
}
}
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.ts
index 3e1ec0ec1..71d08b265 100644
--- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.ts
+++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.ts
@@ -5,13 +5,13 @@ import { firstValueFrom, Observable } from 'rxjs';
import { BaseDialogComponent, shareDistinctLast, Toaster } from '@iqser/common-ui';
import { TranslateService } from '@ngx-translate/core';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
-import { AppStateService } from '@state/app-state.service';
import { toSnakeCase } from '@utils/functions';
import { DictionaryService } from '@shared/services/dictionary.service';
import { Dictionary, IDictionary } from '@red/domain';
import { UserService } from '@services/user.service';
import { map } from 'rxjs/operators';
import { HttpStatusCode } from '@angular/common/http';
+import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service';
@Component({
selector: 'redaction-add-edit-dictionary-dialog',
@@ -34,7 +34,7 @@ export class AddEditDictionaryDialogComponent extends BaseDialogComponent {
readonly userService: UserService,
private readonly _toaster: Toaster,
private readonly _formBuilder: FormBuilder,
- private readonly _appStateService: AppStateService,
+ private readonly _dictionariesMapService: DictionariesMapService,
private readonly _translateService: TranslateService,
private readonly _dictionaryService: DictionaryService,
protected readonly _injector: Injector,
@@ -103,7 +103,7 @@ export class AddEditDictionaryDialogComponent extends BaseDialogComponent {
}
private _toTechnicalName(value: string) {
- const existingTechnicalNames = Object.keys(this._appStateService.dictionaryData[this._dossierTemplateId]);
+ const existingTechnicalNames = this._dictionariesMapService.get(this._dossierTemplateId).map(dict => dict.type);
const baseTechnicalName = toSnakeCase(value.trim());
let technicalName = baseTechnicalName;
let suffix = 1;
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts
index 778150cc5..b117b6cfc 100644
--- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts
+++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts
@@ -1,5 +1,4 @@
import { Component, Inject, Injector } from '@angular/core';
-import { AppStateService } from '@state/app-state.service';
import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import * as moment from 'moment';
@@ -11,7 +10,7 @@ import { BaseDialogComponent, LoadingService, Toaster } from '@iqser/common-ui';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { DownloadFileType, IDossierTemplate } from '@red/domain';
import { HttpStatusCode } from '@angular/common/http';
-import { firstValueFrom } from 'rxjs';
+import { DictionaryService } from '../../../shared/services/dictionary.service';
@Component({
templateUrl: './add-edit-dossier-template-dialog.component.html',
@@ -31,9 +30,9 @@ export class AddEditDossierTemplateDialogComponent extends BaseDialogComponent {
private _lastValidTo: Moment;
constructor(
- private readonly _appStateService: AppStateService,
private readonly _toaster: Toaster,
private readonly _dossierTemplatesService: DossierTemplatesService,
+ private readonly _dictionaryService: DictionaryService,
private readonly _formBuilder: FormBuilder,
protected readonly _injector: Injector,
protected readonly _dialogRef: MatDialogRef,
@@ -81,7 +80,7 @@ export class AddEditDossierTemplateDialogComponent extends BaseDialogComponent {
validTo: this.hasValidTo ? this.form.get('validTo').value : null,
} as IDossierTemplate;
await this._dossierTemplatesService.createOrUpdate(dossierTemplate).toPromise();
- await this._appStateService.loadDictionaryData();
+ await this._dictionaryService.loadDictionaryData();
this._dialogRef.close(true);
} catch (error: any) {
const message =
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-configurations-dialog/file-attributes-configurations-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-configurations-dialog/file-attributes-configurations-dialog.component.ts
index c54b54bf6..136a12bea 100644
--- a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-configurations-dialog/file-attributes-configurations-dialog.component.ts
+++ b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-configurations-dialog/file-attributes-configurations-dialog.component.ts
@@ -4,10 +4,10 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { FileAttributeEncodingTypes, IFileAttributesConfig } from '../../../../../../../../libs/red-domain/src';
import { fileAttributeEncodingTypesTranslations } from '../../translations/file-attribute-encoding-types-translations';
import { BaseDialogComponent, Toaster } from '../../../../../../../../libs/common-ui/src';
-import { DossierTemplatesService } from '../../../../services/entity-services/dossier-templates.service';
+import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service';
import { firstValueFrom } from 'rxjs';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
-import { FileAttributesService } from '../../../../services/entity-services/file-attributes.service';
+import { FileAttributesService } from '@services/entity-services/file-attributes.service';
@Component({
templateUrl: './file-attributes-configurations-dialog.component.html',
@@ -15,10 +15,9 @@ import { FileAttributesService } from '../../../../services/entity-services/file
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class FileAttributesConfigurationsDialogComponent extends BaseDialogComponent {
- private readonly _configuration: IFileAttributesConfig = this._data;
-
readonly encodingTypeOptions = Object.keys(FileAttributeEncodingTypes);
readonly translations = fileAttributeEncodingTypesTranslations;
+ private readonly _configuration: IFileAttributesConfig = this._data;
constructor(
private readonly _formBuilder: FormBuilder,
diff --git a/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts
index 5bfcba4ce..f22841b00 100644
--- a/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts
+++ b/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts
@@ -1,5 +1,4 @@
import { ChangeDetectionStrategy, Component, forwardRef, Injector, OnInit } from '@angular/core';
-import { AppStateService } from '@state/app-state.service';
import { DefaultColorType, IColors } from '@red/domain';
import { AdminDialogService } from '../../services/admin-dialog.service';
import {
@@ -43,7 +42,6 @@ export class DefaultColorsScreenComponent extends ListingComponent imp
protected readonly _injector: Injector,
private readonly _userService: UserService,
private readonly _loadingService: LoadingService,
- private readonly _appStateService: AppStateService,
private readonly _dossierTemplatesService: DossierTemplatesService,
private readonly _dialogService: AdminDialogService,
private readonly _dictionaryService: DictionaryService,
@@ -66,14 +64,14 @@ export class DefaultColorsScreenComponent extends ListingComponent imp
},
async () => {
await this._loadColors();
- await this._appStateService.refreshDossierTemplate(this._dossierTemplatesService.activeDossierTemplateId);
+ await this._dictionaryService.refreshDossierTemplate(this._dossierTemplatesService.activeDossierTemplateId);
},
);
}
private async _loadColors() {
this._loadingService.start();
- const data = await firstValueFrom(this._appStateService.loadColors(this._dossierTemplatesService.activeDossierTemplateId));
+ const data = await firstValueFrom(this._dictionaryService.getColors(this._dossierTemplatesService.activeDossierTemplateId));
this._colorsObj = data;
const entities = Object.keys(data)
.map(key => ({
diff --git a/apps/red-ui/src/app/modules/admin/screens/dictionary-listing/dictionary-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/dictionary-listing/dictionary-listing-screen.component.ts
index 8abdb0d58..3e0da7840 100644
--- a/apps/red-ui/src/app/modules/admin/screens/dictionary-listing/dictionary-listing-screen.component.ts
+++ b/apps/red-ui/src/app/modules/admin/screens/dictionary-listing/dictionary-listing-screen.component.ts
@@ -1,6 +1,5 @@
import { Component, forwardRef, Injector, OnInit } from '@angular/core';
import { DoughnutChartConfig } from '@shared/components/simple-doughnut-chart/simple-doughnut-chart.component';
-import { AppStateService } from '@state/app-state.service';
import { TranslateService } from '@ngx-translate/core';
import {
CircleButtonTypes,
@@ -20,6 +19,7 @@ import { firstValueFrom, Observable } from 'rxjs';
import { DossierTemplateStatsService } from '@services/entity-services/dossier-template-stats.service';
import { ActivatedRoute } from '@angular/router';
import { tap } from 'rxjs/operators';
+import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service';
@Component({
templateUrl: './dictionary-listing-screen.component.html',
@@ -44,8 +44,8 @@ export class DictionaryListingScreenComponent extends ListingComponent {
if (refresh) {
- await this._appStateService.loadDictionaryData();
+ await this._dictionaryService.loadDictionaryData();
}
- const appStateDictionaryData = this._appStateService.dictionaryData[this._dossierTemplatesService.activeDossierTemplateId];
- const entities = Object.values(appStateDictionaryData).filter(d => !d.virtual);
+ const entities: Dictionary[] = this._dictionariesMapService
+ .get(this._dossierTemplatesService.activeDossierTemplateId)
+ .filter(d => !d.virtual);
this.entitiesService.setEntities(entities);
this._calculateData();
diff --git a/apps/red-ui/src/app/modules/admin/screens/dictionary-overview/dictionary-overview-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/dictionary-overview/dictionary-overview-screen.component.html
index 6c6387dba..43915aff7 100644
--- a/apps/red-ui/src/app/modules/admin/screens/dictionary-overview/dictionary-overview-screen.component.html
+++ b/apps/red-ui/src/app/modules/admin/screens/dictionary-overview/dictionary-overview-screen.component.html
@@ -1,10 +1,10 @@
-