'use strict'; const React = require('react/addons'); const GameActions = require('../actions/GameActions'); const PureRenderMixin = React.addons.PureRenderMixin; const Clock = React.createClass({ propTypes: { io: React.PropTypes.object.isRequired, params: React.PropTypes.array.isRequired }, mixins: [PureRenderMixin], getInitialState() { const [_, time, inc] = this.props.params; return { white: time * 60, black: time * 60, inc: inc, countdown: null }; }, componentDidMount() { const io = this.props.io; io.on('countdown', data => this.setState({ [data.color]: data.time, countdown: data.color })); io.on('countdown-gameover', data => { this.setState({countdown: null}); GameActions.gameOver({ type: 'timeout', winner: data.color === 'black' ? 'White' : 'Black' }); }); }, render() { return ( ); } }); const Timer = React.createClass({ mixins: [PureRenderMixin], render() { const {time, color, countdown} = this.props; const min = Math.floor(time / 60); const sec = time % 60; const timeLeft = `${min}:${sec < 10 ? '0' + sec : sec}`; return (
  • {timeLeft}
  • ); } }); module.exports = Clock;