Newer
Older
pokemon-go-trade / static / html / src / pages / chose.js
import React, { Component } from 'react';
import * as ReactDOM from 'react-dom';
import * as queryString from 'query-string';
import PokemonList from '../components/pokemon-list';
import Menu from '../components/menu';

class App extends Component {
  constructor(props) {
    super(props);

    const params = queryString.parse(location.search);

    const { type } = params;
    const wantGroupId = params.want_group_id;

    this.state = {
      pokemonList: [],
      selectedPokemon: new Map(),
      type,
      wantGroupId,
    };
  }

  componentDidMount() {
    fetch('/api/available-pokemon')
      .then(response => response.json())
      .then((data) => {
        this.setState({ pokemonList: data.pokemons });
      });
  }

  render() {
    const {
      pokemonList, selectedPokemon, type, wantGroupId,
    } = this.state;

    const handleDoneClick = () => () => {
      const pokemons = [];
      selectedPokemon.forEach((pokemon) => {
        pokemons.push({
          id: pokemon.id,
          url: pokemon.url,
        });
      });
      fetch(`api/stored-pokemon?type=${type}&want-group-id=${wantGroupId}`, {
        method: 'POST',
        body: JSON.stringify(pokemons),
      }).then(() => {
        if (type === 'want') {
          window.location.href = '/want.html';
        } else {
          window.location.href = '/index.html';
        }
      });
    };

    const onSelectPokemon = (selected, url, id) => {
      if (selected) {
        selectedPokemon.set(id, { id, url });
      } else {
        selectedPokemon.delete(id);
      }
      this.setState({ selectedPokemon });
    };

    return (
      <div>
        <Menu />
        <PokemonList pokemonList={pokemonList} onSelectPokemon={onSelectPokemon} />
        <button type="button" style={{ fontSize: '10em' }} onClick={handleDoneClick()}>Done</button>
      </div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById('main'));