@@ -21,8 +21,12 @@ function Canvas(props: {}): JSX.Element {
21
21
const contextParam = useSelector ( ( store : RootState ) => store . contextSlice ) ;
22
22
const roomCode = useSelector ( ( store : RootState ) => store . roomSlice . roomCode ) ;
23
23
const userName = useSelector ( ( store : RootState ) => store . roomSlice . userName ) ;
24
+ const userList = useSelector ( ( store : RootState ) => store . roomSlice . userList ) ;
25
+
24
26
//-------mouse tracking-------
27
+ console . log ( 'canvas is rendered' ) ;
25
28
29
+ //remote cursor data
26
30
const [ remoteCursor , setRemoteCursor ] = useState ( {
27
31
x : 0 ,
28
32
y : 0 ,
@@ -32,39 +36,36 @@ function Canvas(props: {}): JSX.Element {
32
36
33
37
const debounceSetPosition = debounce ( ( newX , newY ) => {
34
38
//emit socket event every 500ms when cursor moves
35
- // {{userName: x, y} {userName: x, y} }
36
- emitEvent ( 'cursorData' , roomCode , { x : newX , y : newY , userName } ) ;
37
- } , 500 ) ;
39
+ if ( userList . length > 1 )
40
+ emitEvent ( 'cursorData' , roomCode , { x : newX , y : newY , userName } ) ;
41
+ } , 100 ) ;
38
42
39
43
const handleMouseMove = ( e ) => {
40
44
debounceSetPosition ( e . clientX , e . clientY ) ;
41
45
} ;
42
46
43
- //listen to socket event
44
47
const socket = getSocket ( ) ;
45
48
if ( socket ) {
49
+ // console.log('setting up socket listener');
46
50
socket . on ( 'remote cursor data from server' , ( remoteData ) => {
47
- //update user name
48
- if ( remoteCursor . remoteUserName === '' )
49
- setRemoteCursor ( ( prevState ) => ( {
50
- ...prevState ,
51
- remoteUserName : remoteData . userName
52
- } ) ) ;
53
- //update isVisible
54
- if ( remoteCursor . isVisible === false )
55
- setRemoteCursor ( ( prevState ) => ( {
56
- ...prevState ,
57
- isVisible : true
58
- } ) ) ;
59
- //update coords
60
- setRemoteCursor ( ( prevState ) => ( {
61
- ...prevState ,
62
- x : remoteData . x ,
63
- y : remoteData . y
64
- } ) ) ;
51
+ setRemoteCursor ( ( prevState ) => {
52
+ // check if the received data is different from the current state
53
+ if ( prevState . x !== remoteData . x || prevState . y !== remoteData . y ) {
54
+ return {
55
+ ...prevState ,
56
+ x : remoteData . x ,
57
+ y : remoteData . y ,
58
+ remoteUserName : remoteData . userName ,
59
+ isVisible : true
60
+ } ;
61
+ }
62
+ // if data is the same, return the previous state to prevent re-render
63
+ return prevState ;
64
+ } ) ;
65
65
} ) ;
66
66
}
67
- //----------------
67
+
68
+ //--------------------------------
68
69
69
70
// find the current component based on the canvasFocus component ID in the state
70
71
const currentComponent : Component = state . components . find (
0 commit comments