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 @@ -
+