CursorPane.js 913 B

123456789101112131415161718192021222324252627282930313233343536
  1. import React from "react";
  2. import Cursors from "../components/Cursors";
  3. import { useC2C } from "../hooks/useC2C";
  4. import { PanZoomRotateState } from "../components/PanZoomRotate";
  5. import { useRecoilValue } from "recoil";
  6. export const Board = ({ children, user, users }) => {
  7. const [c2c] = useC2C();
  8. const panZoomRotate = useRecoilValue(PanZoomRotateState);
  9. const onMouseMove = (e) => {
  10. const { top, left } = e.currentTarget.getBoundingClientRect();
  11. c2c.publish("cursorMove", {
  12. userId: user.id,
  13. pos: {
  14. x: (e.clientX - left) / panZoomRotate.scale,
  15. y: (e.clientY - top) / panZoomRotate.scale,
  16. },
  17. });
  18. };
  19. const onLeave = (e) => {
  20. c2c.publish("cursorOff", {
  21. userId: user.id,
  22. });
  23. };
  24. return (
  25. <div onMouseMove={onMouseMove} onMouseLeave={onLeave}>
  26. {children}
  27. <Cursors users={users} />
  28. </div>
  29. );
  30. };
  31. export default Board;