|
|
@@ -18,6 +18,7 @@ type UserLocalState = {
|
|
|
}
|
|
|
|
|
|
export const useCollaborativeEditorMode = (
|
|
|
+ isEnabled: boolean,
|
|
|
user?: IUserHasId,
|
|
|
pageId?: string,
|
|
|
initialValue?: string,
|
|
|
@@ -30,8 +31,9 @@ export const useCollaborativeEditorMode = (
|
|
|
|
|
|
const { data: socket } = useGlobalSocket();
|
|
|
|
|
|
- const cleanupYDoc = () => {
|
|
|
- if (cPageId === pageId) {
|
|
|
+ // Cleanup Ydoc
|
|
|
+ useEffect(() => {
|
|
|
+ if (cPageId === pageId && isEnabled) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -49,10 +51,11 @@ export const useCollaborativeEditorMode = (
|
|
|
|
|
|
// reset editors
|
|
|
onEditorsUpdated?.([]);
|
|
|
- };
|
|
|
+ }, [cPageId, isEnabled, onEditorsUpdated, pageId, provider?.awareness, socket, ydoc]);
|
|
|
|
|
|
- const setupYDoc = () => {
|
|
|
- if (ydoc != null) {
|
|
|
+ // Setup Ydoc
|
|
|
+ useEffect(() => {
|
|
|
+ if (ydoc != null || !isEnabled) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -63,9 +66,10 @@ export const useCollaborativeEditorMode = (
|
|
|
|
|
|
const _ydoc = new Y.Doc();
|
|
|
setYdoc(_ydoc);
|
|
|
- };
|
|
|
+ }, [isEnabled, provider, ydoc]);
|
|
|
|
|
|
- const setupProvider = () => {
|
|
|
+ // Setup provider
|
|
|
+ useEffect(() => {
|
|
|
if (provider != null || ydoc == null || socket == null || onEditorsUpdated == null) {
|
|
|
return;
|
|
|
}
|
|
|
@@ -104,9 +108,10 @@ export const useCollaborativeEditorMode = (
|
|
|
});
|
|
|
|
|
|
setProvider(socketIOProvider);
|
|
|
- };
|
|
|
+ }, [initialValue, onEditorsUpdated, pageId, provider, socket, user, ydoc]);
|
|
|
|
|
|
- const setupYDocExtensions = () => {
|
|
|
+ // Setup Ydoc Extensions
|
|
|
+ useEffect(() => {
|
|
|
if (ydoc == null || provider == null || codeMirrorEditor == null) {
|
|
|
return;
|
|
|
}
|
|
|
@@ -127,10 +132,5 @@ export const useCollaborativeEditorMode = (
|
|
|
cleanupYUndoManagerKeymap?.();
|
|
|
cleanupYCollab?.();
|
|
|
};
|
|
|
- };
|
|
|
-
|
|
|
- useEffect(cleanupYDoc, [cPageId, onEditorsUpdated, pageId, provider, socket, ydoc]);
|
|
|
- useEffect(setupYDoc, [provider, ydoc]);
|
|
|
- useEffect(setupProvider, [initialValue, onEditorsUpdated, pageId, provider, socket, user, ydoc]);
|
|
|
- useEffect(setupYDocExtensions, [codeMirrorEditor, provider, ydoc]);
|
|
|
+ }, [codeMirrorEditor, provider, ydoc]);
|
|
|
};
|