From 742ced69e08f466ae40bd439880057cf2f515ba9 Mon Sep 17 00:00:00 2001 From: Nuwan Date: Thu, 5 Mar 2026 22:18:32 +0530 Subject: [PATCH] fix(32-01): resolve refreshCurrentSession initialization order Use ref pattern to access refreshCurrentSession in joinSession callback to avoid "Cannot access before initialization" temporal dead zone error Co-Authored-By: Claude Opus 4.5 --- jam-ui/src/hooks/useSessionModel.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/jam-ui/src/hooks/useSessionModel.js b/jam-ui/src/hooks/useSessionModel.js index 5883c718a..2a1ef7016 100644 --- a/jam-ui/src/hooks/useSessionModel.js +++ b/jam-ui/src/hooks/useSessionModel.js @@ -58,6 +58,10 @@ export default function useSessionModel(app, server, sessionScreen) { // Maintain function interface for backward compatibility const currentSessionIdRef = sessionIdRef; + // Ref to hold refreshCurrentSession for use in callbacks defined before it + // This avoids "Cannot access before initialization" errors + const refreshCurrentSessionRef = useRef(null); + const inSession = useCallback(() => { return sessionIdRef.current !== null; }, []); @@ -438,14 +442,18 @@ export default function useSessionModel(app, server, sessionScreen) { // Trigger session started event // $(document).trigger(EVENTS.SESSION_STARTED, {session: {id: sessionId}}); - refreshCurrentSession(true); + // Use ref to avoid "Cannot access before initialization" error + // refreshCurrentSession is defined later in the hook + if (refreshCurrentSessionRef.current) { + refreshCurrentSessionRef.current(true); + } } catch (error) { updateCurrentSession(null); } return deferred; }, - [alreadyInSession, currentSessionIdRef, inSession, refreshCurrentSession, resetRecordingState, updateCurrentSession] + [alreadyInSession, currentSessionIdRef, inSession, resetRecordingState, updateCurrentSession] ); // Set recording model (from useSessionLeave) @@ -612,6 +620,11 @@ export default function useSessionModel(app, server, sessionScreen) { [refreshCurrentSessionRest, sessionChanged] ); + // Keep ref updated for callbacks defined before refreshCurrentSession + useEffect(() => { + refreshCurrentSessionRef.current = refreshCurrentSession; + }, [refreshCurrentSession]); + // Track changes handler - debounced to prevent excessive session refreshes // Uses useDebounceCallback for stable timer (doesn't reset when deps change) const trackChanges = useDebounceCallback((header, payload) => {