From 5bd6c7b9c78909c2cc0bb99aae8afc74c185c063 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sun, 2 Jun 2024 10:23:54 -0400 Subject: [PATCH] fix: Layout only changes not synced to content property --- package.json | 1 + server/commands/documentCollaborativeUpdater.ts | 3 ++- server/models/base/Model.ts | 2 +- server/queues/processors/RevisionsProcessor.ts | 7 ++++--- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 1e90ef051..2d313b955 100644 --- a/package.json +++ b/package.json @@ -111,6 +111,7 @@ "emoji-mart": "^5.6.0", "emoji-regex": "^10.3.0", "es6-error": "^4.1.1", + "fast-deep-equal": "^3.1.3", "fetch-retry": "^5.0.6", "fetch-with-proxy": "^3.0.1", "focus-visible": "^5.2.0", diff --git a/server/commands/documentCollaborativeUpdater.ts b/server/commands/documentCollaborativeUpdater.ts index 8f9340fbf..52d98ba94 100644 --- a/server/commands/documentCollaborativeUpdater.ts +++ b/server/commands/documentCollaborativeUpdater.ts @@ -1,4 +1,5 @@ import { yDocToProsemirrorJSON } from "@getoutline/y-prosemirror"; +import isEqual from "fast-deep-equal"; import uniq from "lodash/uniq"; import { Node } from "prosemirror-model"; import * as Y from "yjs"; @@ -45,7 +46,7 @@ export default async function documentCollaborativeUpdater({ const content = yDocToProsemirrorJSON(ydoc, "default") as ProsemirrorData; const node = Node.fromJSON(schema, content); const text = serializer.serialize(node, undefined); - const isUnchanged = document.text === text; + const isUnchanged = isEqual(document.content, content); const lastModifiedById = userId ?? document.lastModifiedById; if (isUnchanged) { diff --git a/server/models/base/Model.ts b/server/models/base/Model.ts index b434eb19a..df5301c09 100644 --- a/server/models/base/Model.ts +++ b/server/models/base/Model.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/ban-types */ +import isEqual from "fast-deep-equal"; import isArray from "lodash/isArray"; -import isEqual from "lodash/isEqual"; import isObject from "lodash/isObject"; import pick from "lodash/pick"; import { FindOptions, NonAttribute } from "sequelize"; diff --git a/server/queues/processors/RevisionsProcessor.ts b/server/queues/processors/RevisionsProcessor.ts index 5caa039b4..9dafe515e 100644 --- a/server/queues/processors/RevisionsProcessor.ts +++ b/server/queues/processors/RevisionsProcessor.ts @@ -1,3 +1,4 @@ +import isEqual from "fast-deep-equal"; import revisionCreator from "@server/commands/revisionCreator"; import { Revision, Document, User } from "@server/models"; import { DocumentEvent, RevisionEvent, Event } from "@server/types"; @@ -25,11 +26,11 @@ export default class RevisionsProcessor extends BaseProcessor { }); const previous = await Revision.findLatest(document.id); - // we don't create revisions if identical to previous revision, this can - // happen if a manual revision was created from another service or user. + // we don't create revisions if identical to previous revision, this can happen if a manual + // revision was created from another service or user. if ( previous && - document.text === previous.text && + isEqual(document.content, previous.content) && document.title === previous.title ) { return;