From 5742b780fe7d159c8a31e329ca60ba593aa3006d Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 19 May 2026 22:19:10 +0000 Subject: [PATCH] refactor(useDraftSocket): clean up reconnect event handling - Remove redundant reconnect_attempt listener: connect_error already sets isReconnecting(true), and connectionError is never set before reconnect_attempt fires, making that handler a no-op - Wrap reconnect_failed in an Error object so Sentry receives a proper exception with stack trace instead of a plain captureMessage string - Store handleReconnectFailed as a named reference so socket.io.off() removes only this listener rather than all reconnect_failed listeners https://claude.ai/code/session_01TpZ9W111Trkv2g4CkCWFpB --- app/hooks/useDraftSocket.ts | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/app/hooks/useDraftSocket.ts b/app/hooks/useDraftSocket.ts index b4564db..0fd4b22 100644 --- a/app/hooks/useDraftSocket.ts +++ b/app/hooks/useDraftSocket.ts @@ -72,17 +72,13 @@ export function useDraftSocket(seasonId: string, teamId?: string): UseDraftSocke setIsReconnecting(true); }); - socket.io.on("reconnect_attempt", () => { - logger.log("Attempting to reconnect..."); - setIsReconnecting(true); - setConnectionError(null); - }); - - socket.io.on("reconnect_failed", () => { - logger.error("Reconnection failed"); + const handleReconnectFailed = () => { + logger.error(new Error("Socket.IO reconnection failed after max attempts")); setConnectionError("Failed to reconnect. Please refresh the page."); setIsReconnecting(false); - }); + }; + + socket.io.on("reconnect_failed", handleReconnectFailed); const handleOffline = () => { // Mark as reconnecting immediately — the OS fires this before Socket.IO's @@ -119,8 +115,7 @@ export function useDraftSocket(seasonId: string, teamId?: string): UseDraftSocke document.addEventListener("visibilitychange", handleVisibilityChange); return () => { - socket.io.off("reconnect_attempt"); - socket.io.off("reconnect_failed"); + socket.io.off("reconnect_failed", handleReconnectFailed); window.removeEventListener("offline", handleOffline); window.removeEventListener("online", handleReturn); document.removeEventListener("visibilitychange", handleVisibilityChange);