fix: add hasAttemptedFetch flag to prevent premature redirect
The previous fix didn't fully resolve the race condition. When userId finished loading, there was a brief moment where: - isUserIdPending = false (userId loaded) - isLoading = false (fetch hasn't started yet) - roomData = null This triggered the redirect before the room fetch even began. Solution: - Added hasAttemptedFetch flag to track fetch attempt state - Updated isLoading to include: isUserIdPending || isLoading || (!!userId && !hasAttemptedFetch) - Now the page stays in loading state until we've both loaded userId AND attempted the room fetch This ensures we never redirect while a fetch is pending. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -35,17 +35,20 @@ export function useRoomData() {
|
||||
const [socket, setSocket] = useState<Socket | null>(null)
|
||||
const [roomData, setRoomData] = useState<RoomData | null>(null)
|
||||
const [isLoading, setIsLoading] = useState(false)
|
||||
const [hasAttemptedFetch, setHasAttemptedFetch] = useState(false)
|
||||
|
||||
// Fetch the user's current room
|
||||
useEffect(() => {
|
||||
if (!userId) {
|
||||
console.log('[useRoomData] No userId, clearing room data')
|
||||
setRoomData(null)
|
||||
setHasAttemptedFetch(false)
|
||||
return
|
||||
}
|
||||
|
||||
console.log('[useRoomData] Fetching current room for user:', userId)
|
||||
setIsLoading(true)
|
||||
setHasAttemptedFetch(false)
|
||||
|
||||
// Fetch current room data
|
||||
fetch('/api/arcade/rooms/current')
|
||||
@@ -72,11 +75,13 @@ export function useRoomData() {
|
||||
setRoomData(null)
|
||||
}
|
||||
setIsLoading(false)
|
||||
setHasAttemptedFetch(true)
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('[useRoomData] Failed to fetch room data:', error)
|
||||
setRoomData(null)
|
||||
setIsLoading(false)
|
||||
setHasAttemptedFetch(true)
|
||||
})
|
||||
}, [userId])
|
||||
|
||||
@@ -204,7 +209,8 @@ export function useRoomData() {
|
||||
|
||||
return {
|
||||
roomData,
|
||||
isLoading: isLoading || isUserIdPending, // Wait for both userId and room data
|
||||
// Loading if: userId is pending, currently fetching, or have userId but haven't tried fetching yet
|
||||
isLoading: isUserIdPending || isLoading || (!!userId && !hasAttemptedFetch),
|
||||
isInRoom: !!roomData,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user