diff --git a/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts b/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts index f44e02c32..341bd7c8b 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts @@ -277,7 +277,6 @@ export class AnnotationActionsService { const text = annotation.AREA ? annotation.value : isImageText; const isApprover = this._permissionsService.isApprover(dossier); const dossierTemplate = this._dossierTemplatesService.find(this._state.dossierTemplateId); - const isUnprocessed = annotation.pending; const data: ResizeRedactionData = { redaction: annotation, @@ -308,7 +307,7 @@ export class AnnotationActionsService { await this.cancelResize(annotation); - const { fileId, dossierId, file } = this._state; + const { fileId, dossierId } = this._state; const request = this._manualRedactionService.resize([resizeRequest], dossierId, fileId, includeUnprocessed); return this.#processObsAndEmit(request); } @@ -471,6 +470,36 @@ export class AnnotationActionsService { // todo: might not be correct, probably shouldn't get to this point if they are not all the same const isHint = redactions.every(r => r.isHint); const { dossierId, fileId } = this._state; + const maximumNumberEntries = 100; + if (removeFromDictionary && (body as List).length > maximumNumberEntries) { + const requests = body as List; + const splitNumber = Math.floor(requests.length / maximumNumberEntries); + const remainder = requests.length % maximumNumberEntries; + const splitRequests = []; + for (let i = 0; i < splitNumber; i++) { + splitRequests.push(requests.slice(i * maximumNumberEntries, (i + 1) * maximumNumberEntries)); + } + splitRequests.push(requests.slice(splitNumber * maximumNumberEntries, splitNumber * maximumNumberEntries + remainder)); + + const promises = []; + for (const split of splitRequests) { + promises.push( + firstValueFrom( + this._manualRedactionService.removeRedaction( + split, + dossierId, + fileId, + removeFromDictionary, + isHint, + includeUnprocessed, + dialogResult.bulkLocal, + ), + ), + ); + } + Promise.all(promises).finally(() => this._fileDataService.annotationsChanged()); + return; + } this.#processObsAndEmit( this._manualRedactionService.removeRedaction( body,