Clock.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. 'use strict';
  2. const React = require('react/addons');
  3. const PureRenderMixin = React.addons.PureRenderMixin;
  4. const Clock = React.createClass({
  5. propTypes: {
  6. io: React.PropTypes.object,
  7. params: React.PropTypes.array.isRequired
  8. },
  9. mixins: [PureRenderMixin],
  10. getInitialState() {
  11. let [_, time, inc] = this.props.params;
  12. return {
  13. white: time * 60,
  14. black: time * 60,
  15. inc: inc
  16. };
  17. },
  18. componentDidMount() {
  19. let io = this.props.io;
  20. io.on('countdown', data => this.setState({
  21. [data.color]: data.time
  22. }));
  23. io.on('countdown-gameover', data => {
  24. // GameStore.gameOver({
  25. // timeout: true,
  26. // winner: data.color === 'black' ? 'White' : 'Black'
  27. // });
  28. });
  29. },
  30. render() {
  31. return (
  32. <ul id="clock">
  33. <Timer color="white" time={this.state.white} />
  34. <Timer color="black" time={this.state.black} />
  35. </ul>
  36. );
  37. }
  38. });
  39. const Timer = React.createClass({
  40. mixins: [PureRenderMixin],
  41. render() {
  42. let min = Math.floor(this.props.time / 60);
  43. let sec = this.props.time % 60;
  44. let timeLeft = `${min}:${sec < 10 ? '0' + sec : sec}`;
  45. return <li className={this.props.color}>{timeLeft}</li>;
  46. }
  47. });
  48. module.exports = Clock;