mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
Dedupe patch operations by op and path
(cherry picked from commit f40639de86
)
This commit is contained in:

committed by
github-actions[bot]
![github-actions[bot]](/assets/img/avatar_default.png)
parent
95c635c451
commit
05c978bc62
@@ -351,7 +351,28 @@ function addOperationToList(body: JsonPatchOperationObject[], actionType, target
|
||||
newBody.push(makeOperationEntry({ op: JsonPatchOperationType.move, from: fromPath, path: targetPath }));
|
||||
break;
|
||||
}
|
||||
return newBody;
|
||||
return dedupeOperationEntries(newBody);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dedupe operation entries by op and path. This prevents processing unnecessary patches in a single PATCH request.
|
||||
*
|
||||
* @param body JSON patch operation object entries
|
||||
* @returns deduped JSON patch operation object entries
|
||||
*/
|
||||
function dedupeOperationEntries(body: JsonPatchOperationObject[]): JsonPatchOperationObject[] {
|
||||
const ops = new Map<string, any>();
|
||||
for (let i = body.length - 1; i >= 0; i--) {
|
||||
const patch = body[i].operation;
|
||||
const key = `${patch.op}-${patch.path}`;
|
||||
if (!ops.has(key)) {
|
||||
ops.set(key, patch);
|
||||
} else {
|
||||
body.splice(i, 1);
|
||||
}
|
||||
}
|
||||
|
||||
return body;
|
||||
}
|
||||
|
||||
function makeOperationEntry(operation) {
|
||||
|
Reference in New Issue
Block a user