diff --git a/apps/red-ui/src/app/state/app-state.service.ts b/apps/red-ui/src/app/state/app-state.service.ts index 19509cec4..0209fc320 100644 --- a/apps/red-ui/src/app/state/app-state.service.ts +++ b/apps/red-ui/src/app/state/app-state.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'; import { Colors, IFile, ReanalysisControllerService } from '@redaction/red-ui-http'; import { Toaster } from '@iqser/common-ui'; import { TranslateService } from '@ngx-translate/core'; -import { Event, ResolveStart, Router } from '@angular/router'; +import { ActivationEnd, Event, ResolveStart, Router } from '@angular/router'; import { UserService } from '@services/user.service'; import { forkJoin, Observable, of, Subject } from 'rxjs'; import { catchError, filter, first, map, tap } from 'rxjs/operators'; @@ -17,6 +17,7 @@ import { FilesService } from '../modules/dossier/services/files.service'; import { DictionaryService } from '@shared/services/dictionary.service'; import { DossierTemplatesService } from '../modules/dossier/services/dossier-templates.service'; import { FileAttributesService } from '../modules/dossier/services/file-attributes.service'; +import { BaseScreenComponent } from '@components/base-screen/base-screen.component'; export interface AppState { dossierTemplates: DossierTemplate[]; @@ -25,6 +26,8 @@ export interface AppState { activeDictionaryType?: string; } +const getRelatedEvents = filter(event => event instanceof ActivationEnd && event.snapshot.component !== BaseScreenComponent); + @Injectable({ providedIn: 'root' }) @@ -52,20 +55,26 @@ export class AppStateService { dossierTemplates: [] }; - _router.events.subscribe(async (event: Event) => { - if (AppStateService._isFileOverviewRoute(event)) { - const url = (event as ResolveStart).url.replace('/main/dossiers/', ''); - const [dossierId, , fileId] = url.split(/[/?]/); - await _dossiersService.activeDossier$ - .pipe( - filter(dossier => !!dossier), - first() - ) - .toPromise(); - return await this.activateFile(dossierId, fileId); + _router.events.pipe(getRelatedEvents).subscribe(async (event: ActivationEnd) => { + const fileId = event.snapshot.paramMap.get('fileId'); + const sameIdAsCurrentActive = fileId === this.activeFileId; + + if (sameIdAsCurrentActive) { + return; } - this._appState.activeFileId = undefined; + if (fileId === null || fileId === undefined) { + return (this._appState.activeFileId = undefined); + } + + await _dossiersService.activeDossier$ + .pipe( + filter(dossier => !!dossier), + first() + ) + .toPromise(); + const dossierId = event.snapshot.paramMap.get('dossierId'); + return await this.activateFile(dossierId, fileId); }); }