import React from "react"; import _ from "lodash"; import { connect } from "react-redux"; import classNames from "classnames"; import ChessBoardSquare from "./chess-board-square"; class ChessBoard extends React.Component { componentWillMount() { const { gameId, store } = this.props; } getTurn() { const { store } = this.props; return store.getState().turn; } getBoard() { const { store } = this.props; return store.getState().board; } getPlayer() { const { store } = this.props; return store.getState().player; } files(rank) { const player = this.getPlayer(); switch (player) { case "white": return Object.keys(rank).sort(); case "black": return Object.keys(rank) .sort() .reverse(); } } ranks() { const board = this.getBoard(); const player = this.getPlayer(); switch (player) { case "white": return Object.keys(board).reverse(); case "black": return Object.keys(board); } } renderSquares() { const board = this.getBoard(); const { store, channel } = this.props; return _.map(this.ranks(), (rankId) => { const rank = this.getBoard()[rankId]; return _.map(this.files(rank), (fileId) => { return ( ); }); }); } get boardClass() { const turn = this.getTurn(); const player = this.getPlayer(); return classNames("board", turn + "-to-move", "player-is-" + player); } get rankLabels() { return [1, 2, 3, 4, 5, 6, 7, 8]; } get fileLabels() { return ["a", "b", "c", "d", "e", "f", "g", "h"]; } renderRankLabels() { return _.map(this.rankLabels, (rankLabel) => { return (
{rankLabel}
); }); } renderFileLabels() { return _.map(this.fileLabels, (fileLabel) => { return (
{fileLabel}
); }); } render() { return (
{this.renderRankLabels()}
{this.renderFileLabels()}
{this.renderSquares()}
); } } function mapStateToProps(state) { return { board: state.board, selectedSquare: state.selectedSquare, }; } export default connect(mapStateToProps)(ChessBoard);