]> git.cworth.org Git - lmno.games/blobdiff - tictactoe/tictactoe.jsx
Add two buttons to allow the player to choose a team to join
[lmno.games] / tictactoe / tictactoe.jsx
index 498e708fbf9cc3d733517ff91215300952afee31..f1426ecff4f443c8837237fffd8caeef3f751153 100644 (file)
@@ -143,9 +143,9 @@ class Board extends React.Component {
   }
 }
 
   }
 }
 
-function fetch_post_json(api = '', data = {}) {
+function fetch_method_json(method, api = '', data = {}) {
   const response = fetch(api, {
   const response = fetch(api, {
-    method: 'POST',
+    method: method,
     headers: {
       'Content-Type': 'application/json'
     },
     headers: {
       'Content-Type': 'application/json'
     },
@@ -154,6 +154,14 @@ function fetch_post_json(api = '', data = {}) {
   return response;
 }
 
   return response;
 }
 
+function fetch_post_json(api = '', data = {}) {
+  return fetch_method_json('POST', api, data);
+}
+
+async function fetch_put_json(api = '', data = {}) {
+  return fetch_method_json('PUT', api, data);
+}
+
 class Game extends React.Component {
   constructor(props) {
     super(props);
 class Game extends React.Component {
   constructor(props) {
     super(props);
@@ -233,6 +241,10 @@ class Game extends React.Component {
     }
   }
 
     }
   }
 
+  join_team(team) {
+    fetch_put_json("player", {team: team});
+  }
+
   render() {
     const history = this.state.history;
     const current = history[this.state.step_number];
   render() {
     const history = this.state.history;
     const current = history[this.state.step_number];
@@ -247,15 +259,22 @@ class Game extends React.Component {
 
     return [
       <GameInfo
 
     return [
       <GameInfo
+        key="game-info"
         id={this.state.game_info.id}
         url={this.state.game_info.url}
       />,
       <PlayerInfo
         id={this.state.game_info.id}
         url={this.state.game_info.url}
       />,
       <PlayerInfo
+        key="player-info"
         id={this.state.player_info.id}
         name={this.state.player_info.name}
         team={this.state.player_info.team}
       />,
         id={this.state.player_info.id}
         name={this.state.player_info.name}
         team={this.state.player_info.team}
       />,
-      <div className="game">
+      <div key="game" className="game">
+        <button className="inline"
+                onClick={() => this.join_team('X')}>Join Team X</button>
+        &nbsp;
+        <button className="inline"
+                onClick={() => this.join_team('O')}>Join Team O</button>
         <div>{status}</div>
         <div className="game-board">
           <Board
         <div>{status}</div>
         <div className="game-board">
           <Board