From 9bd98a0c465ae615af37188763cbaf9148b996e9 Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Fri, 12 Nov 2021 13:21:36 +0200 Subject: [PATCH] remove file stats from dossier --- .../dossiers-listing/config.service.ts | 76 +++++++++++-------- apps/red-ui/src/app/utils/filter-utils.ts | 2 - .../lib/dossier-stats/dossier-stats.model.ts | 2 - .../src/lib/dossiers/dossier.model.ts | 24 ------ 4 files changed, 45 insertions(+), 59 deletions(-) diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/config.service.ts b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/config.service.ts index d929ebb50..f108f2a97 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/config.service.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/config.service.ts @@ -1,18 +1,12 @@ import { Injectable, TemplateRef } from '@angular/core'; -import { ButtonConfig, IFilterGroup, keyChecker, NestedFilter, TableColumnConfig } from '@iqser/common-ui'; +import { ButtonConfig, IFilterGroup, INestedFilter, keyChecker, NestedFilter, TableColumnConfig } from '@iqser/common-ui'; import { Dossier, StatusSorter, User } from '@red/domain'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { TranslateService } from '@ngx-translate/core'; import { UserPreferenceService } from '@services/user-preference.service'; import { UserService } from '@services/user.service'; import { fileStatusTranslations } from '../../translations/file-status-translations'; -import { - annotationFilterChecker, - dossierMemberChecker, - dossierStatusChecker, - dossierTemplateChecker, - RedactionFilterSorter, -} from '@utils/index'; +import { dossierMemberChecker, dossierTemplateChecker, RedactionFilterSorter } from '@utils/index'; import { workloadTranslations } from '../../translations/workload-translations'; import { AppStateService } from '@state/app-state.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; @@ -89,29 +83,27 @@ export class ConfigService { const filterGroups: IFilterGroup[] = []; entities?.forEach(entry => { - // all people entry.memberIds.forEach(f => allDistinctPeople.add(f)); - // Needs work - entry.files.forEach(file => { - allDistinctFileStatus.add(file.status); - if (file.analysisRequired) { - allDistinctNeedsWork.add('analysis'); - } - if (entry.hintsOnly) { - allDistinctNeedsWork.add('hint'); - } - if (entry.hasRedactions) { - allDistinctNeedsWork.add('redaction'); - } - if (entry.hasSuggestions) { - allDistinctNeedsWork.add('suggestion'); - } - if (entry.hasNone) { - allDistinctNeedsWork.add('none'); - } - }); - allDistinctDossierTemplates.add(entry.dossierTemplateId); + + if (!entry.stats) { + return; + } + + Object.keys(entry.stats?.fileCountPerWorkflowStatus).forEach(status => allDistinctFileStatus.add(status)); + + if (entry.stats.hasHintsNoRedactionsFilePresent) { + allDistinctNeedsWork.add('hint'); + } + if (entry.stats.hasRedactionsFilePresent) { + allDistinctNeedsWork.add('redaction'); + } + if (entry.stats.hasSuggestionsFilePresent) { + allDistinctNeedsWork.add('suggestion'); + } + if (entry.stats.hasNoFlagsFilePresent) { + allDistinctNeedsWork.add('none'); + } }); const statusFilters = [...allDistinctFileStatus].map( @@ -127,7 +119,7 @@ export class ConfigService { label: this._translateService.instant('filters.status'), icon: 'red:status', filters: statusFilters.sort((a, b) => StatusSorter[a.id] - StatusSorter[b.id]), - checker: dossierStatusChecker, + checker: this._dossierStatusChecker, }); const peopleFilters = [...allDistinctPeople].map( @@ -160,7 +152,7 @@ export class ConfigService { icon: 'red:needs-work', filterTemplate: needsWorkFilterTemplate, filters: needsWorkFilters.sort((a, b) => RedactionFilterSorter[a.id] - RedactionFilterSorter[b.id]), - checker: annotationFilterChecker, + checker: this._annotationFilterChecker, matchAll: true, }); @@ -206,4 +198,26 @@ export class ConfigService { return filterGroups; } + + private _dossierStatusChecker = (dossier: Dossier, filter: INestedFilter) => dossier.stats.fileCountPerWorkflowStatus[filter.id]; + + private _annotationFilterChecker = (dossier: Dossier, filter: INestedFilter) => { + switch (filter.id) { + // case 'analysis': { + // return stats.reanalysisRequired; + // } + case 'suggestion': { + return dossier.stats.hasSuggestionsFilePresent; + } + case 'redaction': { + return dossier.stats.hasRedactionsFilePresent; + } + case 'hint': { + return dossier.stats.hasHintsNoRedactionsFilePresent; + } + case 'none': { + return dossier.stats.hasNoFlagsFilePresent; + } + } + }; } diff --git a/apps/red-ui/src/app/utils/filter-utils.ts b/apps/red-ui/src/app/utils/filter-utils.ts index 5348dc015..1b08223df 100644 --- a/apps/red-ui/src/app/utils/filter-utils.ts +++ b/apps/red-ui/src/app/utils/filter-utils.ts @@ -73,8 +73,6 @@ export const annotationFilterChecker = (file: File, filter: INestedFilter) => { } }; -export const dossierStatusChecker = (dw: Dossier, filter: INestedFilter) => dw.hasStatus(filter.id); - export const dossierMemberChecker = (dw: Dossier, filter: INestedFilter) => dw.hasMember(filter.id); export const dossierTemplateChecker = (dw: Dossier, filter: INestedFilter) => dw.dossierTemplateId === filter.id; diff --git a/libs/red-domain/src/lib/dossier-stats/dossier-stats.model.ts b/libs/red-domain/src/lib/dossier-stats/dossier-stats.model.ts index e478f0b6f..a1cbcf188 100644 --- a/libs/red-domain/src/lib/dossier-stats/dossier-stats.model.ts +++ b/libs/red-domain/src/lib/dossier-stats/dossier-stats.model.ts @@ -13,7 +13,6 @@ export class DossierStats implements IDossierStats { readonly numberOfPages: number; readonly numberOfFiles: number; - readonly hasNone: boolean; readonly hasFiles: boolean; constructor(stats: IDossierStats) { @@ -28,7 +27,6 @@ export class DossierStats implements IDossierStats { this.numberOfPages = stats.numberOfPages; this.numberOfFiles = stats.numberOfFiles; - this.hasNone = !this.hasSuggestionsFilePresent && !this.hasRedactionsFilePresent && !this.hasHintsNoRedactionsFilePresent; this.hasFiles = this.numberOfFiles > 0; } } diff --git a/libs/red-domain/src/lib/dossiers/dossier.model.ts b/libs/red-domain/src/lib/dossiers/dossier.model.ts index 23f831db0..3165c5ad2 100644 --- a/libs/red-domain/src/lib/dossiers/dossier.model.ts +++ b/libs/red-domain/src/lib/dossiers/dossier.model.ts @@ -26,13 +26,6 @@ export class Dossier implements IDossier, IListable { readonly watermarkEnabled: boolean; readonly hasReviewers: boolean; - readonly reanalysisRequired = this.files.some(file => file.analysisRequired); - - readonly hintsOnly: boolean; - readonly hasRedactions: boolean; - readonly hasSuggestions: boolean; - readonly hasNone: boolean; - readonly stats$: Observable; private readonly _stats$: BehaviorSubject; @@ -57,23 +50,6 @@ export class Dossier implements IDossier, IListable { this._stats$ = new BehaviorSubject(stats); this.stats$ = this._stats$.asObservable(); - - let hintsOnly = false; - let hasRedactions = false; - let hasSuggestions = false; - let hasPendingOrProcessing = false; - - this.files.forEach(f => { - hintsOnly = hintsOnly || f.hintsOnly; - hasRedactions = hasRedactions || f.hasRedactions; - hasSuggestions = hasSuggestions || f.hasSuggestions; - hasPendingOrProcessing = hasPendingOrProcessing || f.isPending || f.isProcessing; - }); - - this.hintsOnly = hintsOnly; - this.hasRedactions = hasRedactions; - this.hasSuggestions = hasSuggestions; - this.hasNone = !this.hasSuggestions && !this.hasRedactions && !this.hintsOnly; } get id(): string {