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 e59a1ebb4..203707cb1 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 @@ -7,14 +7,27 @@ import { DossierTemplateStatsService } from '@services/entity-services/dossier-t import { NGXLogger } from 'ngx-logger'; import { firstValueFrom } from 'rxjs'; import { UserPreferenceService } from '@users/user-preference.service'; +import { DictionaryService } from '@services/entity-services/dictionary.service'; +import { DefaultColorsService } from '@services/entity-services/default-colors.service'; +import { WatermarkService } from '@services/entity-services/watermark.service'; +import { FileAttributesService } from '@services/entity-services/file-attributes.service'; export function templateExistsWhenEnteringAdmin(): CanActivateFn { return async function (route: ActivatedRouteSnapshot): Promise { const dossierTemplateId: string = route.paramMap.get(DOSSIER_TEMPLATE_ID); + const fileAttributesService = inject(FileAttributesService); + const dictionaryService = inject(DictionaryService); + const defaultColorsService = inject(DefaultColorsService); + const watermarksService = inject(WatermarkService); + const router = inject(Router); const dossierTemplate = inject(DossierTemplateStatsService).get(dossierTemplateId); + await firstValueFrom(fileAttributesService.loadFileAttributesConfig(dossierTemplateId)); + await firstValueFrom(dictionaryService.loadDictionaryDataForDossierTemplate(dossierTemplateId)); + await firstValueFrom(defaultColorsService.loadForDossierTemplate(dossierTemplateId)); + await firstValueFrom(watermarksService.loadForDossierTemplate(dossierTemplateId)); if (!dossierTemplate) { - await inject(Router).navigate(['main', 'admin', 'dossier-templates']); + await router.navigate(['main', 'admin', 'dossier-templates']); return false; } return true; @@ -29,9 +42,13 @@ export function templateExistsWhenEnteringDossierList(): CanActivateFn { const logger = inject(NGXLogger); const router = inject(Router); const userPreferencesService = inject(UserPreferenceService); + const fileAttributesService = inject(FileAttributesService); + const dictionaryService = inject(DictionaryService); + const defaultColorsService = inject(DefaultColorsService); + const watermarksService = inject(WatermarkService); - await firstValueFrom(dashboardStatsService.loadAll()); - await firstValueFrom(dossierTemplatesService.loadAll()); + await firstValueFrom(dashboardStatsService.loadForTemplate(dossierTemplateId)); + await firstValueFrom(dossierTemplatesService.loadDossierTemplate(dossierTemplateId)); const dossierTemplateStats = dashboardStatsService.find(dossierTemplateId); if (!dossierTemplateStats || dossierTemplateStats.isEmpty) { logger.warn(`[ROUTES] Dossier template ${dossierTemplateId} not found, redirecting to main`); @@ -39,6 +56,10 @@ export function templateExistsWhenEnteringDossierList(): CanActivateFn { await router.navigate(['main']); return false; } + await firstValueFrom(fileAttributesService.loadFileAttributesConfig(dossierTemplateId)); + await firstValueFrom(dictionaryService.loadDictionaryDataForDossierTemplate(dossierTemplateId)); + await firstValueFrom(defaultColorsService.loadForDossierTemplate(dossierTemplateId)); + await firstValueFrom(watermarksService.loadForDossierTemplate(dossierTemplateId)); return true; }; } diff --git a/apps/red-ui/src/app/services/dossier-templates/dashboard-stats.service.ts b/apps/red-ui/src/app/services/dossier-templates/dashboard-stats.service.ts index 80a7de45c..17249dd72 100644 --- a/apps/red-ui/src/app/services/dossier-templates/dashboard-stats.service.ts +++ b/apps/red-ui/src/app/services/dossier-templates/dashboard-stats.service.ts @@ -31,4 +31,13 @@ export class DashboardStatsService extends EntitiesService this.setEntities(entities)), ); } + + loadForTemplate(dossierTemplateId: string) { + const singleTemplateStatsUrl = `/${this._serviceName}/dossier-template/${dossierTemplateId}/stats`; + return this._http.get(singleTemplateStatsUrl).pipe( + map(entity => new DashboardStats(entity)), + switchMap(entity => this.#dossierStatesService.loadAllForTemplate(dossierTemplateId).pipe(map(() => entity))), + tap(entity => this.addEntity(entity)), + ); + } } diff --git a/apps/red-ui/src/app/services/dossier-templates/dossier-templates.service.ts b/apps/red-ui/src/app/services/dossier-templates/dossier-templates.service.ts index 13a45ae97..acad05cc7 100644 --- a/apps/red-ui/src/app/services/dossier-templates/dossier-templates.service.ts +++ b/apps/red-ui/src/app/services/dossier-templates/dossier-templates.service.ts @@ -4,10 +4,8 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { EntitiesService, Toaster } from '@iqser/common-ui'; import { List, mapEach } from '@iqser/common-ui/lib/utils'; import { DossierTemplate, IDossierTemplate } from '@red/domain'; -import { DefaultColorsService } from '@services/entity-services/default-colors.service'; -import { WatermarkService } from '@services/entity-services/watermark.service'; import { firstValueFrom, forkJoin, Observable, of } from 'rxjs'; -import { catchError, map, mapTo, switchMap, tap } from 'rxjs/operators'; +import { catchError, map, switchMap, tap } from 'rxjs/operators'; import { DictionaryService } from '../entity-services/dictionary.service'; import { DossierTemplateStatsService } from '../entity-services/dossier-template-stats.service'; import { FileAttributesService } from '../entity-services/file-attributes.service'; @@ -27,15 +25,11 @@ export class DossierTemplatesService extends EntitiesService { - const getAttributes = (entities: DossierTemplate[]) => - entities.map(e => this._fileAttributesService.loadFileAttributesConfig(e.id)); const dossierTemplateIds = (templates: DossierTemplate[]) => templates.map(d => d.id); return this.getAll().pipe( @@ -43,16 +37,7 @@ export class DossierTemplatesService extends EntitiesService { if (templates.length) { - return forkJoin([ - this._dossierTemplateStatsService.getFor(dossierTemplateIds(templates)), - ...getAttributes(templates), - // TODO: this should be removed and called only when needed - this._dictionaryService.loadDictionaryData(dossierTemplateIds(templates)), - // TODO: this should be removed and called only when needed - this._defaultColorsService.loadAll(dossierTemplateIds(templates)), - // TODO: this should be removed and called only when needed - this._watermarksService.loadAll(dossierTemplateIds(templates)), - ]).pipe(map(() => templates)); + return this._dossierTemplateStatsService.getFor(dossierTemplateIds(templates)).pipe(map(() => templates)); } return of(templates); }), @@ -60,6 +45,14 @@ export class DossierTemplatesService extends EntitiesService new DossierTemplate(entity)), + switchMap(template => this._dossierTemplateStatsService.getFor([dossierTemplateId]).pipe(map(() => template))), + tap(template => this.addEntity(template)), + ); + } + delete(body: List): Observable { const showToast = (error: HttpErrorResponse) => { if (error.status === HttpStatusCode.Conflict) { @@ -72,7 +65,7 @@ export class DossierTemplatesService extends EntitiesService (error ? of(false) : this.loadAll().pipe(mapTo(true)))), + switchMap(error => (error ? of(false) : this.loadAll().pipe(map(() => true)))), ); } diff --git a/apps/red-ui/src/app/services/entity-services/default-colors.service.ts b/apps/red-ui/src/app/services/entity-services/default-colors.service.ts index dbc5a6f7f..1ac6831d7 100644 --- a/apps/red-ui/src/app/services/entity-services/default-colors.service.ts +++ b/apps/red-ui/src/app/services/entity-services/default-colors.service.ts @@ -1,9 +1,8 @@ import { Injectable } from '@angular/core'; import { EntitiesService } from '@iqser/common-ui'; import { DefaultColors, DefaultColorType, IDefaultColors } from '@red/domain'; -import { forkJoin, Observable } from 'rxjs'; +import { Observable } from 'rxjs'; import { map, switchMap, tap } from 'rxjs/operators'; -import { mapEach } from '@iqser/common-ui/lib/utils'; @Injectable({ providedIn: 'root', @@ -23,10 +22,10 @@ export class DefaultColorsService extends EntitiesService { - return forkJoin(dossierTemplateIds.map(id => super.getFor(id))).pipe( - mapEach(defaultColors => new DefaultColors(defaultColors)), - tap(defaultColors => this.setEntities(defaultColors)), + loadForDossierTemplate(dossierTemplateId: string): Observable { + return super.getFor(dossierTemplateId).pipe( + map(defaultColors => new DefaultColors(defaultColors)), + tap(defaultColors => this.addEntity(defaultColors)), ); } diff --git a/libs/common-ui b/libs/common-ui index 957dc404a..c12b6f4d3 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 957dc404a85626d9072da0b050aa0fbddbb30789 +Subproject commit c12b6f4d35d646c7b9b6e9b8ef6559457f05be15