hackmd-draft-updated.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. import { useCallback, useEffect } from 'react';
  2. import { SocketEventName } from '~/interfaces/websocket';
  3. import { useIsHackmdDraftUpdatingInRealtime } from '~/stores/hackmd';
  4. import { useCurrentPageId } from '~/stores/page';
  5. import { useGlobalSocket } from '~/stores/websocket';
  6. export const useHackmdDraftUpdatedEffect = (): void => {
  7. const { data: currentPageId } = useCurrentPageId();
  8. const { mutate: mutateIsHackmdDraftUpdatingInRealtime } = useIsHackmdDraftUpdatingInRealtime();
  9. const { data: socket } = useGlobalSocket();
  10. const setIsHackmdDraftUpdatingInRealtime = useCallback((data) => {
  11. const { s2cMessagePageUpdated } = data;
  12. if (s2cMessagePageUpdated.pageId === currentPageId) {
  13. mutateIsHackmdDraftUpdatingInRealtime(true);
  14. }
  15. }, [currentPageId, mutateIsHackmdDraftUpdatingInRealtime]);
  16. // listen socket for hackmd saved
  17. useEffect(() => {
  18. if (socket == null) { return }
  19. socket.on(SocketEventName.EditingWithHackmd, setIsHackmdDraftUpdatingInRealtime);
  20. return () => {
  21. socket.off(SocketEventName.EditingWithHackmd, setIsHackmdDraftUpdatingInRealtime);
  22. };
  23. }, [setIsHackmdDraftUpdatingInRealtime, socket]);
  24. };