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 <noreply@anthropic.com>
This commit is contained in:
Nuwan 2026-03-05 22:18:32 +05:30
parent 14e9834f72
commit 742ced69e0
1 changed files with 15 additions and 2 deletions

View File

@ -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) => {