1
0
mirror of https://github.com/danbee/chess synced 2025-03-04 08:39:06 +00:00

Refactor components that don't have internal state

This commit is contained in:
Daniel Barber 2018-04-13 13:16:52 -04:00
parent f19b30dfaf
commit 6ebc0a63cd
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8
4 changed files with 62 additions and 81 deletions

View File

@ -13,25 +13,28 @@ class ChessBoard extends React.Component {
const { gameId, store } = this.props; const { gameId, store } = this.props;
} }
getTurn() { get turn() {
const { store } = this.props; const { store } = this.props;
return store.getState().turn; return store.getState().turn;
} }
getBoard() { get board() {
const { store } = this.props; const { store } = this.props;
return store.getState().board; return store.getState().board;
} }
getPlayer() { get player() {
const { store } = this.props; const { store } = this.props;
return store.getState().player; return store.getState().player;
} }
files(rank) { get gameState() {
const player = this.getPlayer(); const { store } = this.props;
return store.getState().state;
}
switch (player) { files(rank) {
switch (this.player) {
case "white": case "white":
return Object.keys(rank).sort(); return Object.keys(rank).sort();
case "black": case "black":
@ -42,8 +45,8 @@ class ChessBoard extends React.Component {
} }
ranks() { ranks() {
const board = this.getBoard(); const board = this.board;
const player = this.getPlayer(); const player = this.player;
switch (player) { switch (player) {
case "white": case "white":
@ -54,11 +57,10 @@ class ChessBoard extends React.Component {
} }
renderSquares() { renderSquares() {
const board = this.getBoard();
const { store, channel } = this.props; const { store, channel } = this.props;
return _.map(this.ranks(), (rankId) => { return _.map(this.ranks(), (rankId) => {
const rank = this.getBoard()[rankId]; const rank = this.board[rankId];
return _.map(this.files(rank), (fileId) => { return _.map(this.files(rank), (fileId) => {
return ( return (
@ -66,7 +68,7 @@ class ChessBoard extends React.Component {
file={fileId} file={fileId}
key={fileId} key={fileId}
rank={rankId} rank={rankId}
piece={board[rankId][fileId]} piece={this.board[rankId][fileId]}
store={store} store={store}
channel={channel} channel={channel}
/> />
@ -76,15 +78,13 @@ class ChessBoard extends React.Component {
} }
get boardClass() { get boardClass() {
const turn = this.getTurn(); const turn = this.turn;
const player = this.getPlayer(); const player = this.player;
return classNames("board", turn + "-to-move", "player-is-" + player); return classNames("board", turn + "-to-move", "player-is-" + player);
} }
render() { render() {
const { store } = this.props;
return ( return (
<div className={this.boardClass}> <div className={this.boardClass}>
<RankLabels /> <RankLabels />
@ -94,7 +94,7 @@ class ChessBoard extends React.Component {
{this.renderSquares()} {this.renderSquares()}
</div> </div>
<GameState store={store} /> <GameState gameState={this.gameState} />
</div> </div>
); );
} }

View File

@ -1,26 +1,22 @@
import React from "react"; import React from "react";
import _ from "lodash"; import _ from "lodash";
class FileLabels extends React.Component { const FILE_LABELS = ["a", "b", "c", "d", "e", "f", "g", "h"];
get fileLabels() {
return ["a", "b", "c", "d", "e", "f", "g", "h"];
}
renderFileLabels() { const renderFileLabels = () => {
return _.map(this.fileLabels, (fileLabel) => { return _.map(FILE_LABELS, (fileLabel) => {
return (
<div key={fileLabel} className="board-label">{fileLabel}</div>
);
});
}
render() {
return ( return (
<div className="board-file-labels"> <div key={fileLabel} className="board-label">{fileLabel}</div>
{this.renderFileLabels()}
</div>
); );
} });
} };
const FileLabels = () => {
return (
<div className="board-file-labels">
{renderFileLabels()}
</div>
);
};
export default FileLabels; export default FileLabels;

View File

@ -1,37 +1,26 @@
import React from "react"; import React from "react";
import classNames from "classnames"; import classNames from "classnames";
class GameState extends React.Component { const GAME_STATES = {
get gameStates() { "checkmate": "Checkmate!",
return { "stalemate": "Stalemate",
"checkmate": "Checkmate!", "check": "Check",
"stalemate": "Stalemate", };
"check": "Check",
};
}
get gameState() { const friendlyGameState = (state) => {
const { store } = this.props; return GAME_STATES[state];
return store.getState().state; };
}
get friendlyGameState() { const gameStateClass = (state) => {
return this.gameStates[this.gameState]; return classNames("board-game-state", state);
} };
get gameStateClass() { const GameState = (props) => {
const state = this.gameState; return (
<div className={gameStateClass(props.gameState)}>
return classNames("board-game-state", state); {friendlyGameState(props.gameState)}
} </div>
);
render() { };
return (
<div className={this.gameStateClass}>
{this.friendlyGameState}
</div>
);
}
}
export default GameState; export default GameState;

View File

@ -1,26 +1,22 @@
import React from "react"; import React from "react";
import _ from "lodash"; import _ from "lodash";
class RankLabels extends React.Component { const RANK_LABELS = [1, 2, 3, 4, 5, 6, 7, 8];
get rankLabels() {
return [1, 2, 3, 4, 5, 6, 7, 8];
}
renderRankLabels() { const renderRankLabels = () => {
return _.map(this.rankLabels, (rankLabel) => { return _.map(RANK_LABELS, (rankLabel) => {
return (
<div key={rankLabel} className="board-label">{rankLabel}</div>
);
});
}
render() {
return ( return (
<div className="board-rank-labels"> <div key={rankLabel} className="board-label">{rankLabel}</div>
{this.renderRankLabels()}
</div>
); );
} });
} };
const RankLabels = () => {
return (
<div className="board-rank-labels">
{renderRankLabels()}
</div>
);
};
export default RankLabels; export default RankLabels;