| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- import { useEffect } from 'react';
- import { useCurrentPageYjsDataActions } from '~/features/collaborative-editor/states';
- import { SocketEventName } from '~/interfaces/websocket';
- import { useIsGuestUser } from '~/states/context';
- import {
- useCurrentPageData,
- useCurrentPageId,
- usePageNotFound,
- } from '~/states/page';
- import { useGlobalSocket } from '~/states/socket-io';
- export const useCurrentPageYjsDataAutoLoadEffect = (): void => {
- const { fetchCurrentPageYjsData } = useCurrentPageYjsDataActions();
- const pageId = useCurrentPageId();
- const currentPage = useCurrentPageData();
- const isGuestUser = useIsGuestUser();
- const isNotFound = usePageNotFound(false);
- // Optimized effects with minimal dependencies
- useEffect(() => {
- // Load YJS data only when revision changes and page exists
- if (
- !isGuestUser &&
- pageId != null &&
- currentPage?.revision?._id != null &&
- !isNotFound
- ) {
- fetchCurrentPageYjsData();
- }
- }, [
- isGuestUser,
- currentPage?.revision?._id,
- fetchCurrentPageYjsData,
- isNotFound,
- pageId,
- ]);
- };
- export const useNewlyYjsDataSyncingEffect = (): void => {
- const socket = useGlobalSocket();
- const { updateHasYdocsNewerThanLatestRevision } =
- useCurrentPageYjsDataActions();
- useEffect(() => {
- if (socket == null) {
- // socket must be null if the user is a guest
- return;
- }
- socket.on(
- SocketEventName.YjsHasYdocsNewerThanLatestRevisionUpdated,
- updateHasYdocsNewerThanLatestRevision,
- );
- return () => {
- socket.off(
- SocketEventName.YjsHasYdocsNewerThanLatestRevisionUpdated,
- updateHasYdocsNewerThanLatestRevision,
- );
- };
- }, [socket, updateHasYdocsNewerThanLatestRevision]);
- };
- export const useAwarenessSyncingEffect = (): void => {
- const socket = useGlobalSocket();
- const { updateAwarenessStateSize } = useCurrentPageYjsDataActions();
- useEffect(() => {
- if (socket == null) {
- // socket must be null if the user is a guest
- return;
- }
- socket.on(
- SocketEventName.YjsAwarenessStateSizeUpdated,
- updateAwarenessStateSize,
- );
- return () => {
- socket.off(
- SocketEventName.YjsAwarenessStateSizeUpdated,
- updateAwarenessStateSize,
- );
- };
- }, [socket, updateAwarenessStateSize]);
- };
|