RED-3800: Fixed dossier template guards

This commit is contained in:
Adina Țeudan 2022-05-16 22:14:50 +03:00
parent 33d8d00717
commit 34bf21ee65
2 changed files with 21 additions and 8 deletions

View File

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate } from '@angular/router';
import { CanActivate } from '@angular/router';
import { firstValueFrom } from 'rxjs';
import { DashboardStatsService } from '@services/dossier-templates/dashboard-stats.service';
@ -7,7 +7,7 @@ import { DashboardStatsService } from '@services/dossier-templates/dashboard-sta
export class DashboardGuard implements CanActivate {
constructor(private readonly _dashboardStatsService: DashboardStatsService) {}
async canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {
async canActivate(): Promise<boolean> {
await firstValueFrom(this._dashboardStatsService.loadAll());
return true;
}

View File

@ -2,19 +2,32 @@ import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router';
import { DOSSIER_TEMPLATE_ID } from '@red/domain';
import { DashboardStatsService } from '@services/dossier-templates/dashboard-stats.service';
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
@Injectable({ providedIn: 'root' })
export class DossierTemplateExistsGuard implements CanActivate {
constructor(private readonly _dashboardStatsService: DashboardStatsService, private readonly _router: Router) {}
constructor(
private readonly _dashboardStatsService: DashboardStatsService,
private readonly _dossierTemplatesService: DossierTemplatesService,
private readonly _router: Router,
) {}
async canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {
const dossierTemplateId: string = route.paramMap.get(DOSSIER_TEMPLATE_ID);
const dossiersListView = !route.pathFromRoot.find(r => r.routeConfig?.path === 'admin');
const dossierTemplateStats = this._dashboardStatsService.find(dossierTemplateId);
if (!dossierTemplateStats || (dossiersListView && dossierTemplateStats.isEmpty)) {
const routerPath = dossiersListView ? [''] : ['main', 'admin', 'dossier-templates'];
await this._router.navigate(routerPath);
return false;
if (dossiersListView) {
const dossierTemplateStats = this._dashboardStatsService.find(dossierTemplateId);
if (!dossierTemplateStats || (dossiersListView && dossierTemplateStats.isEmpty)) {
await this._router.navigate(['']);
return false;
}
} else {
const dossierTemplate = this._dossierTemplatesService.find(dossierTemplateId);
if (!dossierTemplate) {
await this._router.navigate(['main', 'admin', 'dossier-templates']);
return false;
}
}
return true;