diff --git a/apps/red-ui/src/app/guards/dossiers.guard.ts b/apps/red-ui/src/app/guards/dossiers.guard.ts index 59d87d968..7f056bf71 100644 --- a/apps/red-ui/src/app/guards/dossiers.guard.ts +++ b/apps/red-ui/src/app/guards/dossiers.guard.ts @@ -2,7 +2,6 @@ import { Injectable } from '@angular/core'; import { CanActivate } from '@angular/router'; import { DossiersService } from '@services/entity-services/dossiers.service'; import { firstValueFrom } from 'rxjs'; -import { DossierStatsService } from '@services/entity-services/dossier-stats.service'; @Injectable({ providedIn: 'root' }) export class DossiersGuard implements CanActivate { diff --git a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts index 6ce27d21f..71dc59af3 100644 --- a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts +++ b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts @@ -22,6 +22,7 @@ import { DICTIONARY_TYPE, DOSSIER_TEMPLATE_ID } from '@utils/constants'; import { DossierTemplateExistsGuard } from '../../guards/dossier-template-exists.guard'; import { DictionaryExistsGuard } from '../../guards/dictionary-exists.guard'; import { DossierStatesListingScreenComponent } from './screens/dossier-states-listing/dossier-states-listing-screen.component'; +import { DossiersGuard } from '../../guards/dossiers.guard'; const routes: Routes = [ { path: '', redirectTo: 'dossier-templates', pathMatch: 'full' }, @@ -120,7 +121,7 @@ const routes: Routes = [ component: DossierStatesListingScreenComponent, canActivate: [CompositeRouteGuard], data: { - routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard], + routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard, DossiersGuard], }, }, { diff --git a/apps/red-ui/src/app/modules/admin/screens/dossier-states-listing/dossier-states-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/dossier-states-listing/dossier-states-listing-screen.component.ts index 6c0f26378..f6ee28661 100644 --- a/apps/red-ui/src/app/modules/admin/screens/dossier-states-listing/dossier-states-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/dossier-states-listing/dossier-states-listing-screen.component.ts @@ -71,13 +71,14 @@ export class DossierStatesListingScreenComponent extends ListingComponent state.dossierStatusId !== dossierState.dossierStatusId), - dossierCount: this._getDossiersWithStateAndTemplateCount(dossierState.dossierStatusId, templateId), + dossierCount: dossierState.dossierCount, }; this._dialogService.openDialog('deleteDossierState', $event, data, async (value: string) => { if (value) { await firstValueFrom(this._dossierStateService.deleteAndReplace(dossierState.dossierStatusId, value)); } + await firstValueFrom(this._dossierStateService.loadAllForAllTemplates()); await this._appStateService.refreshDossierTemplate(templateId); await this._loadData(); }); @@ -91,6 +92,7 @@ export class DossierStatesListingScreenComponent extends ListingComponent d.dossierTemplateId === templateId); - dossierStates.forEach(state => { - state.dossierCount = this._getDossiersWithStateAndTemplateCount(state.dossierStatusId, templateId); - }); + const dossiers = this._dossiersService.all; + this._dossierStateService.all.forEach( + state => (state.dossierCount = dossiers.filter(dossier => dossier.dossierStatusId === state.dossierStatusId).length), + ); this.entitiesService.setEntities(dossierStates || []); } catch (e) {} this._loadingService.stop(); } - - private _getDossiersWithStateAndTemplateCount(dossierStatusId: string, templateId: string) { - const dossiers = this._dossiersService.all; - return dossiers.filter(dossier => dossier.dossierStatusId === dossierStatusId && dossier.dossierTemplateId === templateId).length; - } } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html index f04c6730a..7f632e2a0 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html @@ -74,7 +74,7 @@ diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts index bf200a3bf..16b5cc998 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts @@ -89,6 +89,7 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti this.form.reset({ dossierName: this.dossier.dossierName, dossierTemplateId: this.dossier.dossierTemplateId, + dossierStatusId: this.dossier.dossierStatusId, description: this.dossier.description, watermarkEnabled: this.dossier.watermarkEnabled, watermarkPreviewEnabled: this.dossier.watermarkPreviewEnabled, diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-status/dossiers-listing-status.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-status/dossiers-listing-status.component.ts index 385a727bb..96710947d 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-status/dossiers-listing-status.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-status/dossiers-listing-status.component.ts @@ -1,4 +1,4 @@ -import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/core'; import { Dossier, DossierStats } from '../../../../../../../../../../libs/red-domain/src'; import { DossierStateService } from '../../../../../../services/entity-services/dossier-state.service'; import { DossierState } from '../../../../../../../../../../libs/red-domain/src/lib/dossier-state'; @@ -9,14 +9,14 @@ import { DossierState } from '../../../../../../../../../../libs/red-domain/src/ styleUrls: ['./dossiers-listing-status.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, }) -export class DossiersListingStatusComponent implements OnInit { +export class DossiersListingStatusComponent implements OnChanges { @Input() stats: DossierStats; @Input() dossier: Dossier; currentState: DossierState; constructor(private readonly _dossierStateService: DossierStateService) {} - ngOnInit(): void { + ngOnChanges(): void { if (this.dossier.dossierStatusId) { this.currentState = this._dossierStateService.all.find(s => s.dossierStatusId === this.dossier.dossierStatusId); } diff --git a/apps/red-ui/src/app/services/entity-services/dossier-state.service.ts b/apps/red-ui/src/app/services/entity-services/dossier-state.service.ts index 5a8218cfa..34adf0566 100644 --- a/apps/red-ui/src/app/services/entity-services/dossier-state.service.ts +++ b/apps/red-ui/src/app/services/entity-services/dossier-state.service.ts @@ -3,7 +3,7 @@ import { EntitiesService, mapEach, RequiredParam, Validate } from '../../../../. import { DossierState, IDossierState } from '../../../../../../libs/red-domain/src/lib/dossier-state'; import { forkJoin, Observable, switchMap } from 'rxjs'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; -import { map } from 'rxjs/operators'; +import { map, tap } from 'rxjs/operators'; @Injectable({ providedIn: 'root', @@ -29,6 +29,7 @@ export class DossierStateService extends EntitiesService this.loadAllForTemplate(id)), switchMap(all => forkJoin(all)), map(value => value.flatMap(item => item)), + tap(value => this.setEntities(value)), ); }