From b985cfaf1bee9c92438bc68c8b73b19693a0c3ac Mon Sep 17 00:00:00 2001 From: Joni Laukka <jonilaukka@hotmail.com> Date: Mon, 15 Jul 2019 20:01:25 +0300 Subject: [PATCH] Role changes are saved to database --- src/components/PlayerlistFaction.js | 1 + src/components/PlayerlistPlayerCard.js | 102 ++++++++++++++++++++++--- src/components/PlayerlistView.js | 1 + 3 files changed, 94 insertions(+), 10 deletions(-) diff --git a/src/components/PlayerlistFaction.js b/src/components/PlayerlistFaction.js index 1d12d6a..b4e5ed6 100644 --- a/src/components/PlayerlistFaction.js +++ b/src/components/PlayerlistFaction.js @@ -31,6 +31,7 @@ export default class PlayerlistFaction extends React.Component { key={member.gamepersonId} player={member} role={this.props.role} + gameId={this.props.gameId} /> ); }); diff --git a/src/components/PlayerlistPlayerCard.js b/src/components/PlayerlistPlayerCard.js index c29944e..08d4562 100644 --- a/src/components/PlayerlistPlayerCard.js +++ b/src/components/PlayerlistPlayerCard.js @@ -2,21 +2,92 @@ import React, { Fragment } from "react"; export default class PlayerlistPlayerCard extends React.Component { state = { - edit: false + edit: false, + roleInput: this.props.player.role + }; + + handleSave = () => { + let token = sessionStorage.getItem("token"); + + if (this.state.roleInput === "") { + return alert("Error: Selected role is not valid"); + } + + if ( + window.confirm( + `Change ${this.props.player.person.name}'s role to "${ + this.state.roleInput + }"?` + ) + ) { + fetch( + `${process.env.REACT_APP_API_URL}/faction/promote/${this.props.gameId}`, + { + method: "PUT", + headers: { + Authorization: "Bearer " + token, + Accept: "application/json", + "Content-Type": "application/json" + }, + body: JSON.stringify({ + role: this.state.roleInput, + player: this.props.player.gamepersonId + }) + } + ) + .then(res => { + return res.json(); + }) + .then(res => { + alert( + `Player ${this.props.player.person.name}'s role was changed to "${ + res.role + }"` + ); + }) + .catch(error => console.log(error)); + } + + this.setState({ edit: false, roleInput: this.props.player.role }); }; render() { - console.log(this.props.player); + // Normal user view + if (this.props.role !== "admin") { + return ( + <div> + {this.props.player.person.name} : {this.props.player.role} + </div> + ); + } + + // Admin edit view + if (this.state.edit) { + return ( + <div> + {this.props.player.person.name} :{" "} + <select + value={this.state.roleInput} + onChange={e => this.setState({ roleInput: e.target.value })} + > + {roleOptions()} + </select> + <button onClick={this.handleSave}>Save</button> + <button + onClick={() => { + this.setState({ edit: false, roleInput: this.props.player.role }); + }} + > + Cancel + </button> + </div> + ); + } + + // Admin view without editing return ( <div> - {this.props.player.person.name} :{" "} - {this.state.edit && ( - <select> - <option value="soldier">Soldier</option> - <option value="factionleader">Faction Leader</option> - <option value="admin">Admin</option> - </select> - )} + {this.props.player.person.name} : {this.state.edit && roleOptions()} {!this.state.edit && this.props.player.role} {this.props.role === "admin" && !this.state.edit && ( <button onClick={() => this.setState({ edit: !this.state.edit })}> @@ -33,3 +104,14 @@ export default class PlayerlistPlayerCard extends React.Component { ); } } + +// Available options for user roles +function roleOptions() { + return ( + <Fragment> + <option value="soldier">Soldier</option> + <option value="factionleader">Faction Leader</option> + <option value="admin">Admin</option> + </Fragment> + ); +} diff --git a/src/components/PlayerlistView.js b/src/components/PlayerlistView.js index 1097820..0eff9bc 100644 --- a/src/components/PlayerlistView.js +++ b/src/components/PlayerlistView.js @@ -65,6 +65,7 @@ export default class PlayerlistView extends React.Component { key={faction.factionId} faction={faction} role={this.props.role} + gameId={this.props.gameId} /> ); }); -- GitLab