return SAN notation of last move

This commit is contained in:
2026-06-20 19:38:01 +02:00
parent 4d087777dd
commit 22c4e0d5fd
2 changed files with 16 additions and 17 deletions
+8 -14
View File
@@ -3,19 +3,16 @@ import { Chess } from 'chess.js';
export const ChessBoard = {
mounted() {
// Initialize chess.js for local rule validation
this.chess = new Chess();
// Initialize Chessground
this.ground = Chessground(this.el, {
fen: this.chess.fen(),
movable: {
color: 'white',
free: false, // Don't allow completely arbitrary drops
dests: this.getValidDests() // Only allow legal chess moves
free: false,
dests: this.getValidDests()
},
events: {
// Triggered when a piece is successfully dropped
move: (orig, dest, _metadata) => {
this.handleMove(orig, dest);
}
@@ -34,30 +31,27 @@ export const ChessBoard = {
},
handleMove(orig, dest) {
// 1. Try to execute the move in chess.js state
const move = this.chess.move({ from: orig, to: dest, promotion: 'q' });
if (move) {
// 2. Telemetry back up to Phoenix LiveView
const san = move.san
this.pushEvent("move_played", {
from: orig,
to: dest,
fen: this.chess.fen()
san: san,
fen: this.chess.fen()
});
// 3. Determine whose turn it is now ('w' or 'b')
const nextTurnColor = this.chess.turn() === 'w' ? 'white' : 'black';
// 4. Force Chessground to update its internal state for the next player
this.ground.set({
turnColor: nextTurnColor, // Switches turn tracking
turnColor: nextTurnColor,
movable: {
color: nextTurnColor, // 👈 THIS IS CRITICAL: Changes who is allowed to drag pieces!
dests: this.getValidDests() // Re-calculates valid legal squares for Black
color: nextTurnColor,
dests: this.getValidDests()
}
});
} else {
// If chess.js says it's an illegal move, snap the piece back instantly
this.ground.set({ fen: this.chess.fen() });
}
}