Skip to content
Snippets Groups Projects
TaskItem.js 2.96 KiB
Newer Older
import React from "react";
Joni Laukka's avatar
Joni Laukka committed
class TaskItem extends React.Component {
  constructor(props) {
Joni Laukka's avatar
Joni Laukka committed
    super(props);
    this.state = {
      edit: false,
      selectedFactionId: "",
Joni Laukka's avatar
Joni Laukka committed
      factions: []
Joni Laukka's avatar
Joni Laukka committed
    };
Joni Laukka's avatar
Joni Laukka committed
  componentDidMount() {
Joni Laukka's avatar
Joni Laukka committed
    this.getFactionlist(this.props.gameId);
  }

Joni Laukka's avatar
Joni Laukka committed
  getFactionlist(gameId) {
    fetch(`${process.env.REACT_APP_API_URL}/game/${gameId}`, {
Joni Laukka's avatar
Joni Laukka committed
      method: "GET"
Joni Laukka's avatar
Joni Laukka committed
      .then(result => {
        if (!result.ok) {
          throw Error(result.responseText);
        } else {
          return result.json();
        }
      })
      .then(result => {
Joni Laukka's avatar
Joni Laukka committed
        this.setState({
          factions: result.factions,
          selectedFactionId: result.factions[0].factionId
Joni Laukka's avatar
Joni Laukka committed
        });
Joni Laukka's avatar
Joni Laukka committed
      })
      .catch(error => console.log(error));
Joni Laukka's avatar
Joni Laukka committed
  }

  onSaveSubmit = e => {
    e.preventDefault();
    this.props.onSave(this.props.task, this.state.selectedFactionId);
Joni Laukka's avatar
Joni Laukka committed
    this.setState({
      edit: false
Joni Laukka's avatar
Joni Laukka committed
    });
  };
Joni Laukka's avatar
Joni Laukka committed

  handleFactionChange = e => {
    this.setState({
      selectedFactionId: e.target.value
Joni Laukka's avatar
Joni Laukka committed
    });
Joni Laukka's avatar
Joni Laukka committed
  };
  onTaskDelete = e => {
    e.preventDefault();

    if (
      window.confirm(
        `Are you sure you want to delete task "${this.props.task.taskName}"`
      )
    ) {
      this.props.onDelete(this.props.task.taskId);
      this.setState({
        edit: false
      });
    }
Joni Laukka's avatar
Joni Laukka committed
  };
Joni Laukka's avatar
Joni Laukka committed
  render() {
    let factionlistItems = this.state.factions.map(faction => (
      <option key={faction.factionId} value={faction.factionId}>
        {faction.factionName}
      </option>
    ));
Joni Laukka's avatar
Joni Laukka committed
    return (
      <div className="tasklist-item">
Joni Laukka's avatar
Joni Laukka committed
        <div>
Joni Laukka's avatar
Joni Laukka committed
          <label>{this.props.task.taskName}</label>
Joni Laukka's avatar
Joni Laukka committed
        </div>
        <div>
Joni Laukka's avatar
Joni Laukka committed
          <label>{this.props.task.taskDescription}</label>
          <br />
          <label>
            Faction:{" "}
            {this.props.task.faction !== null
              ? this.props.task.faction.factionName
              : "Every faction"}
          </label>
          <br />
          {this.props.task.taskWinner !== null && (
            <label>Winner: {this.props.task.taskWinner.factionName}</label>
Joni Laukka's avatar
Joni Laukka committed
          )}
Joni Laukka's avatar
Joni Laukka committed
        </div>
        {this.props.task.taskIsActive && this.props.role === "admin" && (
          <button onClick={() => this.setState({ edit: !this.state.edit })}>
            {this.state.edit ? "Cancel" : "Set Winner"}
          </button>
Joni Laukka's avatar
Joni Laukka committed
        )}
        {this.state.edit && (
Joni Laukka's avatar
Joni Laukka committed
          <form onSubmit={this.onSaveSubmit}>
Joni Laukka's avatar
Joni Laukka committed
            <select
              value={this.state.selectedFactionId}
              onChange={e =>
                this.setState({ selectedFactionId: e.target.value })
              }
            >
              {factionlistItems}
Joni Laukka's avatar
Joni Laukka committed
            </select>
            <button type="submit">Save</button>
          </form>
Joni Laukka's avatar
Joni Laukka committed
        )}
        {this.props.role === "admin" && (
          <button
            onClick={this.onTaskDelete}
            style={{ backgroundColor: "red" }}
          >
            Delete
          </button>
        )}
Joni Laukka's avatar
Joni Laukka committed
      </div>
    );
  }
Joni Laukka's avatar
Joni Laukka committed
export default TaskItem;