fix : show current opening

This commit is contained in:
GuillaumeSD
2025-05-12 01:42:36 +02:00
parent 20a907812f
commit 15b3ca8996
4 changed files with 22 additions and 18 deletions

View File

@@ -14,6 +14,7 @@ import { useEngine } from "../../../hooks/useEngine";
import { EngineName } from "@/types/enums";
import { getEvaluateGameParams } from "@/lib/chess";
import { getMovesClassification } from "@/lib/engine/helpers/moveClassification";
import { openings } from "@/data/openings";
export const useCurrentPosition = (engineName?: EngineName) => {
const [currentPosition, setCurrentPosition] = useAtom(currentPositionAtom);
@@ -26,16 +27,17 @@ export const useCurrentPosition = (engineName?: EngineName) => {
const [savedEvals, setSavedEvals] = useAtom(savedEvalsAtom);
useEffect(() => {
const boardHistory = board.history({ verbose: true });
const position: CurrentPosition = {
lastMove: board.history({ verbose: true }).at(-1),
lastMove: boardHistory.at(-1),
};
const boardHistory = board.history();
const gameHistory = game.history();
if (
boardHistory.length <= gameHistory.length &&
gameHistory.slice(0, boardHistory.length).join() === boardHistory.join()
gameHistory.slice(0, boardHistory.length).join() ===
boardHistory.map((m) => m.san).join()
) {
position.currentMoveIdx = boardHistory.length;
@@ -59,6 +61,17 @@ export const useCurrentPosition = (engineName?: EngineName) => {
}
}
if (!position.eval?.opening) {
for (const move of boardHistory.toReversed()) {
const moveFen = move.after.split(" ")[0];
const opening = openings.find((opening) => opening.fen === moveFen);
if (opening) {
position.opening = opening.name;
break;
}
}
}
setCurrentPosition(position);
if (

View File

@@ -1,24 +1,14 @@
import { useState } from "react";
import { useCurrentPosition } from "../../hooks/useCurrentPosition";
import { useAtomValue } from "jotai";
import { Grid2 as Grid, Skeleton, Typography } from "@mui/material";
import { currentPositionAtom } from "../../states";
export default function Opening() {
const position = useCurrentPosition();
const [lastOpening, setLastOpening] = useState("");
const position = useAtomValue(currentPositionAtom);
const lastMove = position?.lastMove;
if (!lastMove && lastOpening) {
setLastOpening("");
}
if (!lastMove) return null;
const opening =
position?.eval?.opening && !position?.eval?.opening.includes("Unknown")
? position.eval.opening
: lastOpening;
if (opening && opening !== lastOpening) {
setLastOpening(opening);
}
const opening = position?.eval?.opening || position.opening;
if (!opening) {
return (