MCPcopy Create free account
hub / github.com/codeaashu/claude-code / usePresence

Function usePresence

web/hooks/usePresence.ts:26–154  ·  view source on GitHub ↗
({ socket, sessionId, currentUser }: UsePresenceOptions)

Source from the content-addressed store, hash-verified

24// ─── Hook ─────────────────────────────────────────────────────────────────────
25
26export function usePresence({ socket, sessionId, currentUser }: UsePresenceOptions) {
27 const [presence, setPresence] = useState<PresenceState>(createPresenceState);
28 const typingTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
29 const isTypingRef = useRef(false);
30
31 useEffect(() => {
32 if (!socket) return;
33 const cleanup: Array<() => void> = [];
34
35 cleanup.push(
36 socket.on("presence_sync", (e) => {
37 setPresence((s) => presenceSyncUsers(s, e.users));
38 })
39 );
40
41 cleanup.push(
42 socket.on("session_state", (e) => {
43 setPresence((s) => presenceSyncUsers(s, e.users));
44 })
45 );
46
47 cleanup.push(
48 socket.on("user_joined", (e) => {
49 setPresence((s) => presenceAddUser(s, e.user));
50 })
51 );
52
53 cleanup.push(
54 socket.on("user_left", (e) => {
55 setPresence((s) => presenceRemoveUser(s, e.user.id));
56 })
57 );
58
59 cleanup.push(
60 socket.on("cursor_update", (e) => {
61 if (e.userId === currentUser.id) return; // skip own cursor
62 setPresence((s) =>
63 presenceUpdateCursor(s, e.userId, e.position, e.selectionStart, e.selectionEnd)
64 );
65 })
66 );
67
68 cleanup.push(
69 socket.on("typing_start", (e) => {
70 if (e.userId === currentUser.id) return;
71 setPresence((s) => presenceSetTyping(s, e.user.id, true));
72 })
73 );
74
75 cleanup.push(
76 socket.on("typing_stop", (e) => {
77 if (e.userId === currentUser.id) return;
78 setPresence((s) => presenceSetTyping(s, e.user.id, false));
79 })
80 );
81
82 return () => cleanup.forEach((off) => off());
83 }, [socket, currentUser.id]);

Callers 1

CollaborationProviderFunction · 0.90

Calls 11

presenceSyncUsersFunction · 0.90
presenceAddUserFunction · 0.90
presenceRemoveUserFunction · 0.90
presenceUpdateCursorFunction · 0.90
presenceSetTypingFunction · 0.90
onMethod · 0.80
forEachMethod · 0.80
valuesMethod · 0.80
sendMethod · 0.65
getMethod · 0.65
pushMethod · 0.45

Tested by

no test coverage detected