commit 933ba823d5f991b9ab1f66bd94262c181e9d0267 Author: GuillaumeSD <gsd.lfny@gmail.com> Date: Mon Apr 21 20:13:37 2025 +0200 fix : new chessjs version commit b9376bcbc718f6eaa9a0fd9caada6b957f73b85a Author: GuillaumeSD <gsd.lfny@gmail.com> Date: Mon Apr 21 19:34:12 2025 +0200 chore : chessjs bump version
70 lines
2.0 KiB
TypeScript
70 lines
2.0 KiB
TypeScript
import LoadGameButton from "../../loadGame/loadGameButton";
|
|
import { useCallback, useEffect } from "react";
|
|
import { useChessActions } from "@/hooks/useChessActions";
|
|
import {
|
|
boardAtom,
|
|
boardOrientationAtom,
|
|
evaluationProgressAtom,
|
|
gameAtom,
|
|
gameEvalAtom,
|
|
} from "../states";
|
|
import { useGameDatabase } from "@/hooks/useGameDatabase";
|
|
import { useAtomValue, useSetAtom } from "jotai";
|
|
import { Chess } from "chess.js";
|
|
import { useRouter } from "next/router";
|
|
import { getStartingFen } from "@/lib/chess";
|
|
|
|
export default function LoadGame() {
|
|
const router = useRouter();
|
|
const game = useAtomValue(gameAtom);
|
|
const { setPgn: setGamePgn } = useChessActions(gameAtom);
|
|
const { reset: resetBoard } = useChessActions(boardAtom);
|
|
const { gameFromUrl } = useGameDatabase();
|
|
const setEval = useSetAtom(gameEvalAtom);
|
|
const setBoardOrientation = useSetAtom(boardOrientationAtom);
|
|
const evaluationProgress = useAtomValue(evaluationProgressAtom);
|
|
|
|
const resetAndSetGamePgn = useCallback(
|
|
(pgn: string) => {
|
|
resetBoard({ fen: getStartingFen({ pgn }) });
|
|
setEval(undefined);
|
|
setBoardOrientation(true);
|
|
setGamePgn(pgn);
|
|
},
|
|
[resetBoard, setGamePgn, setEval, setBoardOrientation]
|
|
);
|
|
|
|
useEffect(() => {
|
|
const loadGame = async () => {
|
|
if (!gameFromUrl) return;
|
|
|
|
const gamefromDbChess = new Chess();
|
|
gamefromDbChess.loadPgn(gameFromUrl.pgn);
|
|
if (game.history().join() === gamefromDbChess.history().join()) return;
|
|
|
|
resetAndSetGamePgn(gameFromUrl.pgn);
|
|
setEval(gameFromUrl.eval);
|
|
};
|
|
|
|
loadGame();
|
|
}, [gameFromUrl, game, resetAndSetGamePgn, setEval]);
|
|
|
|
const isGameLoaded =
|
|
gameFromUrl !== undefined ||
|
|
(!!game.getHeaders().White && game.getHeaders().White !== "?") ||
|
|
game.history().length > 0;
|
|
|
|
if (evaluationProgress) return null;
|
|
|
|
return (
|
|
<LoadGameButton
|
|
label={isGameLoaded ? "Load another game" : "Load game"}
|
|
size="small"
|
|
setGame={async (game) => {
|
|
await router.push("/");
|
|
resetAndSetGamePgn(game.pgn());
|
|
}}
|
|
/>
|
|
);
|
|
}
|