fix activating files

This commit is contained in:
Dan Percic 2021-10-04 17:27:17 +03:00
parent 5e12a76b16
commit c939ded098

View File

@ -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);
});
}