aboutsummaryrefslogtreecommitdiff
path: root/src/server/websocket.ts
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2020-10-06 14:12:06 -0400
committerbobzel <zzzman@gmail.com>2020-10-06 14:12:06 -0400
commite66380d8a99c3ee61faeaaebf6e28395332e1d64 (patch)
tree925f74f8bc6a0d0a33f6b9d2383f6786b25a1648 /src/server/websocket.ts
parent82355dad8304a3264349734a94db13aa94bb277c (diff)
fixed list additions to be truly incremental to allow undo to work
Diffstat (limited to 'src/server/websocket.ts')
-rw-r--r--src/server/websocket.ts10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/server/websocket.ts b/src/server/websocket.ts
index 3687ef876..221a01308 100644
--- a/src/server/websocket.ts
+++ b/src/server/websocket.ts
@@ -271,14 +271,16 @@ export namespace WebSocket {
return typeof value === "string" ? value : value[0];
}
- function updateListField(socket: Socket, diff: Diff, results?: Transferable): void {
+ function updateListField(socket: Socket, diff: Diff, curListItems?: Transferable): void {
diff.diff.$set = diff.diff.$addToSet; // convert add to set to a query of the current fields, and then a set of the composition of the new fields with the old ones
delete diff.diff.$addToSet;
const updatefield = Array.from(Object.keys(diff.diff.$set))[0];
- const list = (results as any).fields?.[updatefield.replace("fields.", "")]?.fields;
+ const newListItems = diff.diff.$set[updatefield].fields;
+ const curList = (curListItems as any).fields?.[updatefield.replace("fields.", "")]?.fields;
const prelen = diff.diff.$set[updatefield].fields.length;
- list?.forEach((item: any) => !diff.diff.$set[updatefield].fields.some((x: any) => x.fieldId === item.fieldId) && diff.diff.$set[updatefield].fields.push(item));
- const sendBack = diff.diff.$set[updatefield].fields.length !== prelen;
+ let insInd = 0;
+ curList?.forEach((curItem: any) => !newListItems.some((newItem: any) => newItem.fieldId === curItem.fieldId) && newListItems.splice(insInd++, 0, curItem));
+ const sendBack = curList.length !== prelen;
Database.Instance.update(diff.id, diff.diff,
() => {
if (sendBack) {