mirror of
https://github.com/jcreek/LivingDexTracker.git
synced 2026-07-13 02:53:45 +00:00
feat(#19): Add a basic My Dex page
This commit is contained in:
@@ -32,5 +32,5 @@
|
|||||||
{#if imagePath}
|
{#if imagePath}
|
||||||
<img src={imagePath} alt="sprite" />
|
<img src={imagePath} alt="sprite" />
|
||||||
{:else}
|
{:else}
|
||||||
<p>Loading...</p>
|
<span class="loading loading-spinner loading-xs"></span>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
+26
-26
@@ -38,7 +38,7 @@
|
|||||||
"columnNumber": 3,
|
"columnNumber": 3,
|
||||||
"pokedexNumber": 3,
|
"pokedexNumber": 3,
|
||||||
"name": "Venusaur",
|
"name": "Venusaur",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 1,
|
"generation": 1,
|
||||||
"originGame": "Red/Blue/Yellow",
|
"originGame": "Red/Blue/Yellow",
|
||||||
"altOriginGame": "LG: Pikachu/Eevee",
|
"altOriginGame": "LG: Pikachu/Eevee",
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
"columnNumber": 1,
|
"columnNumber": 1,
|
||||||
"pokedexNumber": 6,
|
"pokedexNumber": 6,
|
||||||
"name": "Charizard",
|
"name": "Charizard",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 1,
|
"generation": 1,
|
||||||
"originGame": "Red/Blue/Yellow",
|
"originGame": "Red/Blue/Yellow",
|
||||||
"altOriginGame": "LG: Pikachu/Eevee",
|
"altOriginGame": "LG: Pikachu/Eevee",
|
||||||
@@ -143,7 +143,7 @@
|
|||||||
"columnNumber": 4,
|
"columnNumber": 4,
|
||||||
"pokedexNumber": 9,
|
"pokedexNumber": 9,
|
||||||
"name": "Blastoise",
|
"name": "Blastoise",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 1,
|
"generation": 1,
|
||||||
"originGame": "Red/Blue/Yellow",
|
"originGame": "Red/Blue/Yellow",
|
||||||
"altOriginGame": "LG: Pikachu/Eevee",
|
"altOriginGame": "LG: Pikachu/Eevee",
|
||||||
@@ -188,7 +188,7 @@
|
|||||||
"columnNumber": 1,
|
"columnNumber": 1,
|
||||||
"pokedexNumber": 12,
|
"pokedexNumber": 12,
|
||||||
"name": "Butterfree",
|
"name": "Butterfree",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 1,
|
"generation": 1,
|
||||||
"originGame": "Red/Blue/Yellow",
|
"originGame": "Red/Blue/Yellow",
|
||||||
"altOriginGame": "LG: Pikachu/Eevee",
|
"altOriginGame": "LG: Pikachu/Eevee",
|
||||||
@@ -1178,7 +1178,7 @@
|
|||||||
"columnNumber": 1,
|
"columnNumber": 1,
|
||||||
"pokedexNumber": 52,
|
"pokedexNumber": 52,
|
||||||
"name": "Meowth",
|
"name": "Meowth",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 1,
|
"generation": 1,
|
||||||
"originGame": "Blue",
|
"originGame": "Blue",
|
||||||
"altOriginGame": "LG: Eevee",
|
"altOriginGame": "LG: Eevee",
|
||||||
@@ -1523,7 +1523,7 @@
|
|||||||
"columnNumber": 6,
|
"columnNumber": 6,
|
||||||
"pokedexNumber": 68,
|
"pokedexNumber": 68,
|
||||||
"name": "Machamp",
|
"name": "Machamp",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 1,
|
"generation": 1,
|
||||||
"originGame": "Red/Blue/Yellow",
|
"originGame": "Red/Blue/Yellow",
|
||||||
"altOriginGame": "LG: Pikachu/Eevee",
|
"altOriginGame": "LG: Pikachu/Eevee",
|
||||||
@@ -2093,7 +2093,7 @@
|
|||||||
"columnNumber": 2,
|
"columnNumber": 2,
|
||||||
"pokedexNumber": 94,
|
"pokedexNumber": 94,
|
||||||
"name": "Gengar",
|
"name": "Gengar",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 1,
|
"generation": 1,
|
||||||
"originGame": "Red/Blue/Yellow",
|
"originGame": "Red/Blue/Yellow",
|
||||||
"altOriginGame": "LG: Pikachu/Eevee",
|
"altOriginGame": "LG: Pikachu/Eevee",
|
||||||
@@ -2183,7 +2183,7 @@
|
|||||||
"columnNumber": 2,
|
"columnNumber": 2,
|
||||||
"pokedexNumber": 99,
|
"pokedexNumber": 99,
|
||||||
"name": "Kingler",
|
"name": "Kingler",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 1,
|
"generation": 1,
|
||||||
"originGame": "Red/Blue/Yellow",
|
"originGame": "Red/Blue/Yellow",
|
||||||
"altOriginGame": "LG: Pikachu/Eevee",
|
"altOriginGame": "LG: Pikachu/Eevee",
|
||||||
@@ -2914,7 +2914,7 @@
|
|||||||
"columnNumber": 2,
|
"columnNumber": 2,
|
||||||
"pokedexNumber": 131,
|
"pokedexNumber": 131,
|
||||||
"name": "Lapras",
|
"name": "Lapras",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 1,
|
"generation": 1,
|
||||||
"originGame": "Red/Blue/Yellow",
|
"originGame": "Red/Blue/Yellow",
|
||||||
"altOriginGame": "LG: Pikachu/Eevee",
|
"altOriginGame": "LG: Pikachu/Eevee",
|
||||||
@@ -3109,7 +3109,7 @@
|
|||||||
"columnNumber": 3,
|
"columnNumber": 3,
|
||||||
"pokedexNumber": 143,
|
"pokedexNumber": 143,
|
||||||
"name": "Snorlax",
|
"name": "Snorlax",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 1,
|
"generation": 1,
|
||||||
"originGame": "Red/Blue/Yellow",
|
"originGame": "Red/Blue/Yellow",
|
||||||
"altOriginGame": "LG: Pikachu/Eevee",
|
"altOriginGame": "LG: Pikachu/Eevee",
|
||||||
@@ -11538,7 +11538,7 @@
|
|||||||
"columnNumber": 6,
|
"columnNumber": 6,
|
||||||
"pokedexNumber": 569,
|
"pokedexNumber": 569,
|
||||||
"name": "Garbodor",
|
"name": "Garbodor",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 5,
|
"generation": 5,
|
||||||
"originGame": "Black/White",
|
"originGame": "Black/White",
|
||||||
"altOriginGame": "Black 2/White 2",
|
"altOriginGame": "Black 2/White 2",
|
||||||
@@ -16428,7 +16428,7 @@
|
|||||||
"columnNumber": 1,
|
"columnNumber": 1,
|
||||||
"pokedexNumber": 810,
|
"pokedexNumber": 810,
|
||||||
"name": "Melmetal",
|
"name": "Melmetal",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": null,
|
"generation": null,
|
||||||
"originGame": "GO",
|
"originGame": "GO",
|
||||||
"altOriginGame": "",
|
"altOriginGame": "",
|
||||||
@@ -16473,7 +16473,7 @@
|
|||||||
"columnNumber": 4,
|
"columnNumber": 4,
|
||||||
"pokedexNumber": 813,
|
"pokedexNumber": 813,
|
||||||
"name": "Rillaboom",
|
"name": "Rillaboom",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 8,
|
"generation": 8,
|
||||||
"originGame": "Sword/Shield",
|
"originGame": "Sword/Shield",
|
||||||
"altOriginGame": "",
|
"altOriginGame": "",
|
||||||
@@ -16518,7 +16518,7 @@
|
|||||||
"columnNumber": 1,
|
"columnNumber": 1,
|
||||||
"pokedexNumber": 816,
|
"pokedexNumber": 816,
|
||||||
"name": "Cinderace",
|
"name": "Cinderace",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 8,
|
"generation": 8,
|
||||||
"originGame": "Sword/Shield",
|
"originGame": "Sword/Shield",
|
||||||
"altOriginGame": "",
|
"altOriginGame": "",
|
||||||
@@ -16563,7 +16563,7 @@
|
|||||||
"columnNumber": 4,
|
"columnNumber": 4,
|
||||||
"pokedexNumber": 819,
|
"pokedexNumber": 819,
|
||||||
"name": "Inteleon",
|
"name": "Inteleon",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 8,
|
"generation": 8,
|
||||||
"originGame": "Sword/Shield",
|
"originGame": "Sword/Shield",
|
||||||
"altOriginGame": "",
|
"altOriginGame": "",
|
||||||
@@ -16638,7 +16638,7 @@
|
|||||||
"columnNumber": 3,
|
"columnNumber": 3,
|
||||||
"pokedexNumber": 824,
|
"pokedexNumber": 824,
|
||||||
"name": "Corviknight",
|
"name": "Corviknight",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 8,
|
"generation": 8,
|
||||||
"originGame": "Sword/Shield",
|
"originGame": "Sword/Shield",
|
||||||
"altOriginGame": "",
|
"altOriginGame": "",
|
||||||
@@ -16683,7 +16683,7 @@
|
|||||||
"columnNumber": 6,
|
"columnNumber": 6,
|
||||||
"pokedexNumber": 827,
|
"pokedexNumber": 827,
|
||||||
"name": "Orbeetle",
|
"name": "Orbeetle",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 8,
|
"generation": 8,
|
||||||
"originGame": "Sword/Shield",
|
"originGame": "Sword/Shield",
|
||||||
"altOriginGame": "",
|
"altOriginGame": "",
|
||||||
@@ -16803,7 +16803,7 @@
|
|||||||
"columnNumber": 2,
|
"columnNumber": 2,
|
||||||
"pokedexNumber": 835,
|
"pokedexNumber": 835,
|
||||||
"name": "Drednaw",
|
"name": "Drednaw",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 8,
|
"generation": 8,
|
||||||
"originGame": "Sword/Shield",
|
"originGame": "Sword/Shield",
|
||||||
"altOriginGame": "",
|
"altOriginGame": "",
|
||||||
@@ -16878,7 +16878,7 @@
|
|||||||
"columnNumber": 1,
|
"columnNumber": 1,
|
||||||
"pokedexNumber": 840,
|
"pokedexNumber": 840,
|
||||||
"name": "Coalossal",
|
"name": "Coalossal",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 8,
|
"generation": 8,
|
||||||
"originGame": "Sword/Shield",
|
"originGame": "Sword/Shield",
|
||||||
"altOriginGame": "",
|
"altOriginGame": "",
|
||||||
@@ -16908,7 +16908,7 @@
|
|||||||
"columnNumber": 3,
|
"columnNumber": 3,
|
||||||
"pokedexNumber": 842,
|
"pokedexNumber": 842,
|
||||||
"name": "Flapple",
|
"name": "Flapple",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 8,
|
"generation": 8,
|
||||||
"originGame": "Sword",
|
"originGame": "Sword",
|
||||||
"altOriginGame": "",
|
"altOriginGame": "",
|
||||||
@@ -16923,7 +16923,7 @@
|
|||||||
"columnNumber": 4,
|
"columnNumber": 4,
|
||||||
"pokedexNumber": 843,
|
"pokedexNumber": 843,
|
||||||
"name": "Appletun",
|
"name": "Appletun",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 8,
|
"generation": 8,
|
||||||
"originGame": "Shield",
|
"originGame": "Shield",
|
||||||
"altOriginGame": "",
|
"altOriginGame": "",
|
||||||
@@ -16953,7 +16953,7 @@
|
|||||||
"columnNumber": 6,
|
"columnNumber": 6,
|
||||||
"pokedexNumber": 845,
|
"pokedexNumber": 845,
|
||||||
"name": "Sandaconda",
|
"name": "Sandaconda",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 8,
|
"generation": 8,
|
||||||
"originGame": "Sword/Shield",
|
"originGame": "Sword/Shield",
|
||||||
"altOriginGame": "",
|
"altOriginGame": "",
|
||||||
@@ -17073,7 +17073,7 @@
|
|||||||
"columnNumber": 2,
|
"columnNumber": 2,
|
||||||
"pokedexNumber": 852,
|
"pokedexNumber": 852,
|
||||||
"name": "Centiskorch",
|
"name": "Centiskorch",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 8,
|
"generation": 8,
|
||||||
"originGame": "Sword/Shield",
|
"originGame": "Sword/Shield",
|
||||||
"altOriginGame": "",
|
"altOriginGame": "",
|
||||||
@@ -17208,7 +17208,7 @@
|
|||||||
"columnNumber": 5,
|
"columnNumber": 5,
|
||||||
"pokedexNumber": 859,
|
"pokedexNumber": 859,
|
||||||
"name": "Hatterene",
|
"name": "Hatterene",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 8,
|
"generation": 8,
|
||||||
"originGame": "Sword/Shield",
|
"originGame": "Sword/Shield",
|
||||||
"altOriginGame": "",
|
"altOriginGame": "",
|
||||||
@@ -17253,7 +17253,7 @@
|
|||||||
"columnNumber": 2,
|
"columnNumber": 2,
|
||||||
"pokedexNumber": 862,
|
"pokedexNumber": 862,
|
||||||
"name": "Grimmsnarl",
|
"name": "Grimmsnarl",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 8,
|
"generation": 8,
|
||||||
"originGame": "Sword/Shield",
|
"originGame": "Sword/Shield",
|
||||||
"altOriginGame": "",
|
"altOriginGame": "",
|
||||||
@@ -18468,7 +18468,7 @@
|
|||||||
"columnNumber": 5,
|
"columnNumber": 5,
|
||||||
"pokedexNumber": 880,
|
"pokedexNumber": 880,
|
||||||
"name": "Copperajah",
|
"name": "Copperajah",
|
||||||
"form": "Gigantamax",
|
"form": "",
|
||||||
"generation": 8,
|
"generation": 8,
|
||||||
"originGame": "Sword/Shield",
|
"originGame": "Sword/Shield",
|
||||||
"altOriginGame": "",
|
"altOriginGame": "",
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import { json } from '@sveltejs/kit';
|
||||||
|
import { dbConnect, dbDisconnect } from '$lib/utils/db';
|
||||||
|
import { type PokedexEntry } from '$lib/models/PokedexEntry';
|
||||||
|
import PokedexEntryRepository from '$lib/repositories/PokedexEntryRepository';
|
||||||
|
|
||||||
|
export const GET = async () => {
|
||||||
|
return json(await fetchPokeDexEntriesFromDatabase());
|
||||||
|
};
|
||||||
|
|
||||||
|
async function fetchPokeDexEntriesFromDatabase() {
|
||||||
|
let pokemonData = null as PokedexEntry[] | null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
await dbConnect();
|
||||||
|
const repo = new PokedexEntryRepository();
|
||||||
|
pokemonData = await repo.findAll();
|
||||||
|
// order by pokedexNumber property, ascending
|
||||||
|
pokemonData = pokemonData.sort((a, b) => a.pokedexNumber - b.pokedexNumber);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
} finally {
|
||||||
|
dbDisconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
return pokemonData;
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import { onMount } from 'svelte';
|
||||||
|
import { type PokedexEntry } from '$lib/models/PokedexEntry';
|
||||||
|
import PokemonSprite from '$lib/components/PokemonSprite.svelte';
|
||||||
|
|
||||||
|
let pokemonData = null as PokedexEntry[] | null;
|
||||||
|
|
||||||
|
async function fetchPokeDexEntries() {
|
||||||
|
const response = await fetch('/api/pokedexentries');
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error('Failed to fetch Pokémon data');
|
||||||
|
}
|
||||||
|
|
||||||
|
pokemonData = await response.json();
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(async () => {
|
||||||
|
const cachedData = localStorage.getItem('pokeDexEntries');
|
||||||
|
if (cachedData) {
|
||||||
|
// Use cached data
|
||||||
|
pokemonData = JSON.parse(cachedData);
|
||||||
|
} else {
|
||||||
|
await fetchPokeDexEntries();
|
||||||
|
// Cache data in local storage
|
||||||
|
localStorage.setItem('pokeDexEntries', JSON.stringify(pokemonData));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if pokemonData}
|
||||||
|
{#each pokemonData as pokemon}
|
||||||
|
<div>
|
||||||
|
<PokemonSprite
|
||||||
|
pokedexNumber={pokemon.pokedexNumber.toString().padStart(3, '0')}
|
||||||
|
form={pokemon.form
|
||||||
|
.replace(/[^a-zA-Z ]/g, '')
|
||||||
|
.trim()
|
||||||
|
.replace(/ /g, '-')}
|
||||||
|
/>
|
||||||
|
<p>
|
||||||
|
{pokemon.pokedexNumber.toString().padStart(3, '0')}
|
||||||
|
{pokemon.pokemon}
|
||||||
|
{pokemon.form}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
{:else}
|
||||||
|
<span class="loading loading-spinner loading-xl"></span>
|
||||||
|
{/if}
|
||||||
Reference in New Issue
Block a user