RED-3796: Empty dossier template checks

This commit is contained in:
Adina Țeudan 2022-05-05 16:43:39 +03:00
parent f27b68a951
commit e1be225c17
5 changed files with 19 additions and 16 deletions

View File

@ -1,17 +1,18 @@
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router';
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
import { DOSSIER_TEMPLATE_ID } from '@utils/constants';
import { DashboardStatsService } from '@services/dossier-templates/dashboard-stats.service';
@Injectable({ providedIn: 'root' })
export class DossierTemplateExistsGuard implements CanActivate {
constructor(private readonly _dossierTemplatesService: DossierTemplatesService, private readonly _router: Router) {}
constructor(private readonly _dashboardStatsService: DashboardStatsService, private readonly _router: Router) {}
async canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {
const dossierTemplateId: string = route.paramMap.get(DOSSIER_TEMPLATE_ID);
if (!this._dossierTemplatesService.find(dossierTemplateId)) {
const adminView = !!route.pathFromRoot.find(r => r.routeConfig?.path === 'admin');
const routerPath = adminView ? ['main', 'admin', 'dossier-templates'] : [''];
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;
}

View File

@ -12,6 +12,7 @@
justify-content: space-between;
align-items: center;
padding: 24px;
cursor: default;
}
&:not(.empty) {

View File

@ -10,7 +10,7 @@ import { DOSSIER_ID, DOSSIER_TEMPLATE_ID, DOSSIERS_ARCHIVE, FILE_ID } from '@uti
import { DossiersService } from '@services/dossiers/dossiers.service';
import { dossiersServiceResolver } from '@services/entity-services/dossiers.service.provider';
import { FeaturesService } from '@services/features.service';
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
import { DashboardStatsService } from '@services/dossier-templates/dashboard-stats.service';
export type RouterLinkActiveOptions = { exact: boolean } | IsActiveMatchOptions;
export type BreadcrumbDisplayType = 'text' | 'dropdown';
@ -41,7 +41,7 @@ export class BreadcrumbsService {
private readonly _router: Router,
private readonly _translateService: TranslateService,
private readonly _filesMapService: FilesMapService,
private readonly _dossierTemplatesService: DossierTemplatesService,
private readonly _dashboardStatsService: DashboardStatsService,
private readonly _featuresService: FeaturesService,
) {
this.breadcrumbs$ = this._store$.asObservable();
@ -49,7 +49,7 @@ export class BreadcrumbsService {
this._router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(() => {
const root = this._router.routerState.snapshot.root;
this._clear();
this._addBreadcrumbs(root.firstChild);
this._addBreadcrumbs(root);
});
}
@ -58,7 +58,7 @@ export class BreadcrumbsService {
}
private get _dossiersService(): DossiersService {
return dossiersServiceResolver(this._injector);
return dossiersServiceResolver(this._injector, this._router.routerState.root);
}
private get _dashboardBreadcrumb(): Breadcrumb {
@ -115,9 +115,10 @@ export class BreadcrumbsService {
}
private _addDossierTemplateDropdown(params: Record<string, string>): void {
const breadcrumbs = this._dossierTemplatesService.all.map(dossierTemplate =>
this._dossierTemplateBreadcrumb({ dossierTemplateId: dossierTemplate.id }),
);
const breadcrumbs = this._dashboardStatsService.all
.filter(dt => !dt.isEmpty)
.map(dt => this._dossierTemplateBreadcrumb({ dossierTemplateId: dt.id }));
const activeOption = breadcrumbs.find(b => b.options.routerLink[1] === params[DOSSIER_TEMPLATE_ID]);
this._append({
@ -133,7 +134,7 @@ export class BreadcrumbsService {
private _dossierTemplateBreadcrumb(params: Record<string, string>): Breadcrumb {
const dossierTemplateId: string = params[DOSSIER_TEMPLATE_ID];
return {
name$: this._dossierTemplatesService.getEntityChanged$(dossierTemplateId).pipe(pluck('name')),
name$: this._dashboardStatsService.getEntityChanged$(dossierTemplateId).pipe(pluck('name')),
type: 'text' as BreadcrumbDisplayType,
options: {
routerLink: ['/main', dossierTemplateId, this._dossiersService.routerPath],

View File

@ -4,8 +4,8 @@ import { DossiersService } from '../dossiers/dossiers.service';
/** Usage in components or services is only allowed in guards or in constructors.
* Otherwise, it causes errors on navigation to other screens if the component is reused. */
export const dossiersServiceResolver = (injector: Injector) => {
let route: ActivatedRoute = injector.get<ActivatedRoute>(ActivatedRoute);
export const dossiersServiceResolver = (injector: Injector, _route?: ActivatedRoute) => {
let route: ActivatedRoute = _route || injector.get<ActivatedRoute>(ActivatedRoute);
while (route.firstChild) {
route = route.firstChild;
}

@ -1 +1 @@
Subproject commit 5444b09e647672383a0b39d23400a98d7efb6536
Subproject commit dc9323a0ec4d2cdc8ffbb31df67995531160462c