RED-3796: Empty dossier template checks
This commit is contained in:
parent
f27b68a951
commit
e1be225c17
@ -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;
|
||||
}
|
||||
|
||||
@ -12,6 +12,7 @@
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 24px;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
&:not(.empty) {
|
||||
|
||||
@ -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],
|
||||
|
||||
@ -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
|
||||
Loading…
x
Reference in New Issue
Block a user