diff --git a/apps/red-ui/src/app/guards/dossier-template-exists.guard.ts b/apps/red-ui/src/app/guards/dossier-template-exists.guard.ts index a50d2c8a2..b53592a16 100644 --- a/apps/red-ui/src/app/guards/dossier-template-exists.guard.ts +++ b/apps/red-ui/src/app/guards/dossier-template-exists.guard.ts @@ -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 { 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; } diff --git a/apps/red-ui/src/app/modules/dashboard/components/template-stats/template-stats.component.scss b/apps/red-ui/src/app/modules/dashboard/components/template-stats/template-stats.component.scss index 6f4fc35f8..fad1efcf3 100644 --- a/apps/red-ui/src/app/modules/dashboard/components/template-stats/template-stats.component.scss +++ b/apps/red-ui/src/app/modules/dashboard/components/template-stats/template-stats.component.scss @@ -12,6 +12,7 @@ justify-content: space-between; align-items: center; padding: 24px; + cursor: default; } &:not(.empty) { diff --git a/apps/red-ui/src/app/services/breadcrumbs.service.ts b/apps/red-ui/src/app/services/breadcrumbs.service.ts index 27f1bf465..ce911d9a0 100644 --- a/apps/red-ui/src/app/services/breadcrumbs.service.ts +++ b/apps/red-ui/src/app/services/breadcrumbs.service.ts @@ -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): 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): 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], diff --git a/apps/red-ui/src/app/services/entity-services/dossiers.service.provider.ts b/apps/red-ui/src/app/services/entity-services/dossiers.service.provider.ts index 42b0de04a..bd30faa3f 100644 --- a/apps/red-ui/src/app/services/entity-services/dossiers.service.provider.ts +++ b/apps/red-ui/src/app/services/entity-services/dossiers.service.provider.ts @@ -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); +export const dossiersServiceResolver = (injector: Injector, _route?: ActivatedRoute) => { + let route: ActivatedRoute = _route || injector.get(ActivatedRoute); while (route.firstChild) { route = route.firstChild; } diff --git a/libs/common-ui b/libs/common-ui index 5444b09e6..dc9323a0e 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 5444b09e647672383a0b39d23400a98d7efb6536 +Subproject commit dc9323a0ec4d2cdc8ffbb31df67995531160462c