RED-5994: update file statuses

This commit is contained in:
Dan Percic 2023-01-20 20:30:58 +02:00
parent e234ee19d1
commit 3551771bd0
8 changed files with 41 additions and 51 deletions

View File

@ -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<DossierDetailsContext> implements OnInit {
export class DossierDetailsComponent extends ContextComponent<DossierDetailsContext> {
@Input() dossierAttributes: DossierAttributeWithValue[];
@Output() readonly toggleCollapse = new EventEmitter();
@ -56,15 +53,9 @@ export class DossierDetailsComponent extends ContextComponent<DossierDetailsCont
readonly currentUser = getCurrentUser<User>();
readonly collapseTooltip = _('dossier-details.collapse');
readonly expandTooltip = _('dossier-details.expand');
readonly needsWorkFilters$ = this.filterService.getFilterModels$('needsWorkFilters');
readonly dossier$: Observable<Dossier>;
readonly dossierStats$: Observable<DossierStats>;
readonly filesChanged$: Observable<boolean>;
readonly chartConfig$: Observable<void>;
readonly statusConfig$: Observable<ProgressBarConfigModel[]>;
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<DossierDetailsCont
readonly translateChartService: TranslateChartService,
) {
super();
this.#dossierId = getParam(DOSSIER_ID);
this.dossier$ = _dossiersService.getEntityChanged$(this.#dossierId).pipe(shareLast());
this.dossierStats$ = dossierStatsService.watch$(this.#dossierId).pipe(shareLast());
this.filesChanged$ = _filesMapService.watchChanged$(this.#dossierId).pipe(shareLast());
this.chartConfig$ = this.dossierStats$.pipe(
combineLatestWith(this.filesChanged$),
map(([stats]) => 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 };

View File

@ -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'),
};

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -114,9 +114,7 @@ export class File extends Entity<IFile> 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;

View File

@ -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<ProcessingFileStatus> = [
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<ProcessingFileStatus> = [
export const isFullProcessingStatuses: List<ProcessingFileStatus> = [
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];