}
let still_waiting = null;
- if (Object.keys(this.props.players_judging).length) {
- still_waiting = [
- <p>
- Still waiting for the following players:
- </p>,
- <ul>
- {Object.keys(this.props.players_judging).map(player => {
- return (
- <li
- key={player}
- >
- {player}
- {this.props.players_judging[player] ?
- <span className="typing"/> : null }
- </li>
- );
- })}
- </ul>
- ];
+ const judging_players = Object.keys(this.props.players_judging);
+ if (judging_players.length) {
+ still_waiting = (
+ <div>
+ <p>
+ Still waiting for the following player
+ {judging_players.length > 1 ? 's' : '' }
+ :
+ </p>
+ <ul>
+ {judging_players.map(player => {
+ return (
+ <li
+ key={player}
+ >
+ {player}{' '}
+ <span className=
+ {this.props.players_judging[player].active ?
+ "typing active"
+ :
+ "typing idle"}>
+ <span>{'.'}</span><span>{'.'}</span><span>{'.'}</span>
+ </span>
+ </li>
+ );
+ })}
+ </ul>
+ </div>
+ );
}
if (this.props.players_judged.has(this.props.player.name)) {
}
let still_waiting = null;
- if (Object.keys(this.props.players_answering).length) {
- still_waiting = [
- <p>
- Still waiting for the following players:
- </p>,
- <ul>
- {Object.keys(this.props.players_answering).map(player => {
- return (
- <li
- key={player}
- >
- {player}
- {this.props.players_answering[player] ?
- <span className="typing"/> : null }
- </li>
- );
- })}
- </ul>
- ];
+ const answering_players = Object.keys(this.props.players_answering);;
+ if (answering_players.length) {
+ still_waiting = (
+ <div>
+ <p>
+ Still waiting for the following player
+ {answering_players.length > 1 ? 's' : ''}
+ :
+ </p>
+ <ul>
+ {answering_players.map(player => {
+ return (
+ <li
+ key={player}
+ >
+ {player}{' '}
+ <span className=
+ {this.props.players_answering[player].active ?
+ "typing active"
+ :
+ "typing idle"}>
+ <span>{'.'}</span><span>{'.'}</span><span>{'.'}</span>
+ </span>
+ </li>
+ );
+ })}
+ </ul>
+ </div>
+ );
}
if (this.props.players_answered.has(this.props.player.name)) {
}
set_player_answering(player) {
+ /* Set the player as actively answering now. */
this.setState({
players_answering: {
...this.state.players_answering,
[player]: {active: true}
}
});
+ /* And arrange to have them marked idle very shortly.
+ *
+ * Note: This timeout is intentionally very, very short. We only
+ * need it long enough that the browser has latched onto the state
+ * change to "active" above. We actually use a CSS transition
+ * delay to control the user-perceptible length of time after
+ * which an active player appears inactive.
+ */
+ setTimeout(() => {
+ this.setState({
+ players_answering: {
+ ...this.state.players_answering,
+ [player]: {active: false}
+ }
+ });
+ }, 100);
}
set_answering_idle(value) {
}
set_player_judging(player) {
+ /* Set the player as actively judging now. */
this.setState({
players_judging: {
...this.state.players_judging,
[player]: {active: true}
}
});
+ /* And arrange to have them marked idle very shortly.
+ *
+ * Note: This timeout is intentionally very, very short. We only
+ * need it long enough that the browser has latched onto the state
+ * change to "active" above. We actually use a CSS transition
+ * delay to control the user-perceptible length of time after
+ * which an active player appears inactive.
+ */
+ setTimeout(() => {
+ this.setState({
+ players_judging: {
+ ...this.state.players_judging,
+ [player]: {active: false}
+ }
+ });
+ }, 100);
+
}
set_judging_idle(value) {