mirror of
https://github.com/danbee/chess
synced 2025-03-04 08:39:06 +00:00
60 lines
1.5 KiB
JavaScript
60 lines
1.5 KiB
JavaScript
import React from "react";
|
|
import $ from "jquery";
|
|
import classNames from "classnames";
|
|
|
|
import { movePiece, selectPiece } from "../store/actions";
|
|
|
|
class ChessBoardSquare extends React.Component {
|
|
constructor(props) {
|
|
super(props);
|
|
|
|
this.selectSquare = this.selectSquare.bind(this);
|
|
}
|
|
|
|
squareCoords() {
|
|
return { rank: this.props.rank, file: this.props.file };
|
|
}
|
|
|
|
selectSquare() {
|
|
var { store } = this.props;
|
|
|
|
if (store.getState().selectedSquare != null) {
|
|
store.dispatch(movePiece(store.getState().selectedSquare, this.squareCoords()));
|
|
$.ajax({ method: "PATCH", url: "/api/games/" + store.getState().gameId, data: { game: { board: store.getState().board } }});
|
|
}
|
|
else if (this.props.piece != undefined) {
|
|
store.dispatch(selectPiece(this.squareCoords()));
|
|
}
|
|
};
|
|
|
|
isSelectedSquare() {
|
|
var { store } = this.props;
|
|
|
|
if (store.getState().selectedSquare == null) {
|
|
return false;
|
|
}
|
|
else {
|
|
return this.squareCoords().rank == store.getState().selectedSquare.rank
|
|
&& this.squareCoords().file == store.getState().selectedSquare.file;
|
|
}
|
|
}
|
|
|
|
render() {
|
|
if (this.props.piece == undefined) {
|
|
var squareClass = "board-square";
|
|
}
|
|
else {
|
|
var squareClass = classNames(
|
|
"board-square",
|
|
this.props.piece.type,
|
|
this.props.piece.colour,
|
|
{ "selected": this.isSelectedSquare() }
|
|
)
|
|
}
|
|
|
|
return <div className={squareClass} onClick={this.selectSquare} />
|
|
}
|
|
}
|
|
|
|
export default ChessBoardSquare;
|