From afbb89c9c55ea397e3bde750cee6db2bb9b647a5 Mon Sep 17 00:00:00 2001 From: GuillaumeSD Date: Wed, 27 Mar 2024 00:27:01 +0100 Subject: [PATCH] feat : arrow up/down to go to end/start position --- .../goToLastPositionButton.tsx | 16 ++++++++++++++++ .../analysis/reviewPanelToolbar/index.tsx | 4 +++- src/sections/analysis/states.ts | 2 -- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/sections/analysis/reviewPanelToolbar/goToLastPositionButton.tsx b/src/sections/analysis/reviewPanelToolbar/goToLastPositionButton.tsx index 047ea80..7a5d1dc 100644 --- a/src/sections/analysis/reviewPanelToolbar/goToLastPositionButton.tsx +++ b/src/sections/analysis/reviewPanelToolbar/goToLastPositionButton.tsx @@ -3,6 +3,7 @@ import { Grid, IconButton, Tooltip } from "@mui/material"; import { useAtomValue } from "jotai"; import { boardAtom, gameAtom } from "../states"; import { useChessActions } from "@/hooks/useChessActions"; +import { useEffect } from "react"; export default function GoToLastPositionButton() { const { setPgn: setBoardPgn } = useChessActions(boardAtom); @@ -14,6 +15,21 @@ export default function GoToLastPositionButton() { const isButtonDisabled = boardHistory >= gameHistory; + useEffect(() => { + const onKeyDown = (e: KeyboardEvent) => { + if (e.key === "ArrowUp") { + if (isButtonDisabled) return; + setBoardPgn(game.pgn()); + } + }; + + window.addEventListener("keydown", onKeyDown); + + return () => { + window.removeEventListener("keydown", onKeyDown); + }; + }, [isButtonDisabled, setBoardPgn, game]); + return ( diff --git a/src/sections/analysis/reviewPanelToolbar/index.tsx b/src/sections/analysis/reviewPanelToolbar/index.tsx index ba59c61..39b7380 100644 --- a/src/sections/analysis/reviewPanelToolbar/index.tsx +++ b/src/sections/analysis/reviewPanelToolbar/index.tsx @@ -22,6 +22,8 @@ export default function ReviewPanelToolBar() { if (boardHistory.length === 0) return; if (e.key === "ArrowLeft") { undoBoardMove(); + } else if (e.key === "ArrowDown") { + resetBoard({ fen: getStartingFen({ game: board }) }); } }; @@ -30,7 +32,7 @@ export default function ReviewPanelToolBar() { return () => { window.removeEventListener("keydown", onKeyDown); }; - }, [undoBoardMove, boardHistory]); + }, [undoBoardMove, boardHistory, resetBoard, board]); return ( diff --git a/src/sections/analysis/states.ts b/src/sections/analysis/states.ts index 769d631..e9e01f2 100644 --- a/src/sections/analysis/states.ts +++ b/src/sections/analysis/states.ts @@ -10,8 +10,6 @@ export const currentPositionAtom = atom({}); export const boardOrientationAtom = atom(true); export const showBestMoveArrowAtom = atom(true); export const showPlayerMoveIconAtom = atom(true); -export const clickedSquaresAtom = atom([]); -export const playableSquaresAtom = atom([]); export const engineDepthAtom = atom(16); export const engineMultiPvAtom = atom(3);