Merge branch 'RED-9722' into 'master'

RED-9722: split bulk remove-from-dict request into batches.

See merge request redactmanager/red-ui!594
This commit is contained in:
Dan Percic 2024-09-30 12:42:25 +02:00
commit cdf39fd838

View File

@ -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<IRemoveRedactionRequest>).length > maximumNumberEntries) {
const requests = body as List<IRemoveRedactionRequest>;
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,