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); }); }