yjs-draft.ts 926 B

12345678910111213141516171819202122232425262728
  1. import { useCallback, useEffect } from 'react';
  2. import { useGlobalSocket } from '@growi/core/dist/swr';
  3. import type { CurrentPageYjsDraft } from '~/interfaces/page';
  4. import { SocketEventName } from '~/interfaces/websocket';
  5. import { useCurrentPageYjsDraft } from '~/stores/page';
  6. export const useYjsDraftEffect = (): void => {
  7. const { mutate: mutateeCurrentPageYjsDraft } = useCurrentPageYjsDraft();
  8. const { data: socket } = useGlobalSocket();
  9. const yjsDraftUpdateHandler = useCallback(((currentPageYjsDraft: CurrentPageYjsDraft) => {
  10. mutateeCurrentPageYjsDraft(currentPageYjsDraft);
  11. }), [mutateeCurrentPageYjsDraft]);
  12. useEffect(() => {
  13. if (socket == null) { return }
  14. socket.on(SocketEventName.YjsUpdated, yjsDraftUpdateHandler);
  15. return () => {
  16. socket.off(SocketEventName.YjsUpdated, yjsDraftUpdateHandler);
  17. };
  18. }, [mutateeCurrentPageYjsDraft, socket, yjsDraftUpdateHandler]);
  19. };