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