import React from "react"; import _ from "lodash"; import $ from "jquery"; import { connect } from "react-redux"; import classNames from "classnames"; import socket from "../socket"; import { setPlayer, setGame, setGameId } from "../store/actions"; import ChessBoardSquare from "./chess-board-square"; class ChessBoard extends React.Component { componentWillMount() { const { gameId, store } = this.props; store.dispatch(setGameId(gameId)); $.ajax({ method: "GET", url: `/api/games/${gameId}` }) .then((data) => { store.dispatch(setPlayer(data.player)); store.dispatch(setGame(data)); }); this.channel = socket.channel("game:" + gameId, {}); this.channel.join() .receive("ok", resp => { console.log("Joined successfully", resp) }) .receive("error", resp => { console.log("Unable to join", resp) }); this.channel.on("game_update", data => { store.dispatch(setGame(data)); }); } 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; } renderFiles(rankId) { const { store } = this.props; const rank = this.getBoard()[rankId]; return _.map(this.files(rank), (fileId) => { return ( ); }); } renderRanks() { const board = this.getBoard(); return _.map(this.ranks(), (rankId) => { return ( {rankId} {this.renderFiles(rankId)} ); }); } 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); } } boardClass() { const turn = this.getTurn(); const player = this.getPlayer(); return classNames( "board", turn + "-to-move", "player-is-" + player ); } render() { return ( {this.renderRanks()}
a b c d e f g h
); } } function mapStateToProps(state) { return { board: state.board, selectedSquare: state.selectedSquare } } export default connect(mapStateToProps)(ChessBoard);