Skip to content

Commit 6d8c705

Browse files
Copilotmgierschdev
andcommitted
Fix UI state synchronization and End Game reset issues
Co-authored-by: mgierschdev <62764972+mgierschdev@users.noreply.github.com>
1 parent e5d99bf commit 6d8c705

File tree

3 files changed

+32
-7
lines changed

3 files changed

+32
-7
lines changed

frontend/src/app/_client_components/ChessGameWrapper.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ export default function ChessGameWrapper({gameInfo: initialGameInfo}: {gameInfo:
2424
});
2525
}
2626
}, [gameInfo]);
27+
28+
// Callback to update game info from child components
29+
const handleGameInfoUpdate = (newGameInfo: ChessGame) => {
30+
setGameInfo(newGameInfo);
31+
};
2732

2833
// Show loading state if game info isn't available yet
2934
if (!gameInfo) {
@@ -46,7 +51,11 @@ export default function ChessGameWrapper({gameInfo: initialGameInfo}: {gameInfo:
4651
</div>
4752

4853
<div className="right-panel">
49-
<RightSidePanel gameInfoProp={gameInfo} onBotModeChange={setIsBotMode} />
54+
<RightSidePanel
55+
gameInfoProp={gameInfo}
56+
onBotModeChange={setIsBotMode}
57+
onGameInfoUpdate={handleGameInfoUpdate}
58+
/>
5059
</div>
5160
</>
5261
);

frontend/src/app/_client_components/Chessboard.tsx

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919

2020
import {ChessService} from "@/app/_services/ChessService";
21-
import React, {useState} from "react";
21+
import React, {useState, useEffect} from "react";
2222
import ChessPieceCell from "@/app/_client_components/ChessPieceCell";
2323
import {ChessPieceType, Color, GameState} from "@/app/_models/enums";
2424
import {ChessPiece} from "@/app/_models/ChessPiece";
@@ -29,15 +29,26 @@ import PromotionModal from "@/app/_client_components/PromotionModal";
2929
let gameService: ChessService = new ChessService();
3030

3131
export default function Chessboard({gameInfo, isBotMode}: any) {
32-
let [chessboard, setChessboard] = useState(gameInfo.chessboard);
33-
let chessPieces = printChessBoard();
32+
let [chessboard, setChessboard] = useState(gameInfo?.chessboard || []);
3433
let [allowedPositions, setAllowedPositions ]= useState(new Set());
3534
let [selectedPiece, setSelectedPiece] = useState(-1);
36-
let [playerTurn, setPlayerTurn] = useState(gameInfo.turn);
37-
let [gameState, setGameState] = useState(gameInfo.gameState);
35+
let [playerTurn, setPlayerTurn] = useState(gameInfo?.turn);
36+
let [gameState, setGameState] = useState(gameInfo?.gameState);
3837
let [showPromotion, setShowPromotion] = useState(false);
3938
let [promotionMove, setPromotionMove] = useState<{source: Position, target: Position} | null>(null);
4039
let [isComputerThinking, setIsComputerThinking] = useState(false);
40+
let chessPieces = printChessBoard();
41+
42+
// Reset board state when gameInfo changes (e.g., when game ends/starts)
43+
useEffect(() => {
44+
if (gameInfo) {
45+
setChessboard(gameInfo.chessboard || []);
46+
setPlayerTurn(gameInfo.turn);
47+
setGameState(gameInfo.gameState);
48+
setSelectedPiece(-1);
49+
setAllowedPositions(new Set());
50+
}
51+
}, [gameInfo]);
4152

4253

4354
async function onCellClick(chessPiece: ChessPiece) {

frontend/src/app/_client_components/RightSidePanel.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {GameState} from "@/app/_models/enums";
88
// Game Service
99
let gameService: ChessService = new ChessService();
1010

11-
export default function RightSidePanel({gameInfoProp, onBotModeChange}: any) {
11+
export default function RightSidePanel({gameInfoProp, onBotModeChange, onGameInfoUpdate}: any) {
1212

1313
const [gameInfo, setGameInfo] = useState(gameInfoProp);
1414
const [isBotMode, setIsBotMode] = useState(false);
@@ -22,6 +22,11 @@ export default function RightSidePanel({gameInfoProp, onBotModeChange}: any) {
2222
response = await gameService.startGame();
2323
}
2424
setGameInfo(response);
25+
26+
// Notify parent component of the update
27+
if (onGameInfoUpdate) {
28+
onGameInfoUpdate(response);
29+
}
2530
}
2631

2732
function handleBotModeToggle() {

0 commit comments

Comments
 (0)