Преглед изворни кода

update provider destory timing

ryoji-s пре 2 година
родитељ
комит
d446a4f61d
1 измењених фајлова са 9 додато и 4 уклоњено
  1. 9 4
      packages/editor/src/stores/use-collaborative-editor-mode.ts

+ 9 - 4
packages/editor/src/stores/use-collaborative-editor-mode.ts

@@ -34,9 +34,9 @@ export const useCollaborativeEditorMode = (
     ydoc?.destroy();
     setYdoc(null);
 
-    provider?.disconnect();
-    provider?.destroy();
-    setProvider(null);
+    // NOTICE: Destorying the provider leaves awareness in the other user's connection,
+    // so only awareness is destoryed here
+    provider?.awareness.destroy();
 
     // TODO: catch ydoc:sync:error GlobalSocketEventName.YDocSyncError
     socket.off(GlobalSocketEventName.YDocSync);
@@ -50,6 +50,11 @@ export const useCollaborativeEditorMode = (
       return;
     }
 
+    // NOTICE: Old provider destory at the time of ydoc setup,
+    // because the awareness destroying is not sync to other clients
+    provider?.destroy();
+    setProvider(null);
+
     const _ydoc = new Y.Doc();
     setYdoc(_ydoc);
   };
@@ -109,7 +114,7 @@ export const useCollaborativeEditorMode = (
   };
 
   useEffect(cleanupYDocAndProvider, [cPageId, pageId, provider, socket, ydoc]);
-  useEffect(setupYDoc, [ydoc]);
+  useEffect(setupYDoc, [provider, ydoc]);
   useEffect(setupProvider, [initialValue, pageId, provider, socket, userName, ydoc]);
   useEffect(attachYDocExtensionsToCodeMirror, [codeMirrorEditor, provider, ydoc]);
   useEffect(initializeEditor, [codeMirrorEditor, isInit, onOpenEditor, ydoc]);