fix file not loading on refresh

This commit is contained in:
Dan Percic 2021-11-17 19:28:31 +02:00
parent 9a70607801
commit a7a99efbc0
3 changed files with 36 additions and 1 deletions

View File

@ -3,6 +3,7 @@ import { RouterModule, Routes } from '@angular/router';
import { CompositeRouteGuard } from '@iqser/common-ui';
import { SearchScreenComponent } from './screens/search-screen/search-screen.component';
import { FilePreviewScreenComponent } from './screens/file-preview-screen/file-preview-screen.component';
import { FilesGuard } from './utils/file.guard';
const routes: Routes = [
{
@ -17,6 +18,7 @@ const routes: Routes = [
{
path: ':dossierId/file/:fileId',
component: FilePreviewScreenComponent,
canActivate: [FilesGuard],
data: {
reuse: true,
},

View File

@ -40,6 +40,7 @@ import { OverlayModule } from '@angular/cdk/overlay';
import { SharedDossiersModule } from './shared/shared-dossiers.module';
import { PlatformSearchService } from './shared/services/platform-search.service';
import { ResizeAnnotationDialogComponent } from './dialogs/resize-annotation-dialog/resize-annotation-dialog.component';
import { FilesGuard } from './utils/file.guard';
const screens = [FilePreviewScreenComponent, SearchScreenComponent];
@ -90,7 +91,7 @@ const services = [
@NgModule({
declarations: [...components],
providers: [...services],
providers: [...services, FilesGuard],
imports: [CommonModule, SharedModule, SharedDossiersModule, FileUploadDownloadModule, DossiersRoutingModule, OverlayModule],
})
export class DossiersModule {}

View File

@ -0,0 +1,32 @@
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router';
import { FilesMapService } from '@services/entity-services/files-map.service';
import { AppStateService } from '@state/app-state.service';
import { DossiersService } from '@services/entity-services/dossiers.service';
@Injectable()
export class FilesGuard implements CanActivate {
constructor(
private readonly _filesMapService: FilesMapService,
private readonly _dossiersService: DossiersService,
private readonly _appStateService: AppStateService,
private readonly _router: Router,
) {}
async canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {
const dossierId = route.paramMap.get('dossierId');
const fileId = route.paramMap.get('fileId');
if (!this._filesMapService.get(dossierId, fileId)) {
const dossier = this._dossiersService.find(dossierId);
await this._appStateService.getFiles(dossier);
if (!this._filesMapService.get(dossierId, fileId)) {
await this._router.navigate([dossier.routerLink]);
return false;
}
}
return true;
}
}