yjs.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233
  1. import { useCallback, useEffect } from 'react';
  2. import { useGlobalSocket } from '@growi/core/dist/swr';
  3. import { SocketEventName } from '~/interfaces/websocket';
  4. import { useCurrentPageYjsData } from '~/stores/yjs';
  5. export const useCurrentPageYjsDataEffect = (): void => {
  6. const { data: socket } = useGlobalSocket();
  7. const { updateHasRevisionBodyDiff, updateAwarenessStateSize } = useCurrentPageYjsData();
  8. const hasRevisionBodyDiffUpdateHandler = useCallback((hasRevisionBodyDiff: boolean) => {
  9. updateHasRevisionBodyDiff(hasRevisionBodyDiff);
  10. }, [updateHasRevisionBodyDiff]);
  11. const awarenessStateSizeUpdateHandler = useCallback(((awarenessStateSize: number) => {
  12. updateAwarenessStateSize(awarenessStateSize);
  13. }), [updateAwarenessStateSize]);
  14. useEffect(() => {
  15. if (socket == null) { return }
  16. socket.on(SocketEventName.YjsHasRevisionBodyDiffUpdated, hasRevisionBodyDiffUpdateHandler);
  17. socket.on(SocketEventName.YjsAwarenessStateSizeUpdated, awarenessStateSizeUpdateHandler);
  18. return () => {
  19. socket.off(SocketEventName.YjsHasRevisionBodyDiffUpdated, hasRevisionBodyDiffUpdateHandler);
  20. socket.off(SocketEventName.YjsAwarenessStateSizeUpdated, awarenessStateSizeUpdateHandler);
  21. };
  22. }, [socket, awarenessStateSizeUpdateHandler, hasRevisionBodyDiffUpdateHandler]);
  23. };