Просмотр исходного кода

Merge branch 'feat/sync-latest-revision-body-to-yjs-draft' into feat/149418-implement-an-api-client-to-request-sync-latest-revision-body-to-yjs-draft

Shun Miyazawa 1 год назад
Родитель
Сommit
d798c1b565

+ 2 - 9
apps/app/src/server/service/page/index.ts

@@ -67,6 +67,7 @@ import { preNotifyService } from '../pre-notify';
 import { BULK_REINDEX_SIZE, LIMIT_FOR_MULTIPLE_PAGE_OP } from './consts';
 import type { IPageService } from './page-service';
 import { shouldUseV4Process } from './should-use-v4-process';
+import { syncLatestRevisionBodyToYjsDraft } from './sync-latest-revision-body-to-yjs-draft';
 
 export * from './page-service';
 
@@ -4459,15 +4460,7 @@ class PageService implements IPageService {
   }
 
   async syncLatestRevisionBodyToYjsDraft(pageId: string): Promise<void> {
-    const yjsConnectionManager = getYjsConnectionManager();
-    await yjsConnectionManager.mdbInstance.clearDocument(pageId);
-
-    const Revision = mongoose.model<IRevisionHasId>('Revision');
-    const revision = await Revision.findOne({ pageId }).sort({ createdAt: -1 });
-
-    if (revision != null) {
-      await yjsConnectionManager.handleYDocUpdate(pageId, revision.body);
-    }
+    await syncLatestRevisionBodyToYjsDraft(pageId);
   }
 
   async hasRevisionBodyDiff(pageId: string, comparisonTarget?: string): Promise<boolean> {

+ 13 - 0
apps/app/src/server/service/page/sync-latest-revision-body-to-yjs-draft.ts

@@ -0,0 +1,13 @@
+import type { IRevisionHasId } from '@growi/core';
+import mongoose from 'mongoose';
+
+import { getYjsConnectionManager } from '~/server/service/yjs-connection-manager';
+
+export const syncLatestRevisionBodyToYjsDraft = async(pageId: string): Promise<void> => {
+  const yjsConnectionManager = getYjsConnectionManager();
+  const Revision = mongoose.model<IRevisionHasId>('Revision');
+  const revision = await Revision.findOne({ pageId }).sort({ createdAt: -1 });
+  if (revision != null) {
+    await yjsConnectionManager.handleYDocUpdate(pageId, revision.body);
+  }
+};

+ 1 - 0
apps/app/src/server/service/yjs-connection-manager.ts

@@ -103,6 +103,7 @@ class YjsConnectionManager {
     if (diff.reduce((prev, curr) => prev + curr, 0) > 0) {
       await this.mdb.storeUpdate(pageId, diff);
     }
+    Y.applyUpdate(currentYdoc, Y.encodeStateAsUpdate(persistedYdoc));
   }
 
   public getCurrentYdoc(pageId: string): Ydoc | undefined {