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:
parent
f19b30dfaf
commit
6ebc0a63cd
@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user