diff --git a/src/components/DrawTools.js b/src/components/DrawTools.js index a9d70f760dff8884b05deeca7b9044bdc999c37e..3de6eddbc6bd7478d33e7b8c49daeb2885646aca 100644 --- a/src/components/DrawTools.js +++ b/src/components/DrawTools.js @@ -252,14 +252,14 @@ class DrawTools extends Component { onDeleteStop={this._onEditDeleteStop} draw={{ circle: { - repeatMode: true, // allows using the tool again after finishing the previous shape + repeatMode: false, // allows using the tool again after finishing the previous shape shapeOptions: { color: "#f9f10c", opacity: 1 // affects the outline only. for some reason it wasn't at full opacity, so this is needed for more clarity } }, rectangle: { - repeatMode: true + repeatMode: false }, polygon: { repeatMode: true, diff --git a/src/components/LoginForm.js b/src/components/LoginForm.js index dbf1c833d38183336d0d372c975699694ed5db65..792758134619f071e1f3bcea1f1a41abf4d86073 100644 --- a/src/components/LoginForm.js +++ b/src/components/LoginForm.js @@ -1,13 +1,13 @@ -import React from 'react'; +import React from "react"; export class LoginForm extends React.Component { constructor(props) { super(props); this.state = { - errorMsg: '', - username: '', - password: '' + errorMsg: "", + username: "", + password: "" }; } @@ -38,11 +38,11 @@ export class LoginForm extends React.Component { e.preventDefault(); // Send login info to the server - fetch(`${process.env.REACT_APP_API_URL}/user/login`, { - method: 'POST', + fetch(`http://localhost:5000/user/login`, { + method: "POST", headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' + Accept: "application/json", + "Content-Type": "application/json" }, body: JSON.stringify({ name: name, @@ -69,47 +69,47 @@ export class LoginForm extends React.Component { }; componentDidMount() { - document.addEventListener('keyup', this.handleEsc); + document.addEventListener("keyup", this.handleEsc); } componentWillUnmount() { - document.removeEventListener('keyup', this.handleEsc); + document.removeEventListener("keyup", this.handleEsc); } render() { return ( - <div className='fade-main'> - <div className='sticky'> + <div className="fade-main"> + <div className="sticky"> <span - id='closeLoginFormX' - className='close' + id="closeLoginFormX" + className="close" onClick={this.handleView} > × </span> </div> - <div className='login'> + <div className="login"> <form onSubmit={this.handleLogin}> <h1>demo login</h1> <br /> <input - placeholder='Enter Username' - name='username' + placeholder="Enter Username" + name="username" value={this.state.username} onChange={this.handleChange} - id='loginUsernameInput' + id="loginUsernameInput" /> <br /> <input - placeholder='Enter password' - type='password' - name='password' + placeholder="Enter password" + type="password" + name="password" value={this.state.password} onChange={this.handleChange} - id='loginPasswordInput' + id="loginPasswordInput" /> <br /> - <button id='submitLoginButton' type='submit'> + <button id="submitLoginButton" type="submit"> login </button> <h2>{this.state.errorMsg}</h2> diff --git a/src/components/Player.js b/src/components/Player.js new file mode 100644 index 0000000000000000000000000000000000000000..15f7a7f48c7357e815c30134bd25c7b61b5c3984 --- /dev/null +++ b/src/components/Player.js @@ -0,0 +1,98 @@ +import React, { Component } from "react"; +import { Marker, Popup } from "react-leaflet"; + +class Player extends Component { + constructor(props) { + super(props); + this.state = { + players: null, + time: Date.now() + }; + } + + getPlayers() { + fetch( + "http://localhost:5000/tracking/players/" + this.props.currentGameId, + { + method: "GET", + headers: { + Authorization: "Bearer " + sessionStorage.getItem("token") + } + } + ) + .then(res => res.json()) // no brackets over res.json() or it breaks (what) + .then(data => { + // don't do anything if data is not an array, as it breaks the map function at render + if (Array.isArray(data)) { + this.setState({ + players: data + }); + } + }) + .catch(error => { + console.log(error); + }); + } + + componentDidMount() { + // update components every 10 seconds + this.interval = setInterval( + () => this.setState({ time: Date.now() }), + 10000 + ); + } + + shouldComponentUpdate(nextProps, nextState) { + // do not update component until players have been fetched and game ID is available + if (this.state.players === null) { + this.getPlayers(); + return false; + } else if (this.props.currentGameId === null) { + return false; + } else { + return true; + } + } + + componentDidUpdate() { + // check if game ID has changed + if (this.state.currentGameId !== this.props.currentGameId) { + this.setState({ + currentGameId: this.props.currentGameId + }); + } + } + + componentWillUnmount() { + clearInterval(this.interval); + } + + render() { + return ( + <div> + {this.state.players !== null && + this.state.players.map(player => { + return ( + <Marker + key={Math.random()} + position={player.coordinates} + factionId={player.factionId} + gamepersonId={player.gamepersonId} + gamepersonRole={player.gamepersonRole} + > + <Popup> + <b>factionId:</b> {player.factionId} + <br /> + <b>gamepersonId:</b> {player.gamepersonId} + <br /> + <b>gamepersonRole:</b> {player.gamepersonRole} + </Popup> + </Marker> + ); + })} + </div> + ); + } +} + +export default Player; diff --git a/src/components/RegisterForm.js b/src/components/RegisterForm.js index 56360b6f7c1565c49aa11d8ad7957ab156c35dce..3e14df125639550bcd6948bc38167c368c273929 100644 --- a/src/components/RegisterForm.js +++ b/src/components/RegisterForm.js @@ -1,14 +1,14 @@ -import React from 'react'; +import React from "react"; export class RegisterForm extends React.Component { constructor(props) { super(props); this.state = { - errorMsg: '', - username: '', - password: '', - password2: '' + errorMsg: "", + username: "", + password: "", + password2: "" }; } @@ -41,14 +41,14 @@ export class RegisterForm extends React.Component { e.preventDefault(); if (this.state.password !== this.state.password2) { - this.handleError('Passwords do not match'); + this.handleError("Passwords do not match"); } else { // Send register info to the server - fetch('http://localhost:5000/user/register', { - method: 'POST', + fetch("http://localhost:5000/user/register", { + method: "POST", headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' + Accept: "application/json", + "Content-Type": "application/json" }, body: JSON.stringify({ name: name, @@ -76,28 +76,28 @@ export class RegisterForm extends React.Component { }; componentDidMount() { - document.addEventListener('keyup', this.handleEsc); + document.addEventListener("keyup", this.handleEsc); } componentWillUnmount() { - document.removeEventListener('keyup', this.handleEsc); + document.removeEventListener("keyup", this.handleEsc); } render() { return ( - <div className='fade-main'> - <div className='sticky'> - <span className='close' onClick={this.handleView}> + <div className="fade-main"> + <div className="sticky"> + <span className="close" onClick={this.handleView}> × </span> </div> - <div className='login'> + <div className="login"> <form onSubmit={this.handleRegister}> <h1>register new user</h1> <br /> <input - placeholder='Enter Username' - name='username' + placeholder="Enter Username" + name="username" value={this.state.username} onChange={this.handleChange} autoFocus @@ -105,24 +105,24 @@ export class RegisterForm extends React.Component { /> <br /> <input - placeholder='Enter password' - type='password' - name='password' + placeholder="Enter password" + type="password" + name="password" value={this.state.password} onChange={this.handleChange} required /> <br /> <input - placeholder='Verify password' - type='password' - name='password2' + placeholder="Verify password" + type="password" + name="password2" value={this.state.password2} onChange={this.handleChange} required /> <br /> - <button type='submit'>register</button> + <button type="submit">register</button> <h2>{this.state.errorMsg}</h2> </form> </div> diff --git a/src/components/UserMap.js b/src/components/UserMap.js index ad20ffd4e6215faf4bb33610ac65e3b6a9460680..22dbbb66cc08c872820a108643cfc4e9e1fe6b73 100644 --- a/src/components/UserMap.js +++ b/src/components/UserMap.js @@ -1,6 +1,7 @@ import React, { Component } from "react"; import { Map, TileLayer, ZoomControl, Marker, Popup } from "react-leaflet"; import DrawTools from "./DrawTools.js"; +import Player from "./Player.js"; class UserMap extends Component { constructor(props) { @@ -111,7 +112,6 @@ class UserMap extends Component { .catch(error => { console.log(error); }); - console.log(this.state.geoJSONLayer); } componentWillUnmount() { @@ -190,6 +190,7 @@ class UserMap extends Component { </Popup> </Marker> )} + <Player currentGameId={this.state.currentGameId} /> </Map> ); }