Compare commits

..

4 Commits

Author SHA1 Message Date
semantic-release-bot
d9aadd1f81 chore(release): 2.8.3 [skip ci]
## [2.8.3](https://github.com/antialias/soroban-abacus-flashcards/compare/v2.8.2...v2.8.3) (2025-10-08)

### Bug Fixes

* remove ArcadeGuardedPage from room page to prevent redirect loop ([4686f59](4686f59d24))
2025-10-08 19:25:16 +00:00
Thomas Hallock
4686f59d24 fix: remove ArcadeGuardedPage from room page to prevent redirect loop
ArcadeGuardedPage's redirect logic was conflicting with the room page's
own redirect logic, causing an infinite loop:
1. Room page would redirect to /arcade if no roomData
2. /arcade would see active session and redirect back to /arcade/room
3. Loop repeats

Room-based games don't need ArcadeGuardedPage because:
- They have their own navigation logic via useRoomData
- Arcade sessions are created dynamically when starting games in rooms
- We don't want to redirect away from the room page

This fixes the infinite redirect loop when navigating to /arcade/room.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-08 14:24:29 -05:00
semantic-release-bot
1219539585 chore(release): 2.8.2 [skip ci]
## [2.8.2](https://github.com/antialias/soroban-abacus-flashcards/compare/v2.8.1...v2.8.2) (2025-10-08)

### Bug Fixes

* revert to showing only active players in room games ([87cc0b6](87cc0b64fb))
2025-10-08 16:55:40 +00:00
Thomas Hallock
87cc0b64fb fix: revert to showing only active players in room games
Reverted getRoomActivePlayers() to use getActivePlayers() instead of
getAllPlayers(). Room games should show only players marked isActive=true
from each room member, not all players regardless of status.

Behavior:
- Room mode: Active players from all room members
- Solo mode: Active players from current user

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-08 11:54:43 -05:00
4 changed files with 24 additions and 12 deletions

View File

@@ -1,3 +1,17 @@
## [2.8.3](https://github.com/antialias/soroban-abacus-flashcards/compare/v2.8.2...v2.8.3) (2025-10-08)
### Bug Fixes
* remove ArcadeGuardedPage from room page to prevent redirect loop ([4686f59](https://github.com/antialias/soroban-abacus-flashcards/commit/4686f59d245b2b502dc0764c223a5ce84bf1af44))
## [2.8.2](https://github.com/antialias/soroban-abacus-flashcards/compare/v2.8.1...v2.8.2) (2025-10-08)
### Bug Fixes
* revert to showing only active players in room games ([87cc0b6](https://github.com/antialias/soroban-abacus-flashcards/commit/87cc0b64fb5f3debaf1d2f122aecfefc62922fed))
## [2.8.1](https://github.com/antialias/soroban-abacus-flashcards/compare/v2.8.0...v2.8.1) (2025-10-08)

View File

@@ -2,7 +2,6 @@
import { useRouter } from 'next/navigation'
import { useEffect } from 'react'
import { ArcadeGuardedPage } from '@/components/ArcadeGuardedPage'
import { useRoomData } from '@/hooks/useRoomData'
import { MemoryPairsGame } from '../matching/components/MemoryPairsGame'
import { ArcadeMemoryPairsProvider } from '../matching/context/ArcadeMemoryPairsContext'
@@ -46,14 +45,14 @@ export default function RoomPage() {
}
// Render the appropriate game based on room's gameName
// Note: We don't use ArcadeGuardedPage here because room-based games
// have their own navigation logic via useRoomData
switch (roomData.gameName) {
case 'matching':
return (
<ArcadeGuardedPage>
<ArcadeMemoryPairsProvider>
<MemoryPairsGame />
</ArcadeMemoryPairsProvider>
</ArcadeGuardedPage>
<ArcadeMemoryPairsProvider>
<MemoryPairsGame />
</ArcadeMemoryPairsProvider>
)
// TODO: Add other games (complement-race, memory-quiz, etc.)

View File

@@ -51,8 +51,8 @@ export async function getActivePlayers(viewerId: string): Promise<Player[]> {
}
/**
* Get all players for all members in a room
* In room mode, ALL players from room members participate (isActive is ignored)
* Get active players for all members in a room
* Returns only players marked isActive=true from each room member
* Returns a map of userId -> Player[]
*/
export async function getRoomActivePlayers(roomId: string): Promise<Map<string, Player[]>> {
@@ -61,11 +61,10 @@ export async function getRoomActivePlayers(roomId: string): Promise<Map<string,
where: eq(schema.roomMembers.roomId, roomId),
})
// Fetch ALL players for each member (not just isActive ones)
// In room mode, the concept is "all players from all members participate"
// Fetch active players for each member (respects isActive flag)
const playerMap = new Map<string, Player[]>()
for (const member of members) {
const players = await getAllPlayers(member.userId)
const players = await getActivePlayers(member.userId)
playerMap.set(member.userId, players)
}

View File

@@ -1,6 +1,6 @@
{
"name": "soroban-monorepo",
"version": "2.8.1",
"version": "2.8.3",
"private": true,
"description": "Beautiful Soroban Flashcard Generator - Monorepo",
"workspaces": [