Skip to content
Snippets Groups Projects
requests.js 4.64 KiB
Newer Older

let pokemonTypes = {};
let pokemonTrainers = {};
let tableParentId = 'table';
let detailsParentId = 'details';

function getRowId(resource) {
    return `${resource.id}_row`
}

function updateDetails(pokemonTypeId) {
    const pt = pokemonTypes?.data?.find(item => item.id === pokemonTypeId);
    const parent = document.getElementById(detailsParentId);

    parent.innerHTML = `
    <div class="card" id="${pt.id}_card">
      <img src="${pt.imgUrl}" class="card-img-top" alt="${pt.classification}">
      <div class="card-body">
        <h5 class="card-title">${pt.name} #${pt.pokedexNumber}</h5>
        <p class="card-text">
            Japanese name: ${pt.japaneseName} </br>
            Classification: ${pt.classification} </br>
            Abilities: ${pt.abilities?.join(", ") || "none"} </br>
            Type: ${pt.primaryType}${pt.secondaryType ? " , " + pt.secondaryType : ""}
        </p>
      </div>
    </div>
    `
}

function pokemonTypeToRow(pokemonType) {
    return `
    <tr id="${getRowId(pokemonType)}" onclick="updateDetails('${pokemonType?.id?.trim()}')">
        <th scope="row">${pokemonType.id}</th>
        <td>${pokemonType.name}</td>
        <td>#${pokemonType.pokedexNumber}</td>
        <td>${pokemonType.primaryType}</td>
        <td>${pokemonType.secondaryType || '-'}</td>
    </tr>
    `
}

function createPokemonTypesTable() {
    const tableParent = document.getElementById(tableParentId);
    tableParent.innerHTML = `
        <table class="table table-striped table-hover">
            <thead>
                <tr>
                    <th scope="col">ID</th>
                    <th scope="col">Name</th>
                    <th scope="col">Pokedex Number</th>
                    <th scope="col">Primary Type</th>
                    <th scope="col">Secondary Type</th>
                </tr>
            </thead>
            <tbody>
                ${
                    pokemonTypes.data.map(resource => `${pokemonTypeToRow(resource)}`).join("\n")
                    || "no data"
                }
            </tbody>
        </table>
    `
}

function createPokemonTrainersTable() {
    const tableParent = document.getElementById(tableParentId);
    tableParent.innerHTML = `
        <table class="table table-striped table-hover">
            <thead>
                <tr>
                    <th scope="col">ID</th>
                    <th scope="col">Name</th>
                    <th scope="col">Created</th>
                </tr>
            </thead>
            <tbody>
                ${
        pokemonTrainers.data.map(resource => `${pokemonTrainerToRow(resource)}`).join("\n")
        || "no data"
    }
            </tbody>
        </table>
    `
}

function pokemonTrainerToRow(pokemonTrainer) {
    return `
    <tr id="${getRowId(pokemonTrainer)}" onclick="updateDetailsTrainers('${pokemonTrainer?.id?.trim()}')">
        <th scope="row">${pokemonTrainer.id}</th>
        <td>${pokemonTrainer.name}</td>
        <td>#${pokemonTrainer.created}</td>
    </tr>
    `
}

function updateDetailsTrainers(trainerId) {
    const trainer = pokemonTrainers?.data?.find(item => item.id === trainerId);
    const parent = document.getElementById(detailsParentId);

    parent.innerHTML = `
    <div class="card" id="${trainer.id}_card">
      <img src="${trainer.profileUrl}" class="card-img-top" alt="${trainer.name}">
      <div class="card-body">
        <h5 class="card-title">${trainer.name}</h5>
        <p class="card-text">
            ID: ${trainer.id} </br>
            Created: ${trainer.created} </br>
            Last Update: ${trainer.lastUpDate}
        </p>
      </div>
    </div>
    `
}


function createTrainer() {
    const name = document.getElementById('trainerName').value;
    const profileUrl = document.getElementById('trainerProfileUrl').value;

    const trainer = {
        name: name,
        profileUrl: profileUrl
    };

    fetch('/pokemon/api/trainers', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify(trainer),
    })
        .then(response => response.json())
        .then(data => {
            console.log('Success:', data);
            // Refresh the trainers table
            fetch('/pokemon/api/trainers')
                .then(res => res.json())
                .then(data => {
                    pokemonTrainers = data;
                    createPokemonTrainersTable();
                })
                .catch(err => {
                    console.error(`Unable to fetch Pokemon Trainers: ${err.status}`);
                    console.error(err);
                });
        })
        .catch((error) => {
            console.error('Error:', error);
        });