From eb4b8b0f1ed9a1310f551b8fa1b22b38663d7745 Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Fri, 1 Oct 2021 13:47:16 +0300 Subject: [PATCH] move stats to dossiers service --- apps/red-ui/src/app/models/file/file.ts | 4 +-- .../app/modules/dossier/dossiers.module.ts | 1 - .../dossiers-listing-details.component.html | 6 ++-- .../dossiers-listing-details.component.ts | 4 +-- .../dossier/services/dossiers.service.ts | 11 +++--- .../red-ui/src/app/state/app-state.service.ts | 35 +++---------------- 6 files changed, 18 insertions(+), 43 deletions(-) diff --git a/apps/red-ui/src/app/models/file/file.ts b/apps/red-ui/src/app/models/file/file.ts index 88aac7a6d..01c718e09 100644 --- a/apps/red-ui/src/app/models/file/file.ts +++ b/apps/red-ui/src/app/models/file/file.ts @@ -43,7 +43,7 @@ export class File implements IFile, IListable { readonly excludedPages?: number[]; readonly hasSuggestions: boolean; - primaryAttribute: string; + readonly primaryAttribute: string; lastOpened: boolean; readonly statusSort: number; readonly cacheIdentifier: string; @@ -61,7 +61,7 @@ export class File implements IFile, IListable { readonly isWorkable: boolean; readonly canBeOCRed: boolean; - constructor(file: IFile, public reviewerName: string, fileAttributesConfig?: FileAttributesConfig) { + constructor(file: IFile, readonly reviewerName: string, fileAttributesConfig?: FileAttributesConfig) { this.added = file.added; this.allManualRedactionsApplied = !!file.allManualRedactionsApplied; this.analysisDuration = file.analysisDuration; diff --git a/apps/red-ui/src/app/modules/dossier/dossiers.module.ts b/apps/red-ui/src/app/modules/dossier/dossiers.module.ts index c4b617945..dffaa52ad 100644 --- a/apps/red-ui/src/app/modules/dossier/dossiers.module.ts +++ b/apps/red-ui/src/app/modules/dossier/dossiers.module.ts @@ -80,7 +80,6 @@ const components = [ ]; const services = [ - DossiersService, DossiersDialogService, AnnotationActionsService, ManualAnnotationService, diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.html b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.html index 48847222d..8bcc76779 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.html +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.html @@ -6,11 +6,11 @@ [subtitle]="'dossier-listing.stats.charts.dossiers' | translate" > -
+
-
{{ appStateService.totalAnalysedPages | number }}
+
{{ stats.totalAnalyzedPages | number }}
@@ -18,7 +18,7 @@
-
{{ appStateService.totalPeople }}
+
{{ stats.totalPeople }}
diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.ts index dfaf1c60a..a8cc96cc8 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { DoughnutChartConfig } from '@shared/components/simple-doughnut-chart/simple-doughnut-chart.component'; -import { AppStateService } from '@state/app-state.service'; import { FilterService } from '@iqser/common-ui'; +import { DossiersService } from '../../services/dossiers.service'; @Component({ selector: 'redaction-dossiers-listing-details', @@ -13,5 +13,5 @@ export class DossiersListingDetailsComponent { @Input() dossiersChartData: DoughnutChartConfig[]; @Input() documentsChartData: DoughnutChartConfig[]; - constructor(readonly appStateService: AppStateService, readonly filterService: FilterService) {} + constructor(readonly filterService: FilterService, readonly dossiersService: DossiersService) {} } diff --git a/apps/red-ui/src/app/modules/dossier/services/dossiers.service.ts b/apps/red-ui/src/app/modules/dossier/services/dossiers.service.ts index bb948ad79..d90bbf2f3 100644 --- a/apps/red-ui/src/app/modules/dossier/services/dossiers.service.ts +++ b/apps/red-ui/src/app/modules/dossier/services/dossiers.service.ts @@ -1,6 +1,6 @@ import { Injectable, Injector } from '@angular/core'; import { DossierRequest, IDossier } from '@redaction/red-ui-http'; -import { EntitiesService, List, QueryParam } from '@iqser/common-ui'; +import { EntitiesService, List, QueryParam, RequiredParam, Validate } from '@iqser/common-ui'; import { Dossier } from '@state/model/dossier'; import { filter, map } from 'rxjs/operators'; import { TEMPORARY_INJECTOR } from './injector'; @@ -56,7 +56,8 @@ export class DossiersService extends EntitiesService { return dossierId ? super._getOne([dossierId]) : super.getAll(); } - createOrUpdate(dossier: DossierRequest): Promise { + @Validate() + createOrUpdate(@RequiredParam() dossier: DossierRequest): Promise { return this._post(dossier).toPromise(); } @@ -64,11 +65,13 @@ export class DossiersService extends EntitiesService { return this.getAll('deleted-dossiers').toPromise(); } - restore(dossierIds: List): Promise { + @Validate() + restore(@RequiredParam() dossierIds: List): Promise { return this._post(dossierIds, 'deleted-dossiers/restore').toPromise(); } - hardDelete(dossierIds: List): Promise { + @Validate() + hardDelete(@RequiredParam() dossierIds: List): Promise { const body = dossierIds.map(id => ({ key: 'dossierId', value: id })); return this.delete(body, 'deleted-dossiers/hard-delete', body).toPromise(); } diff --git a/apps/red-ui/src/app/state/app-state.service.ts b/apps/red-ui/src/app/state/app-state.service.ts index 016324236..ccd6bc37e 100644 --- a/apps/red-ui/src/app/state/app-state.service.ts +++ b/apps/red-ui/src/app/state/app-state.service.ts @@ -26,8 +26,6 @@ export interface AppState { activeFileId?: string; activeDossierTemplateId?: string; activeDictionaryType?: string; - totalAnalysedPages?: number; - totalPeople?: number; } @Injectable({ @@ -134,14 +132,6 @@ export class AppStateService { return this._appState.activeFileId; } - get totalAnalysedPages(): number | undefined { - return this._appState.totalAnalysedPages; - } - - get totalPeople(): number | undefined { - return this._appState.totalPeople; - } - private static _isFileOverviewRoute(event: Event) { return event instanceof ResolveStart && event.url.includes('/main/dossiers/') && event.url.includes('/file/'); } @@ -227,9 +217,6 @@ export class AppStateService { this._processFiles(dossier, fileData[dossierId], emitEvents); } } - - this._appState.dossiers = mappedDossiers; - this._computeStats(); } async reloadActiveFile() { @@ -247,8 +234,8 @@ export class AppStateService { const files = this.activeDossier?.files.map(file => (file.fileId === activeFile.fileId ? activeFile : file)); const newDossier = new Dossier(this.activeDossier, files); this._appState.dossiers = [...this._appState.dossiers.filter(d => d.dossierId !== newDossier.dossierId), newDossier]; + this._dossiersService.setEntities(this._appState.dossiers); - this._computeStats(); if (activeFile.lastProcessed !== oldProcessedDate) { this.fileReanalysed$.next(activeFile); } @@ -338,6 +325,7 @@ export class AppStateService { () => { const index = this.allDossiers.findIndex(p => p.id === dossier.id); this._appState.dossiers.splice(index, 1); + this._dossiersService.setEntities(this._appState.dossiers); }, () => this._toaster.error(_('dossier-listing.delete.delete-failed'), { params: dossier }) ); @@ -355,6 +343,7 @@ export class AppStateService { } this._appState.dossiers.push(foundDossier); + this._dossiersService.setEntities(this._appState.dossiers); this.dossierChanged$.next(foundDossier); return foundDossier; } catch (error) { @@ -659,8 +648,6 @@ export class AppStateService { }) ); - console.log(dictionaryData); - return forkJoin([typeObs, colorsObs]).pipe(map(() => dictionaryData)); } @@ -729,8 +716,7 @@ export class AppStateService { files.forEach(file => (file.lastOpened = file.fileId === lastOpenedFileId)); const newDossier = new Dossier(dossier, files); this._appState.dossiers = [...this._appState.dossiers.filter(d => d.dossierId !== dossier.dossierId), newDossier]; - - this._computeStats(); + this._dossiersService.setEntities(this._appState.dossiers); if (emitEvents) { fileReanalysedEvent.forEach(file => this.fileReanalysed$.next(file)); @@ -739,17 +725,4 @@ export class AppStateService { return files; } - - private _computeStats() { - let totalAnalysedPages = 0; - const totalPeople = new Set(); - - this.allDossiers.forEach(d => { - d.memberIds?.forEach(m => totalPeople.add(m)); - totalAnalysedPages += d.totalNumberOfPages; - }); - - this._appState.totalPeople = totalPeople.size; - this._appState.totalAnalysedPages = totalAnalysedPages; - } }