From 3551771bd02cedfffea7623550198f964349cec6 Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Fri, 20 Jan 2023 20:30:58 +0200 Subject: [PATCH] RED-5994: update file statuses --- .../dossier-details.component.ts | 53 +++++++------------ .../translations/file-status-translations.ts | 5 +- apps/red-ui/src/assets/i18n/redact/de.json | 2 +- apps/red-ui/src/assets/i18n/redact/en.json | 2 +- apps/red-ui/src/assets/i18n/scm/de.json | 2 +- apps/red-ui/src/assets/i18n/scm/en.json | 2 +- libs/red-domain/src/lib/files/file.model.ts | 4 +- libs/red-domain/src/lib/files/types.ts | 22 ++++---- 8 files changed, 41 insertions(+), 51 deletions(-) diff --git a/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details/dossier-details.component.ts b/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details/dossier-details.component.ts index 0233c8e7a..422309a48 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details/dossier-details.component.ts +++ b/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details/dossier-details.component.ts @@ -1,4 +1,4 @@ -import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; import { DonutChartConfig, Dossier, @@ -25,9 +25,9 @@ import { } from '@iqser/common-ui'; import { workflowFileStatusTranslations } from '@translations/file-status-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { combineLatestWith, firstValueFrom, Observable } from 'rxjs'; +import { combineLatestWith, firstValueFrom } from 'rxjs'; import { DossierStatsService } from '@services/dossiers/dossier-stats.service'; -import { map } from 'rxjs/operators'; +import { map, tap } from 'rxjs/operators'; import { DossiersService } from '@services/dossiers/dossiers.service'; import { FilesMapService } from '@services/files/files-map.service'; import { ROLES } from '@users/roles'; @@ -36,8 +36,6 @@ interface DossierDetailsContext { needsWorkFilters: INestedFilter[] | undefined; dossier: Dossier; dossierStats: DossierStats; - filesChanged: boolean; - chartConfig: void; statusConfig: ProgressBarConfigModel[]; } @@ -45,9 +43,8 @@ interface DossierDetailsContext { selector: 'redaction-dossier-details', templateUrl: './dossier-details.component.html', styleUrls: ['./dossier-details.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush, }) -export class DossierDetailsComponent extends ContextComponent implements OnInit { +export class DossierDetailsComponent extends ContextComponent { @Input() dossierAttributes: DossierAttributeWithValue[]; @Output() readonly toggleCollapse = new EventEmitter(); @@ -56,15 +53,9 @@ export class DossierDetailsComponent extends ContextComponent(); readonly collapseTooltip = _('dossier-details.collapse'); readonly expandTooltip = _('dossier-details.expand'); - readonly needsWorkFilters$ = this.filterService.getFilterModels$('needsWorkFilters'); - readonly dossier$: Observable; - readonly dossierStats$: Observable; - readonly filesChanged$: Observable; - readonly chartConfig$: Observable; - readonly statusConfig$: Observable; chartConfig: DonutChartConfig[] = []; #currentChartSubtitleIndex = 0; - readonly #dossierId: string; + readonly #dossierId = getParam(DOSSIER_ID); constructor( private readonly _toaster: Toaster, @@ -76,32 +67,28 @@ export class DossierDetailsComponent extends ContextComponent this.#calculateChartConfig(stats)), + const dossier$ = _dossiersService.getEntityChanged$(this.#dossierId).pipe(shareLast()); + const filesChanged$ = _filesMapService.watchChanged$(this.#dossierId).pipe(shareLast()); + const dossierStats$ = dossierStatsService.watch$(this.#dossierId).pipe(shareLast()); + const dossierStatsWithEffects$ = dossierStats$.pipe( + combineLatestWith(filesChanged$), + tap(([stats]) => this.#calculateChartConfig(stats)), + map(([stats]) => stats), ); - this.statusConfig$ = this.dossierStats$.pipe(map(stats => this.#calculateStatusConfig(stats))); + const statusConfig$ = dossierStats$.pipe(map(stats => this.#calculateStatusConfig(stats))); + + super._initContext({ + needsWorkFilters: filterService.getFilterModels$('needsWorkFilters'), + dossier: dossier$, + dossierStats: dossierStatsWithEffects$, + statusConfig: statusConfig$, + }); } get managers() { return this._userService.all.filter(u => u.isManager).map(u => u.id); } - ngOnInit() { - super._initContext({ - needsWorkFilters: this.needsWorkFilters$, - dossier: this.dossier$, - dossierStats: this.dossierStats$, - filesChanged: this.filesChanged$, - chartConfig: this.chartConfig$, - statusConfig: this.statusConfig$, - }); - } - async assignOwner(user: User | string, dossier: Dossier) { const owner = typeof user === 'string' ? this._userService.find(user) : user; const dossierRequest: IDossierRequest = { ...dossier, ownerId: owner.id }; diff --git a/apps/red-ui/src/app/translations/file-status-translations.ts b/apps/red-ui/src/app/translations/file-status-translations.ts index 45866e2e6..c4ad99897 100644 --- a/apps/red-ui/src/app/translations/file-status-translations.ts +++ b/apps/red-ui/src/app/translations/file-status-translations.ts @@ -13,19 +13,20 @@ export const processingFileStatusTranslations: { [key in ProcessingFileStatus]: ANALYSE: _('file-status.analyse'), NER_ANALYZING: _('file-status.ner-analyzing'), PROCESSED: _('file-status.processed'), - DELETED: _('file-status.deleted'), ERROR: _('file-status.error'), FULLREPROCESS: _('file-status.full-reprocess'), FULL_PROCESSING: _('file-status.full-processing'), IMAGE_ANALYZING: _('file-status.image-analyzing'), INDEXING: _('file-status.indexing'), OCR_PROCESSING: _('file-status.ocr-processing'), + OCR_PROCESSING_QUEUED: _('file-status.ocr-processing'), PROCESSING: _('file-status.processing'), REPROCESS: _('file-status.reprocess'), SURROUNDING_TEXT_PROCESSING: _('file-status.processing'), UNPROCESSED: _('file-status.unprocessed'), PRE_PROCESSING: _('file-status.full-processing'), + PRE_PROCESSING_QUEUED: _('file-status.full-processing'), PRE_PROCESSED: _('file-status.processed'), - PRE_PROCESSING_FAILED: _('file-status.error'), TABLE_PARSING_ANALYZING: _('file-status.table-parsing-analyzing'), + FIGURE_DETECTION_ANALYZING: _('file-status.figure-detection-analyzing'), }; diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index 98edda09a..eaaee0c20 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -1414,8 +1414,8 @@ "file-status": { "analyse": "", "approved": "Genehmigt", - "deleted": "Gelöscht", "error": "Reanalyse erforderlich", + "figure-detection-analyzing": "", "full-processing": "", "full-reprocess": "Wird analysiert", "image-analyzing": "Bildanalyse", diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index 58423e52c..0a63da7f3 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -1414,8 +1414,8 @@ "file-status": { "analyse": "Analyzing", "approved": "Approved", - "deleted": "Deleted", "error": "Re-processing required", + "figure-detection-analyzing": "", "full-processing": "Processing", "full-reprocess": "Processing", "image-analyzing": "Image Analyzing", diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index f3124d89e..8b7372f39 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -1414,8 +1414,8 @@ "file-status": { "analyse": "", "approved": "Genehmigt", - "deleted": "Gelöscht", "error": "Reanalyse erforderlich", + "figure-detection-analyzing": "", "full-processing": "", "full-reprocess": "Wird analysiert", "image-analyzing": "Bildanalyse", diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 8595d6e30..f17ccbeb4 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -1414,8 +1414,8 @@ "file-status": { "analyse": "Analyzing", "approved": "Approved", - "deleted": "Deleted", "error": "Re-processing required", + "figure-detection-analyzing": "", "full-processing": "Processing", "full-reprocess": "Processing", "image-analyzing": "Image Analyzing", diff --git a/libs/red-domain/src/lib/files/file.model.ts b/libs/red-domain/src/lib/files/file.model.ts index 683eb6b9f..d9c2747b0 100644 --- a/libs/red-domain/src/lib/files/file.model.ts +++ b/libs/red-domain/src/lib/files/file.model.ts @@ -114,9 +114,7 @@ export class File extends Entity implements IFile { this.numberOfAnalyses = file.numberOfAnalyses; this.processingStatus = file.processingStatus; this.workflowStatus = file.workflowStatus; - this.isError = - this.processingStatus === ProcessingFileStatuses.ERROR || - this.processingStatus === ProcessingFileStatuses.PRE_PROCESSING_FAILED; + this.isError = this.processingStatus === ProcessingFileStatuses.ERROR; this.isUnprocessed = this.processingStatus === ProcessingFileStatuses.UNPROCESSED; this.numberOfPages = this.isError ? 0 : file.numberOfPages ?? 0; this.rulesVersion = file.rulesVersion; diff --git a/libs/red-domain/src/lib/files/types.ts b/libs/red-domain/src/lib/files/types.ts index 4b559e69d..d2f132aa4 100644 --- a/libs/red-domain/src/lib/files/types.ts +++ b/libs/red-domain/src/lib/files/types.ts @@ -14,37 +14,38 @@ export type WorkflowFileStatus = keyof typeof WorkflowFileStatuses; export const ProcessingFileStatuses = { ANALYSE: 'ANALYSE', - DELETED: 'DELETED', ERROR: 'ERROR', FULLREPROCESS: 'FULLREPROCESS', - FULL_PROCESSING: 'FULL_PROCESSING', IMAGE_ANALYZING: 'IMAGE_ANALYZING', INDEXING: 'INDEXING', NER_ANALYZING: 'NER_ANALYZING', + OCR_PROCESSING_QUEUED: 'OCR_PROCESSING_QUEUED', OCR_PROCESSING: 'OCR_PROCESSING', PROCESSED: 'PROCESSED', PROCESSING: 'PROCESSING', REPROCESS: 'REPROCESS', SURROUNDING_TEXT_PROCESSING: 'SURROUNDING_TEXT_PROCESSING', UNPROCESSED: 'UNPROCESSED', + FULL_PROCESSING: 'FULL_PROCESSING', + PRE_PROCESSING_QUEUED: 'PRE_PROCESSING_QUEUED', PRE_PROCESSING: 'PRE_PROCESSING', PRE_PROCESSED: 'PRE_PROCESSED', - PRE_PROCESSING_FAILED: 'PRE_PROCESSING_FAILED', + FIGURE_DETECTION_ANALYZING: 'FIGURE_DETECTION_ANALYZING', TABLE_PARSING_ANALYZING: 'TABLE_PARSING_ANALYZING', } as const; export type ProcessingFileStatus = keyof typeof ProcessingFileStatuses; export const isProcessingStatuses: List = [ - ProcessingFileStatuses.REPROCESS, + ProcessingFileStatuses.ANALYSE, ProcessingFileStatuses.FULLREPROCESS, + ProcessingFileStatuses.REPROCESS, ProcessingFileStatuses.SURROUNDING_TEXT_PROCESSING, ProcessingFileStatuses.OCR_PROCESSING, ProcessingFileStatuses.IMAGE_ANALYZING, ProcessingFileStatuses.NER_ANALYZING, ProcessingFileStatuses.INDEXING, ProcessingFileStatuses.PROCESSING, - ProcessingFileStatuses.ANALYSE, ProcessingFileStatuses.FULL_PROCESSING, ProcessingFileStatuses.PRE_PROCESSING, ProcessingFileStatuses.TABLE_PARSING_ANALYZING, @@ -52,13 +53,14 @@ export const isProcessingStatuses: List = [ export const isFullProcessingStatuses: List = [ ProcessingFileStatuses.ANALYSE, - ProcessingFileStatuses.DELETED, - ProcessingFileStatuses.UNPROCESSED, ProcessingFileStatuses.FULLREPROCESS, ProcessingFileStatuses.IMAGE_ANALYZING, ProcessingFileStatuses.NER_ANALYZING, + ProcessingFileStatuses.OCR_PROCESSING_QUEUED, ProcessingFileStatuses.OCR_PROCESSING, + ProcessingFileStatuses.UNPROCESSED, ProcessingFileStatuses.FULL_PROCESSING, + ProcessingFileStatuses.PRE_PROCESSING_QUEUED, ProcessingFileStatuses.PRE_PROCESSING, ProcessingFileStatuses.TABLE_PARSING_ANALYZING, ] as const; @@ -84,10 +86,12 @@ export const PROCESSING_STATES: ProcessingFileStatus[] = [ ProcessingFileStatuses.NER_ANALYZING, ProcessingFileStatuses.PROCESSING, ProcessingFileStatuses.SURROUNDING_TEXT_PROCESSING, - ProcessingFileStatuses.TABLE_PARSING_ANALYZING, ProcessingFileStatuses.FULL_PROCESSING, + ProcessingFileStatuses.PRE_PROCESSING_QUEUED, + ProcessingFileStatuses.PRE_PROCESSING, + ProcessingFileStatuses.TABLE_PARSING_ANALYZING, ]; export const PROCESSED_STATES: ProcessingFileStatus[] = [ProcessingFileStatuses.PROCESSED]; -export const OCR_STATES: ProcessingFileStatus[] = [ProcessingFileStatuses.OCR_PROCESSING]; +export const OCR_STATES: ProcessingFileStatus[] = [ProcessingFileStatuses.OCR_PROCESSING, ProcessingFileStatuses.OCR_PROCESSING_QUEUED];